1250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* ------------------------------------------------------------------ 2250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Copyright (C) 1998-2009 PacketVideo 3250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 4250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * you may not use this file except in compliance with the License. 6250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * You may obtain a copy of the License at 7250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 8250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 10250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Unless required by applicable law or agreed to in writing, software 11250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * express or implied. 14250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * See the License for the specific language governing permissions 15250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * and limitations under the License. 16250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * ------------------------------------------------------------------- 17250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber */ 18250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* 19250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 20250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 21250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PacketVideo Corp. 22250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber MP3 Decoder Library 23250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 24250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Filename: pvmp3_get_main_data_size.cpp 25250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 26250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Date: 09/21/2007 27250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 28250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 29250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REVISION HISTORY 30250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 31250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 32250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Description: 33250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 34250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 35250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INPUT AND OUTPUT DEFINITIONS 36250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 37250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Input 38250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber mp3Header *info, pointer to mp3 header info structure 39250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3dec_file *pVars 40250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber contains information that needs to persist 41250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber between calls to this function, or is too big to 42250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber be placed on the stack, even though the data is 43250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber only needed during execution of this function 44250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 45250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Returns 46250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 47250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber main data frame size 48250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 49250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 50250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber FUNCTION DESCRIPTION 51250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 52250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber get main data frame size 53250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 54250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 55250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REQUIREMENTS 56250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 57250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 58250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 59250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REFERENCES 60250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 61250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996) 62250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension 63250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 64250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 65250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PSEUDO-CODE 66250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 67250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 68250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber*/ 69250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 70250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 71250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 72250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; INCLUDES 73250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 74250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 75250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_tables.h" 76250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_get_main_data_size.h" 77250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pv_mp3dec_fxd_op.h" 78250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 79250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 80250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 81250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; MACROS 82250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Define module specific macros here 83250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 84250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 85250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 86250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 87250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; DEFINES 88250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Include all pre-processor statements here. Include conditional 89250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; compile variables also. 90250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 91250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 92250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 93250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL FUNCTION DEFINITIONS 94250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Function Prototype declaration 95250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 96250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 97250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 98250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 99250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Variable declaration - defined here and used outside this module 100250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 101250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 102250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 103250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL FUNCTION REFERENCES 104250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare functions defined elsewhere and referenced in this module 105250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 106250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 107250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 108250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 109250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare variables used in this module but defined elsewhere 110250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 111250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 112250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 113250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE 114250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 115250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 116250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberint32 pvmp3_get_main_data_size(mp3Header *info, 117250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3dec_file *pVars) 118250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 119250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 120250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 121250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 numBytes = fxp_mul32_Q28(mp3_bitrate[info->version_x][info->bitrate_index] << 20, 122250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber inv_sfreq[info->sampling_frequency]); 123250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 124250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 125250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes >>= (20 - info->version_x); 126250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 127250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* 128250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Remove the size of the side information from the main data total 129250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber */ 130250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber if (info->version_x == MPEG_1) 131250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 132250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber pVars->predicted_frame_size = numBytes; 133250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber if (info->mode == MPG_MD_MONO) 134250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 135250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes -= 17; 136250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 137250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber else 138250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 139250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes -= 32; 140250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 141250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 142250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber else 143250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 144250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes >>= 1; 145250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber pVars->predicted_frame_size = numBytes; 146250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 147250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber if (info->mode == MPG_MD_MONO) 148250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 149250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes -= 9; 150250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 151250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber else 152250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 153250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes -= 17; 154250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 155250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 156250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 157250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber if (info->padding) 158250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 159250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes++; 160250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber pVars->predicted_frame_size++; 161250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 162250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 163250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber if (info->error_protection) 164250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 165250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes -= 6; 166250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 167250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber else 168250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 169250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes -= 4; 170250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 171250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 172250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 173250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber if (numBytes < 0) 174250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 175250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber numBytes = 0; 176250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 177250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 178250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return(numBytes); 179250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 180250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 181