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