• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /*
19 ------------------------------------------------------------------------------
20    PacketVideo Corp.
21    MP3 Decoder Library
22 
23    Filename: pvmp3decoder_api.h
24 
25    Date: 09/21/2007
26 
27 ------------------------------------------------------------------------------
28  REVISION HISTORY
29 
30  Description:
31 
32 ------------------------------------------------------------------------------
33  INCLUDE DESCRIPTION
34 
35  This include file defines the structure tPVMP3DecoderExternal
36 
37 ------------------------------------------------------------------------------
38 */
39 
40 /*----------------------------------------------------------------------------
41 ; CONTINUE ONLY IF NOT ALREADY DEFINED
42 ----------------------------------------------------------------------------*/
43 #ifndef PVMP3DECODER_API_H
44 #define PVMP3DECODER_API_H
45 
46 /*----------------------------------------------------------------------------
47 ; INCLUDES
48 ----------------------------------------------------------------------------*/
49 
50 #include "pvmp3_audio_type_defs.h"
51 #include "pvmp3_dec_defs.h"
52 
53 /*----------------------------------------------------------------------------
54 ; MACROS
55 ; Define module specific macros here
56 ----------------------------------------------------------------------------*/
57 #ifdef __cplusplus
58 extern "C"
59 {
60 #endif
61 
62     /*----------------------------------------------------------------------------
63     ; DEFINES
64     ; Include all pre-processor statements here.
65     ----------------------------------------------------------------------------*/
66 
67     /*----------------------------------------------------------------------------
68     ; EXTERNAL VARIABLES REFERENCES
69     ; Declare variables used in this module but defined elsewhere
70     ----------------------------------------------------------------------------*/
71 
72     /*----------------------------------------------------------------------------
73     ; SIMPLE TYPEDEF'S
74     ----------------------------------------------------------------------------*/
75 
76     /*----------------------------------------------------------------------------
77     ; ENUMERATED TYPEDEF'S
78     ----------------------------------------------------------------------------*/
79     typedef enum
80     {
81         flat       = 0,
82         bass_boost = 1,
83         rock       = 2,
84         pop        = 3,
85         jazz       = 4,
86         classical  = 5,
87         talk       = 6,
88         flat_      = 7
89 
90     } e_equalization;
91 
92 
93 
94     typedef enum ERROR_CODE
95     {
96         NO_DECODING_ERROR         = 0,
97         UNSUPPORTED_LAYER         = 1,
98         UNSUPPORTED_FREE_BITRATE  = 2,
99         FILE_OPEN_ERROR           = 3,          /* error opening file */
100         CHANNEL_CONFIG_ERROR      = 4,     /* error in channel configuration */
101         SYNTHESIS_WINDOW_ERROR    = 5,   /* error in synthesis window table */
102         READ_FILE_ERROR           = 6,          /* error reading input file */
103         SIDE_INFO_ERROR           = 7,          /* error in side info */
104         HUFFMAN_TABLE_ERROR       = 8,      /* error in Huffman table */
105         COMMAND_LINE_ERROR        = 9,       /* error in command line */
106         MEMORY_ALLOCATION_ERROR   = 10,   /* error allocating memory */
107         NO_ENOUGH_MAIN_DATA_ERROR = 11,
108         SYNCH_LOST_ERROR          = 12,
109         OUTPUT_BUFFER_TOO_SMALL   = 13     /* output buffer can't hold output */
110     } ERROR_CODE;
111 
112     /*----------------------------------------------------------------------------
113     ; STRUCTURES TYPEDEF'S
114     ----------------------------------------------------------------------------*/
115 
116     typedef struct
117 #ifdef __cplusplus
118                 tPVMP3DecoderExternal
119 #endif
120     {
121 
122         /*
123          * INPUT:
124          * Pointer to the input buffer that contains the encoded bistream data.
125          * The data is filled in such that the first bit transmitted is
126          * the most-significant bit (MSB) of the first array element.
127          * The buffer is accessed in a linear fashion for speed, and the number of
128          * bytes consumed varies frame to frame.
129          * The calling environment can change what is pointed to between calls to
130          * the decode function, library, as long as the inputBufferCurrentLength,
131          * and inputBufferUsedLength are updated too. Also, any remaining bits in
132          * the old buffer must be put at the beginning of the new buffer.
133          */
134         uint8      *pInputBuffer;
135 
136         /*
137          * INPUT:
138          * Number of valid bytes in the input buffer, set by the calling
139          * function. After decoding the bitstream the library checks to
140          * see if it when past this value; it would be to prohibitive to
141          * check after every read operation. This value is not modified by
142          * the MP3 library.
143          */
144         int32     inputBufferCurrentLength;
145 
146         /*
147          * INPUT/OUTPUT:
148          * Number of elements used by the library, initially set to zero by
149          * the function pvmp3_resetDecoder(), and modified by each
150          * call to pvmp3_framedecoder().
151          */
152         int32     inputBufferUsedLength;
153 
154         /*
155          * OUTPUT:
156          * holds the predicted frame size. It used on the test console, for parsing
157          * purposes.
158          */
159         uint32     CurrentFrameLength;
160 
161         /*
162          * INPUT:
163          * This variable holds the type of equalization used
164          *
165          *
166          */
167         e_equalization     equalizerType;
168 
169 
170         /*
171          * INPUT:
172          * The actual size of the buffer.
173          * This variable is not used by the library, but is used by the
174          * console test application. This parameter could be deleted
175          * if this value was passed into these function.
176          */
177         int32     inputBufferMaxLength;
178 
179         /*
180          * OUTPUT:
181          * The number of channels decoded from the bitstream.
182          */
183         int16       num_channels;
184 
185         /*
186          * OUTPUT:
187          * The number of channels decoded from the bitstream.
188          */
189         int16       version;
190 
191         /*
192          * OUTPUT:
193          * The sampling rate decoded from the bitstream, in units of
194          * samples/second.
195          */
196         int32       samplingRate;
197 
198         /*
199          * OUTPUT:
200          * This value is the bitrate in units of bits/second. IT
201          * is calculated using the number of bits consumed for the current frame,
202          * and then multiplying by the sampling_rate, divided by points in a frame.
203          * This value can changes frame to frame.
204          */
205         int32       bitRate;
206 
207         /*
208          * INPUT/OUTPUT:
209          * In: Inform decoder how much more room is available in the output buffer in int16 samples
210          * Out: Size of the output frame in 16-bit words, This value depends on the mp3 version
211          */
212         int32     outputFrameSize;
213 
214         /*
215          * INPUT:
216          * Flag to enable/disable crc error checking
217          */
218         int32     crcEnabled;
219 
220         /*
221          * OUTPUT:
222          * This value is used to accumulate bit processed and compute an estimate of the
223          * bitrate. For debugging purposes only, as it will overflow for very long clips
224          */
225         uint32     totalNumberOfBitsUsed;
226 
227 
228         /*
229          * INPUT: (but what is pointed to is an output)
230          * Pointer to the output buffer to hold the 16-bit PCM audio samples.
231          * If the output is stereo, both left and right channels will be stored
232          * in this one buffer.
233          */
234 
235         int16       *pOutputBuffer;
236 
237     } tPVMP3DecoderExternal;
238 
239 uint32 pvmp3_decoderMemRequirements(void);
240 
241 void pvmp3_InitDecoder(tPVMP3DecoderExternal *pExt,
242                        void  *pMem);
243 
244 void pvmp3_resetDecoder(void  *pMem);
245 
246 ERROR_CODE pvmp3_framedecoder(tPVMP3DecoderExternal *pExt,
247                               void              *pMem);
248 
249 #ifdef __cplusplus
250 }
251 #endif
252 
253 /*----------------------------------------------------------------------------
254 ; END
255 ----------------------------------------------------------------------------*/
256 
257 #endif
258 
259 
260