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_dct6.cpp 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Date: 09/21/2007 27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY 30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description: 33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS 36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 vec[] vector of 6 32-bit integers 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberReturns 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 vec[] dct computation in-place 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns the dct of length 6 of the input vector 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_audio_type_defs.h" 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h" 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_mdct_6.h" 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also. 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 82183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define Qfmt30(a) (Int32)((a)*((Int32)1<<30) + ((a)>=0?0.5F:-0.5F)) 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define cos_pi_6 Qfmt30( 0.86602540378444f) 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define cos_2_pi_6 Qfmt30( 0.5f) 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define cos_7_pi_12 Qfmt30( -0.25881904510252f) 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define cos_3_pi_12 Qfmt30( 0.70710678118655f) 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define cos_11_pi_12 Qfmt30( -0.96592582628907f) 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_dct_6(int32 vec[]) 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 tmp0; 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 tmp1; 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 tmp2; 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 tmp3; 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 tmp4; 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 tmp5; 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* split input vector */ 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp0 = vec[5] + vec[0]; 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp5 = vec[5] - vec[0]; 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp1 = vec[4] + vec[1]; 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp4 = vec[4] - vec[1]; 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp2 = vec[3] + vec[2]; 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3 = vec[3] - vec[2]; 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[0] = tmp0 + tmp2 ; 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[2] = fxp_mul32_Q30(tmp0 - tmp2, cos_pi_6); 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[4] = (vec[0] >> 1) - tmp1; 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[0] += tmp1; 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp0 = fxp_mul32_Q30(tmp3, cos_7_pi_12); 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp0 = fxp_mac32_Q30(tmp4, -cos_3_pi_12, tmp0); 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[1] = fxp_mac32_Q30(tmp5, cos_11_pi_12, tmp0); 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[3] = fxp_mul32_Q30((tmp3 + tmp4 - tmp5), cos_3_pi_12); 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp0 = fxp_mul32_Q30(tmp3, cos_11_pi_12); 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp0 = fxp_mac32_Q30(tmp4, cos_3_pi_12, tmp0); 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber vec[5] = fxp_mac32_Q30(tmp5, cos_7_pi_12, tmp0); 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 153