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 Filename: mdct_18.cpp 24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Date: 09/21/2007 26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY 29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description: 32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS 35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput 37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 vec[], input vector of length 6 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *history input for overlap and add, vector updated with 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber next overlap and add values 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberReturns 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber none mdct computation in-place 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns the mdct of length 6 of the input vector, as well as the overlap 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vector for next iteration ( on history[]) 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h" 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_mdct_6.h" 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also. 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define QFORMAT 29 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define Qfmt29(a) (int32)(a*((int32)1<<QFORMAT) + (a>=0?0.5F:-0.5F)) 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * (1./(2*cos((pi/(2*N))*(2*i+1)))), N = 12, i = [0:N/2-1] 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst int32 cosTerms_1_ov_cos_phi_N6[6] = 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt29(0.50431448029008f), Qfmt29(0.54119610014620f), 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt29(0.63023620700513f), Qfmt29(0.82133981585229f), 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Qfmt29(1.30656296487638f), Qfmt29(3.83064878777019f) 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; FUNCTION CODE 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_mdct_6(int32 vec[], int32 *history) 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 i; 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp; 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp1; 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 tmp2; 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_vec = vec; 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 *pt_vec_o = vec; 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber const int32 *pt_cos = cosTerms_1_ov_cos_phi_N6; 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber for (i = 2; i != 0; i--) 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = *(pt_vec++); 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = *(pt_vec++); 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = *(pt_vec++); 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *(pt_vec_o++) = fxp_mul32_Q29(tmp, *(pt_cos++)); 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *(pt_vec_o++) = fxp_mul32_Q29(tmp1, *(pt_cos++)); 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *(pt_vec_o++) = fxp_mul32_Q29(tmp2, *(pt_cos++)); 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pvmp3_dct_6(vec); // Even terms 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = -(vec[0] + vec[1]); 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[3] = tmp; 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[2] = tmp; 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = -(vec[1] + vec[2]); 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[0] = vec[3] + vec[4]; 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[1] = vec[4] + vec[5]; 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[4] = tmp; 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[1] = tmp; 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp = -(vec[2] + vec[3]); 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[4] = -vec[1]; 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[5] = tmp; 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber history[0] = tmp; 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[2] = vec[5]; 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[3] = -vec[5]; 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[5] = -vec[0]; 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 166