1d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* ------------------------------------------------------------------ 2d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Copyright (C) 1998-2009 PacketVideo 3d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 4d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * you may not use this file except in compliance with the License. 6d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * You may obtain a copy of the License at 7d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 8d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 10d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Unless required by applicable law or agreed to in writing, software 11d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * express or implied. 14d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * See the License for the specific language governing permissions 15d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * and limitations under the License. 16d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * ------------------------------------------------------------------- 17d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 18d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 19d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* 20d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 21d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PacketVideo Corp. 23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber MP3 Decoder Library 24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Filename: pvmp3_polyphase_filter_window.cpp 26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Date: 09/21/2007 28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY 31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description: 34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS 37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *synth_buffer, synthesis input buffer 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int16 *outPcm, generated output ( 32 values) 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 numChannels number of channels 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int16 *outPcm 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber apply polyphase filter window 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Input 32 subband samples 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Calculate 64 values 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996) 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#if ( !defined(PV_ARM_GCC_V5) && !defined(PV_ARM_GCC_V4) && !defined(PV_ARM_V5) && !defined(PV_ARM_V4) ) 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_polyphase_filter_window.h" 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h" 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_dec_defs.h" 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_tables.h" 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module1 specific macros here 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also. 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module1 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module_x 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module_x but defined elsewhere 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_polyphase_filter_window(int32 *synth_buffer, 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int16 *outPcm, 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 numChannels) 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 sum1; 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 sum2; 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *winPtr = pqmfSynthWin; 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 i; 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (int16 j = 1; j < SUBBANDS_NUMBER / 2; j++) 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = 0x00000020; 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = 0x00000020; 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (i = (SUBBANDS_NUMBER >> 1); 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber i < HAN_SIZE + (SUBBANDS_NUMBER >> 1); 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber i += SUBBANDS_NUMBER << 4) 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_1 = &synth_buffer[ i+j]; 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_2 = &synth_buffer[ i-j]; 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 temp1 = pt_1[ 0]; 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 temp3 = pt_2[ SUBBANDS_NUMBER*15 ]; 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 temp2 = pt_2[ SUBBANDS_NUMBER* 1 ]; 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 temp4 = pt_1[ SUBBANDS_NUMBER*14 ]; 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp1, winPtr[ 0]); 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp3, winPtr[ 0]); 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp1, winPtr[ 1]); 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_msb32_Q32(sum1, temp3, winPtr[ 1]); 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp2, winPtr[ 2]); 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_msb32_Q32(sum2, temp4, winPtr[ 2]); 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp2, winPtr[ 3]); 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp4, winPtr[ 3]); 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp1 = pt_1[ SUBBANDS_NUMBER* 2]; 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp3 = pt_2[ SUBBANDS_NUMBER*13]; 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp2 = pt_2[ SUBBANDS_NUMBER* 3]; 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp4 = pt_1[ SUBBANDS_NUMBER*12]; 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp1, winPtr[ 4]); 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp3, winPtr[ 4]); 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp1, winPtr[ 5]); 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_msb32_Q32(sum1, temp3, winPtr[ 5]); 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp2, winPtr[ 6]); 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_msb32_Q32(sum2, temp4, winPtr[ 6]); 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp2, winPtr[ 7]); 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp4, winPtr[ 7]); 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp1 = pt_1[ SUBBANDS_NUMBER* 4 ]; 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp3 = pt_2[ SUBBANDS_NUMBER*11 ]; 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp2 = pt_2[ SUBBANDS_NUMBER* 5 ]; 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp4 = pt_1[ SUBBANDS_NUMBER*10 ]; 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp1, winPtr[ 8]); 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp3, winPtr[ 8]); 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp1, winPtr[ 9]); 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_msb32_Q32(sum1, temp3, winPtr[ 9]); 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp2, winPtr[10]); 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_msb32_Q32(sum2, temp4, winPtr[10]); 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp2, winPtr[11]); 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp4, winPtr[11]); 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp1 = pt_1[ SUBBANDS_NUMBER*6 ]; 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp3 = pt_2[ SUBBANDS_NUMBER*9 ]; 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp2 = pt_2[ SUBBANDS_NUMBER*7 ]; 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp4 = pt_1[ SUBBANDS_NUMBER*8 ]; 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp1, winPtr[12]); 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp3, winPtr[12]); 186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp1, winPtr[13]); 187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_msb32_Q32(sum1, temp3, winPtr[13]); 188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp2, winPtr[14]); 189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_msb32_Q32(sum2, temp4, winPtr[14]); 190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp2, winPtr[15]); 191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp4, winPtr[15]); 192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber winPtr += 16; 194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 k = j << (numChannels - 1); 199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber outPcm[k] = saturate16(sum1 >> 6); 200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber outPcm[(numChannels<<5) - k] = saturate16(sum2 >> 6); 201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = 0x00000020; 206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = 0x00000020; 207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (i = 16; i < HAN_SIZE + 16; i += (SUBBANDS_NUMBER << 2)) 210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_synth = &synth_buffer[i]; 212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 temp1 = pt_synth[ 0 ]; 213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 temp2 = pt_synth[ SUBBANDS_NUMBER ]; 214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 temp3 = pt_synth[ SUBBANDS_NUMBER/2]; 215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp1, winPtr[0]) ; 217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp2, winPtr[1]) ; 218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp3, winPtr[2]) ; 219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp1 = pt_synth[ SUBBANDS_NUMBER<<1 ]; 221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp2 = pt_synth[ 3*SUBBANDS_NUMBER ]; 222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber temp3 = pt_synth[ SUBBANDS_NUMBER*5/2]; 223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp1, winPtr[3]) ; 225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum1 = fxp_mac32_Q32(sum1, temp2, winPtr[4]) ; 226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sum2 = fxp_mac32_Q32(sum2, temp3, winPtr[5]) ; 227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber winPtr += 6; 229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber outPcm[0] = saturate16(sum1 >> 6); 233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber outPcm[(SUBBANDS_NUMBER/2)<<(numChannels-1)] = saturate16(sum2 >> 6); 234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif // If not assembly 239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 240