1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------ 2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License. 6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at 7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied. 14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions 15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License. 16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * ------------------------------------------------------------------- 17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* 19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Filename: dct16.c 20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who: Date: MM/DD/YYYY 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 x 32-bit integer input length 16 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 flag 1 forward dct16, 0 modified dct-16 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Implement dct of lenght 16 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef AAC_PLUS 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "dct16.h" 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "fxp_mul32.h" 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also. 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define Qfmt_31(a) (Int32)(a*0x7FFFFFFF + (a>=0?0.5F:-0.5F)) 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define Qfmt15(x) (Int16)(x*((Int32)1<<15) + (x>=0?0.5F:-0.5F)) 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid dct_16(Int32 vec[], Int flag) 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp0; 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp1; 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp2; 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp3; 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp4; 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp5; 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp6; 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp7; 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o0; 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o1; 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o2; 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o3; 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o4; 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o5; 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o6; 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 tmp_o7; 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 itmp_e0; 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 itmp_e1; 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 itmp_e2; 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* split input vector */ 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o0 = fxp_mul32_by_16((vec[ 0] - vec[15]), Qfmt15(0.50241928618816F)); 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp0 = vec[ 0] + vec[15]; 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o7 = fxp_mul32_Q31((vec[ 7] - vec[ 8]) << 3, Qfmt_31(0.63764357733614F)); 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp7 = vec[ 7] + vec[ 8]; 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber itmp_e0 = (tmp0 + tmp7); 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp7 = fxp_mul32_by_16((tmp0 - tmp7), Qfmt15(0.50979557910416F)); 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o1 = fxp_mul32_by_16((vec[ 1] - vec[14]), Qfmt15(0.52249861493969F)); 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = vec[ 1] + vec[14]; 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o6 = fxp_mul32_by_16((vec[ 6] - vec[ 9]) << 1, Qfmt15(0.86122354911916F)); 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp6 = vec[ 6] + vec[ 9]; 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber itmp_e1 = (tmp1 + tmp6); 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp6 = fxp_mul32_by_16((tmp1 - tmp6), Qfmt15(0.60134488693505F)); 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o2 = fxp_mul32_by_16((vec[ 2] - vec[13]), Qfmt15(0.56694403481636F)); 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = vec[ 2] + vec[13]; 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o5 = fxp_mul32_by_16((vec[ 5] - vec[10]) << 1, Qfmt15(0.53033884299517F)); 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp5 = vec[ 5] + vec[10]; 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber itmp_e2 = (tmp2 + tmp5); 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp5 = fxp_mul32_by_16((tmp2 - tmp5), Qfmt15(0.89997622313642F)); 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o3 = fxp_mul32_by_16((vec[ 3] - vec[12]), Qfmt15(0.64682178335999F)); 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp3 = vec[ 3] + vec[12]; 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o4 = fxp_mul32_by_16((vec[ 4] - vec[11]), Qfmt15(0.78815462345125F)); 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp4 = vec[ 4] + vec[11]; 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = (tmp3 + tmp4); 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp4 = fxp_mul32_Q31((tmp3 - tmp4) << 2, Qfmt_31(0.64072886193538F)); 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* split even part of tmp_e */ 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp0 = (itmp_e0 + tmp1); 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = fxp_mul32_by_16((itmp_e0 - tmp1), Qfmt15(0.54119610014620F)); 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp3 = fxp_mul32_by_16((itmp_e1 - itmp_e2) << 1, Qfmt15(0.65328148243819F)); 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = (itmp_e1 + itmp_e2); 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 0] = (tmp0 + tmp2) >> 1; 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 8] = fxp_mul32_by_16((tmp0 - tmp2), Qfmt15(0.70710678118655F)); 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[12] = fxp_mul32_by_16((tmp1 - tmp3) << 1, Qfmt15(0.70710678118655F)); 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 4] = tmp1 + tmp3; 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 4] += vec[12]; 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* split odd part of tmp_e */ 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = fxp_mul32_by_16((tmp7 - tmp4) << 1, Qfmt15(0.54119610014620F)); 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp7 += tmp4; 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp3 = fxp_mul32_Q31((tmp6 - tmp5) << 2, Qfmt_31(0.65328148243819F)); 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp6 += tmp5; 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[10] = fxp_mul32_by_16((tmp7 - tmp6) << 1, Qfmt15(0.70710678118655F)); 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 2] = tmp7 + tmp6; 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[14] = fxp_mul32_by_16((tmp1 - tmp3) << 1, Qfmt15(0.70710678118655F)); 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 += tmp3 + vec[14]; 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 2] += tmp1; 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 6] = tmp1 + vec[10]; 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[10] += vec[14]; 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber // dct8; 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp7 = tmp_o0 + tmp_o7; 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o7 = fxp_mul32_by_16((tmp_o0 - tmp_o7) << 1, Qfmt15(0.50979557910416F)); 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp6 = tmp_o1 + tmp_o6; 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o1 = fxp_mul32_by_16((tmp_o1 - tmp_o6) << 1, Qfmt15(0.60134488693505F)); 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp5 = tmp_o2 + tmp_o5; 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o5 = fxp_mul32_by_16((tmp_o2 - tmp_o5) << 1, Qfmt15(0.89997622313642F)); 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp4 = tmp_o3 + tmp_o4; 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o3 = fxp_mul32_Q31((tmp_o3 - tmp_o4) << 3, Qfmt_31(0.6407288619354F)); 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (!flag) 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp7 = -tmp7; 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o7 = -tmp_o7; 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp6 = -tmp6; 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o1 = -tmp_o1; 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp5 = -tmp5; 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o5 = -tmp_o5; 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp4 = -tmp4; 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp_o3 = -tmp_o3; 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber // even part 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = fxp_mul32_by_16((tmp7 - tmp4) << 1, Qfmt15(0.54119610014620F)); 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp0 = tmp7 + tmp4; 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp3 = fxp_mul32_Q31((tmp6 - tmp5) << 2, Qfmt_31(0.65328148243819F)); 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = tmp6 + tmp5; 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 9] = fxp_mul32_Q31((tmp0 - tmp2) << 1, Qfmt_31(0.70710678118655F)); 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 1] = tmp0 + tmp2; 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[13] = fxp_mul32_Q31((tmp1 - tmp3) << 1, Qfmt_31(0.70710678118655F)); 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 5] = tmp1 + tmp3 + vec[13]; 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber // odd part 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp0 = tmp_o7 + tmp_o3; 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp1 = fxp_mul32_by_16((tmp_o7 - tmp_o3) << 1, Qfmt15(0.54119610014620F)); 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp2 = tmp_o1 + tmp_o5; 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tmp3 = fxp_mul32_Q31((tmp_o1 - tmp_o5) << 2, Qfmt_31(0.65328148243819F)); 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[11] = fxp_mul32_Q31((tmp0 - tmp2) << 1, Qfmt_31(0.70710678118655F)); 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 3] = tmp0 + tmp2; 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[15] = fxp_mul32_Q31((tmp1 - tmp3) << 1, Qfmt_31(0.70710678118655F)); 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 7] = tmp1 + tmp3 + vec[15]; 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 3] += vec[ 7]; 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 7] += vec[11]; 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[11] += vec[15]; 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 1] += vec[ 3]; 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 3] += vec[ 5]; 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 5] += vec[ 7]; 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 7] += vec[ 9]; 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[ 9] += vec[11]; 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[11] += vec[13]; 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber vec[13] += vec[15]; 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 267