1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------
2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License.
6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at
7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software
11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied.
14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions
15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License.
16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * -------------------------------------------------------------------
17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */
18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*
19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber  Name: PVMP4AudioDecoder_API.h
21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY
24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Change buffer type to UChar
26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Update comments
28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Updated a comment that MT did not get around to
30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber before the end of his contract.
31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: add a new API to decode audioSpecificConfig separately, the same
33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber              change has been made on 32-bits version (element \main\2)
34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: add a new API to reset history buffer, the same change has been
36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber              made on a 32-bits version(element \nd.e0352.wjin\1)
37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who:                                       Date:
39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:
40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INCLUDE DESCRIPTION
43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Main header file for the Packet Video MP4/AAC audio decoder library. The
45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber constants, structures, and functions defined within this file, along with
46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber a basic data types header file, is all that is needed to use and communicate
47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber with the library. The internal data structures within the library are
48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber purposely hidden.
49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ---* Need description of the input buffering. *-------
51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ---* Need an example of calling the library here *----
53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES
56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber  (Normally header files do not have a reference section)
58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber  ISO/EIC 14496-3:(1999) Document titled
60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/
62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; CONTINUE ONLY IF NOT ALREADY DEFINED
65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifndef PVMP4AUDIODECODER_API_H
67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define PVMP4AUDIODECODER_API_H
68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h"  /* Basic data types used within the lib */
70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "e_tmp4audioobjecttype.h"
72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES
75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus
77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberextern "C"
78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{
79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; MACROS
83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; Define module specific macros here
84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; DEFINES
88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; Include all pre-processor statements here.
89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * This constant is the guaranteed-to-work buffer size, specified in bytes,
93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * for the input buffer for 2 audio channels to decode one frame of data,
94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * as specified by the MPEG-2 or MPEG-4 standard.
95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * The standard, and this constant, do not take into account that lower
96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * bitrates will use less data per frame. Note that the number of bits
97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * used per frame is variable, and only that the average value will be the
98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * bit rate specified during encoding. The standard does not specify
99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * over how many frames the average must be maintained.
100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *
101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * The constant value is 6144 * 2 channels / 8 bits per byte
102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define PVMP4AUDIODECODER_INBUFSIZE  1536
106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; EXTERNAL VARIABLES REFERENCES
109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; Declare variables used in this module but defined elsewhere
110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; SIMPLE TYPEDEF'S
114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; ENUMERATED TYPEDEF'S
118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * This enumeration is used for the structure element outputFormat. It
121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * specifies how the output data is to be formatted. Presently only 16-bit
122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * PCM data is supported, and this enum informs how the single output
123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * buffer should be for two-channel stereo data.
124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * Grouped format stores all the left channel values, then right:
125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * "LLLL...LLRRRR...RR"
126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * Interleave format store left, then right audio samples:
127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * "LRLRLRLR...."
128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    typedef enum ePVMP4AudioDecoderOutputFormat
130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        OUTPUTFORMAT_16PCM_GROUPED = 0,
132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        OUTPUTFORMAT_16PCM_INTERLEAVED = 1
133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } tPVMP4AudioDecoderOutputFormat;
135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * This enumeration holds the possible return values for the main decoder
138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * function, PVMP4AudioDecodeFrame. The plan was to easily distinguish
139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * whether an error was recoverable (streaming mode) or not. Presently no
140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * errors are recoverable, which is a result of not supporting ADTS in
141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * this release.
142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    typedef enum ePVMP4AudioDecoderErrorCode
144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MP4AUDEC_SUCCESS           =  0,
146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MP4AUDEC_INVALID_FRAME     = 10,
147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MP4AUDEC_INCOMPLETE_FRAME  = 20,
148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MP4AUDEC_LOST_FRAME_SYNC   = 30     /* Cannot happen since no ADTS */
149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } tPVMP4AudioDecoderErrorCode;
150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * This enumeration holds the possible return values for stream type
154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * being decoded
155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    typedef enum
157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        AAC = 0,
159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        AACPLUS,
160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        ENH_AACPLUS
161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } STREAMTYPE;
162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; STRUCTURES TYPEDEF'S
165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * This structure is used to communicate information in to and out of the
168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * AAC decoder.
169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    typedef struct
172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus
173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                tPVMP4AudioDecoderExternal  // To allow forward declaration of this struct in C++
174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Pointer to the input buffer that contains the encoded bistream data.
179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The data is filled in such that the first bit transmitted is
180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * the most-significant bit (MSB) of the first array element.
181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The buffer is accessed in a linear fashion for speed, and the number of
182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * bytes consumed varies frame to frame.
183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The calling environment can change what is pointed to between calls to
184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * the decode function, library, as long as the inputBufferCurrentLength,
185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * and inputBufferUsedLength are updated too. Also, any remaining bits in
186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * the old buffer must be put at the beginning of the new buffer.
187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        UChar  *pInputBuffer;
189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Number of valid bytes in the input buffer, set by the calling
193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * function. After decoding the bitstream the library checks to
194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * see if it when past this value; it would be to prohibitive to
195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * check after every read operation. This value is not modified by
196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * the AAC library.
197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     inputBufferCurrentLength;
199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The actual size of the buffer.
203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * This variable is not used by the library, but is used by the
204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * console test application. This parameter could be deleted
205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * if this value was passed into these function. The helper functions are
206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * not part of the library and are not used by the Common Audio Decoder
207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Interface.
208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     inputBufferMaxLength;
210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Enumerated value the output is to be interleaved left-right-left-right.
214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * For further information look at the comments for the enumeration.
215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tPVMP4AudioDecoderOutputFormat  outputFormat;
217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT: (but what is pointed to is an output)
220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Pointer to the output buffer to hold the 16-bit PCM audio samples.
221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * If the output is stereo, both left and right channels will be stored
222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * in this one buffer. Presently it must be of length of 2048 points.
223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The format of the buffer is set by the parameter outputFormat.
224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int16  *pOutputBuffer;
226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT: (but what is pointed to is an output)
229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Pointer to the output buffer to hold the 16-bit PCM AAC-plus audio samples.
230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * If the output is stereo, both left and right channels will be stored
231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * in this one buffer. Presently it must be of length of 2048 points.
232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The format of the buffer is set by the parameter outputFormat.
233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int16  *pOutputBuffer_plus;     /* Used in AAC+ and enhanced AAC+  */
235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * AAC Plus Upsampling Factor. Normally set to 2 when Spectrum Band
239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Replication (SBR) is used
240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  aacPlusUpsamplingFactor; /* Used in AAC+ and enhanced AAC+  */
242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * AAC Plus enabler. Deafaults to be ON, unless run time conditions
246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * require the SBR and PS tools disabled
247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        bool    aacPlusEnabled;
249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * (Currently not being used inside the AAC library.)
252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * This flag is set to TRUE when the playback position has been changed,
253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * for example, rewind or fast forward. This informs the AAC library to
254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * take an appropriate action, which has yet to be determined.
255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Bool    repositionFlag;
257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT:
260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Number of requested output audio channels. This relieves the calling
261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * environment from having to perform stereo-to-mono or mono-to-stereo
262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * conversions.
263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     desiredChannels;
265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT/OUTPUT:
268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Number of elements used by the library, initially set to zero by
269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * the function PVMP4AudioDecoderInitLibrary, and modified by each
270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * call to PVMP4AudioDecodeFrame.
271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     inputBufferUsedLength;
273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * INPUT/OUTPUT:
276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Number of bits left over in the next buffer element,
277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * This value will always be zero, unless support for ADTS is added.
278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32    remainderBits;
280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * OUTPUT:
283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The sampling rate decoded from the bitstream, in units of
284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * samples/second. For this release of the library this value does
285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * not change from frame to frame, but future versions will.
286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32   samplingRate;
288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * OUTPUT:
291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * This value is the bitrate in units of bits/second. IT
292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * is calculated using the number of bits consumed for the current frame,
293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * and then multiplying by the sampling_rate, divided by points in a frame.
294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * This value can changes frame to frame.
295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32   bitRate;
297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
299dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * OUTPUT:
300dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * The number of channels decoded from the bitstream. The output data
301dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * will have be the amount specified in the variable desiredChannels,
302dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * this output is informative only, and can be ignored.
303dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
304dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     encodedChannels;
305dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
306dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
307dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * OUTPUT:
308dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * This value is the number of output PCM samples per channel.
309dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * It is presently hard-coded to 1024, but may change in the future.
310dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * It will not change frame to frame, and would take on
311dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * one of these four values: 1024, 960, 512, or 480. If an error occurs
312dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * do not rely on this value.
313dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
314dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     frameLength;
315dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
316dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
317dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        * This value is audio object type as defined in struct tMP4AudioObjectType
318dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        * in file e_tMP4AudioObjectType.h
319dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        */
320dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     audioObjectType;
321dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
322dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
323dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        * This value is extended audio object type as defined in struct tMP4AudioObjectType
324dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        * in file e_tMP4AudioObjectType.h. It carries the output Audio Object Type
325dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        */
326dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int     extendedAudioObjectType;
327dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
328dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
329dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } tPVMP4AudioDecoderExternal;
330dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
331dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
332dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; GLOBAL FUNCTION DEFINITIONS
333dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; Function Prototype declaration
334dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
335dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
336dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    OSCL_IMPORT_REF UInt32 PVMP4AudioDecoderGetMemRequirements(void);
337dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
338dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    OSCL_IMPORT_REF Int PVMP4AudioDecoderInitLibrary(
339dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tPVMP4AudioDecoderExternal  *pExt,
340dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        void                        *pMem);
341dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
342dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    OSCL_IMPORT_REF Int PVMP4AudioDecodeFrame(
343dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tPVMP4AudioDecoderExternal  *pExt,
344dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        void                        *pMem);
345dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
346dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    OSCL_IMPORT_REF Int PVMP4AudioDecoderConfig(
347dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tPVMP4AudioDecoderExternal  *pExt,
348dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        void                        *pMem);
349dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
350dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    OSCL_IMPORT_REF void PVMP4AudioDecoderResetBuffer(
351dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        void                        *pMem);
352dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
353dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    OSCL_IMPORT_REF void PVMP4AudioDecoderDisableAacPlus(
354dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tPVMP4AudioDecoderExternal  *pExt,
355dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        void                        *pMem);
356dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
357dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    Int PVMP4SetAudioConfig(
358dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tPVMP4AudioDecoderExternal  *pExt,
359dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        void                        *pMem,
360dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int                         upsamplingFactor,
361dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int                         samp_rate,
362dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        int                         num_ch,
363dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tMP4AudioObjectType         audioObjectType);
364dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
365dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*----------------------------------------------------------------------------
366dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ; END
367dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ----------------------------------------------------------------------------*/
368dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
369dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus
370dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber}
371dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
372dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
373dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
374dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif  /* PVMP4AUDIODECODER_API_H */
375dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
376dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
377