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_get_main_data_size.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 Huber Input 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mp3Header *info, pointer to mp3 header info structure 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3dec_file *pVars 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber contains information that needs to persist 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber between calls to this function, or is too big to 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber be placed on the stack, even though the data is 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber only needed during execution of this function 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber main data frame size 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber get main data frame size 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996) 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_tables.h" 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_get_main_data_size.h" 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h" 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here 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 module 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberint32 pvmp3_get_main_data_size(mp3Header *info, 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3dec_file *pVars) 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 numBytes = fxp_mul32_Q28(mp3_bitrate[info->version_x][info->bitrate_index] << 20, 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber inv_sfreq[info->sampling_frequency]); 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes >>= (20 - info->version_x); 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Remove the size of the side information from the main data total 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (info->version_x == MPEG_1) 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pVars->predicted_frame_size = numBytes; 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (info->mode == MPG_MD_MONO) 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes -= 17; 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber else 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes -= 32; 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber else 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes >>= 1; 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pVars->predicted_frame_size = numBytes; 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (info->mode == MPG_MD_MONO) 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes -= 9; 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber else 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes -= 17; 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (info->padding) 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes++; 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber pVars->predicted_frame_size++; 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (info->error_protection) 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes -= 6; 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber else 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes -= 4; 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (numBytes < 0) 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber numBytes = 0; 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return(numBytes); 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 181