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 PacketVideo Corp. 22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber MP3 Decoder Library 23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Filename: pvmp3_poly_phase_synthesis.cpp 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 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 Input 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3dec_chan *pChVars, decoder state structure per channel 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 numChannels, number of channels 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber e_equalization equalizerType, equalization mode 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int16 *outPcm pointer to the PCM output data 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Output 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int16 *outPcm pointer to the PCM output data 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber polyphase synthesis 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Each time the subband samples for all 32 polyphase subbands of one 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber channel have been calculated, they can be applied to the synthesis 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber subband filter and 32 consecutive audio samples can be calculated 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996) 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_poly_phase_synthesis.h" 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_polyphase_filter_window.h" 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h" 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_dec_defs.h" 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_dct_16.h" 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_equalizer.h" 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "mp3_mem_funcs.h" 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also. 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_poly_phase_synthesis(tmp3dec_chan *pChVars, 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 numChannels, 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber e_equalization equalizerType, 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int16 *outPcm) 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Equalizer 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_equalizer(pChVars->circ_buffer, 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber equalizerType, 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pChVars->work_buf_int32); 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int16 * ptr_out = outPcm; 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (int32 band = 0; band < FILTERBANK_BANDS; band += 2) 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *inData = &pChVars->circ_buffer[544 - (band<<5)]; 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * DCT 32 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_split(&inData[16]); 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_16(&inData[16], 0); 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_16(inData, 1); // Even terms 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_merge_in_place_N32(inData); 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_polyphase_filter_window(inData, 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ptr_out, 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numChannels); 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber inData -= SUBBANDS_NUMBER; 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * DCT 32 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_split(&inData[16]); 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_16(&inData[16], 0); 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_16(inData, 1); // Even terms 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_merge_in_place_N32(inData); 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_polyphase_filter_window(inData, 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ptr_out + (numChannels << 5), 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numChannels); 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ptr_out += (numChannels << 6); 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber inData -= SUBBANDS_NUMBER; 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber }/* end band loop */ 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pv_memmove(&pChVars->circ_buffer[576], 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pChVars->circ_buffer, 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 480*sizeof(*pChVars->circ_buffer)); 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 188