xref: /aosp_15_r20/external/aac/libAACdec/include/aacdecoder_lib.h (revision e54365361535b070c2db7374cec45c159c7d0e7a)
1*e5436536SAndroid Build Coastguard Worker /* -----------------------------------------------------------------------------
2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android
3*e5436536SAndroid Build Coastguard Worker 
4*e5436536SAndroid Build Coastguard Worker © Copyright  1995 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten
5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved.
6*e5436536SAndroid Build Coastguard Worker 
7*e5436536SAndroid Build Coastguard Worker  1.    INTRODUCTION
8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software
9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on
11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices.
12*e5436536SAndroid Build Coastguard Worker 
13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing
15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely
16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG
17*e5436536SAndroid Build Coastguard Worker specifications.
18*e5436536SAndroid Build Coastguard Worker 
19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including
20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing
21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for
22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant
23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of
24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or
25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may
26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those
27*e5436536SAndroid Build Coastguard Worker licensed purposes only.
28*e5436536SAndroid Build Coastguard Worker 
29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions
30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are
31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications
32*e5436536SAndroid Build Coastguard Worker information and documentation.
33*e5436536SAndroid Build Coastguard Worker 
34*e5436536SAndroid Build Coastguard Worker 2.    COPYRIGHT LICENSE
35*e5436536SAndroid Build Coastguard Worker 
36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification,
37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you
38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions:
39*e5436536SAndroid Build Coastguard Worker 
40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of
41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form.
42*e5436536SAndroid Build Coastguard Worker 
43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation
44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or
45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of
46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your
47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form.
48*e5436536SAndroid Build Coastguard Worker 
49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived
50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission.
51*e5436536SAndroid Build Coastguard Worker 
52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute
53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto.
54*e5436536SAndroid Build Coastguard Worker 
55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating
56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions
57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android"
58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android."
60*e5436536SAndroid Build Coastguard Worker 
61*e5436536SAndroid Build Coastguard Worker 3.    NO PATENT LICENSE
62*e5436536SAndroid Build Coastguard Worker 
63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without
64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE.
65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this
66*e5436536SAndroid Build Coastguard Worker software.
67*e5436536SAndroid Build Coastguard Worker 
68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for
69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses.
70*e5436536SAndroid Build Coastguard Worker 
71*e5436536SAndroid Build Coastguard Worker 4.    DISCLAIMER
72*e5436536SAndroid Build Coastguard Worker 
73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright
74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and
76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary,
78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute
79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption,
80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict
81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of
82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage.
83*e5436536SAndroid Build Coastguard Worker 
84*e5436536SAndroid Build Coastguard Worker 5.    CONTACT INFORMATION
85*e5436536SAndroid Build Coastguard Worker 
86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS
87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL
88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33
89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany
90*e5436536SAndroid Build Coastguard Worker 
91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm
92*e5436536SAndroid Build Coastguard Worker [email protected]
93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */
94*e5436536SAndroid Build Coastguard Worker 
95*e5436536SAndroid Build Coastguard Worker /**************************** AAC decoder library ******************************
96*e5436536SAndroid Build Coastguard Worker 
97*e5436536SAndroid Build Coastguard Worker    Author(s):   Manuel Jander
98*e5436536SAndroid Build Coastguard Worker 
99*e5436536SAndroid Build Coastguard Worker    Description:
100*e5436536SAndroid Build Coastguard Worker 
101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
102*e5436536SAndroid Build Coastguard Worker 
103*e5436536SAndroid Build Coastguard Worker #ifndef AACDECODER_LIB_H
104*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_H
105*e5436536SAndroid Build Coastguard Worker 
106*e5436536SAndroid Build Coastguard Worker /**
107*e5436536SAndroid Build Coastguard Worker  * \file   aacdecoder_lib.h
108*e5436536SAndroid Build Coastguard Worker  * \brief  FDK AAC decoder library interface header file.
109*e5436536SAndroid Build Coastguard Worker  *
110*e5436536SAndroid Build Coastguard Worker 
111*e5436536SAndroid Build Coastguard Worker \page INTRO Introduction
112*e5436536SAndroid Build Coastguard Worker 
113*e5436536SAndroid Build Coastguard Worker 
114*e5436536SAndroid Build Coastguard Worker \section SCOPE Scope
115*e5436536SAndroid Build Coastguard Worker 
116*e5436536SAndroid Build Coastguard Worker This document describes the high-level application interface and usage of the
117*e5436536SAndroid Build Coastguard Worker ISO/MPEG-2/4 AAC Decoder library developed by the Fraunhofer Institute for
118*e5436536SAndroid Build Coastguard Worker Integrated Circuits (IIS). Depending on the library configuration, decoding of
119*e5436536SAndroid Build Coastguard Worker AAC-LC (Low-Complexity), HE-AAC (High-Efficiency AAC v1 and v2), AAC-LD
120*e5436536SAndroid Build Coastguard Worker (Low-Delay) and AAC-ELD (Enhanced Low-Delay) is implemented.
121*e5436536SAndroid Build Coastguard Worker 
122*e5436536SAndroid Build Coastguard Worker All references to SBR (Spectral Band Replication) are only applicable to HE-AAC
123*e5436536SAndroid Build Coastguard Worker and AAC-ELD configurations of the FDK library. All references to PS (Parametric
124*e5436536SAndroid Build Coastguard Worker Stereo) are only applicable to HE-AAC v2 decoder configuration of the library.
125*e5436536SAndroid Build Coastguard Worker 
126*e5436536SAndroid Build Coastguard Worker \section DecoderBasics Decoder Basics
127*e5436536SAndroid Build Coastguard Worker 
128*e5436536SAndroid Build Coastguard Worker This document can only give a rough overview about the ISO/MPEG-2, ISO/MPEG-4
129*e5436536SAndroid Build Coastguard Worker AAC audio and MPEG-D USAC coding standards. To understand all details referenced
130*e5436536SAndroid Build Coastguard Worker in this document, you are encouraged to read the following documents.
131*e5436536SAndroid Build Coastguard Worker 
132*e5436536SAndroid Build Coastguard Worker - ISO/IEC 13818-7 (MPEG-2 AAC) Standard, defines the syntax of MPEG-2 AAC audio
133*e5436536SAndroid Build Coastguard Worker bitstreams.
134*e5436536SAndroid Build Coastguard Worker - ISO/IEC 14496-3 (MPEG-4 AAC, subpart 1 and 4) Standard, defines the syntax of
135*e5436536SAndroid Build Coastguard Worker MPEG-4 AAC audio bitstreams.
136*e5436536SAndroid Build Coastguard Worker - ISO/IEC 23003-3 (MPEG-D USAC), defines MPEG-D USAC unified speech and audio
137*e5436536SAndroid Build Coastguard Worker codec.
138*e5436536SAndroid Build Coastguard Worker - Lutzky, Schuller, Gayer, Krämer, Wabnik, "A guideline to audio codec
139*e5436536SAndroid Build Coastguard Worker delay", 116th AES Convention, May 8, 2004
140*e5436536SAndroid Build Coastguard Worker 
141*e5436536SAndroid Build Coastguard Worker In short, MPEG Advanced Audio Coding is based on a time-to-frequency mapping of
142*e5436536SAndroid Build Coastguard Worker the signal. The signal is partitioned into overlapping time portions and
143*e5436536SAndroid Build Coastguard Worker transformed into frequency domain. The spectral components are then quantized
144*e5436536SAndroid Build Coastguard Worker and coded using a highly efficient coding scheme.\n Encoded MPEG-2 and MPEG-4
145*e5436536SAndroid Build Coastguard Worker AAC audio bitstreams are composed of frames. Contrary to MPEG-1/2 Layer-3 (mp3),
146*e5436536SAndroid Build Coastguard Worker the length of individual frames is not restricted to a fixed number of bytes,
147*e5436536SAndroid Build Coastguard Worker but can take any length between 1 and 768 bytes.
148*e5436536SAndroid Build Coastguard Worker 
149*e5436536SAndroid Build Coastguard Worker In addition to the above mentioned frequency domain coding mode, MPEG-D USAC
150*e5436536SAndroid Build Coastguard Worker also employs a time domain Algebraic Code-Excited Linear Prediction (ACELP)
151*e5436536SAndroid Build Coastguard Worker speech coder core. This operating mode is selected by the encoder in order to
152*e5436536SAndroid Build Coastguard Worker achieve the optimum audio quality for different content type. Several
153*e5436536SAndroid Build Coastguard Worker enhancements allow achieving higher quality at lower bit rates compared to
154*e5436536SAndroid Build Coastguard Worker MPEG-4 HE-AAC.
155*e5436536SAndroid Build Coastguard Worker 
156*e5436536SAndroid Build Coastguard Worker 
157*e5436536SAndroid Build Coastguard Worker \page LIBUSE Library Usage
158*e5436536SAndroid Build Coastguard Worker 
159*e5436536SAndroid Build Coastguard Worker 
160*e5436536SAndroid Build Coastguard Worker \section InterfaceDescritpion API Description
161*e5436536SAndroid Build Coastguard Worker 
162*e5436536SAndroid Build Coastguard Worker All API header files are located in the folder /include of the release package.
163*e5436536SAndroid Build Coastguard Worker The contents of each file is described in detail in this document. All header
164*e5436536SAndroid Build Coastguard Worker files are provided for usage in specific C/C++ programs. The main AAC decoder
165*e5436536SAndroid Build Coastguard Worker library API functions are located in aacdecoder_lib.h header file.
166*e5436536SAndroid Build Coastguard Worker 
167*e5436536SAndroid Build Coastguard Worker 
168*e5436536SAndroid Build Coastguard Worker \section Calling_Sequence Calling Sequence
169*e5436536SAndroid Build Coastguard Worker 
170*e5436536SAndroid Build Coastguard Worker The following sequence is necessary for proper decoding of ISO/MPEG-2/4 AAC,
171*e5436536SAndroid Build Coastguard Worker HE-AAC v2, or MPEG-D USAC bitstreams. In the following description, input stream
172*e5436536SAndroid Build Coastguard Worker read and output write function details are left out, since they may be
173*e5436536SAndroid Build Coastguard Worker implemented in a variety of configurations depending on the user's specific
174*e5436536SAndroid Build Coastguard Worker requirements.
175*e5436536SAndroid Build Coastguard Worker 
176*e5436536SAndroid Build Coastguard Worker 
177*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_Open() to open and retrieve a handle to a new AAC decoder
178*e5436536SAndroid Build Coastguard Worker instance. \code aacDecoderInfo = aacDecoder_Open(transportType, nrOfLayers);
179*e5436536SAndroid Build Coastguard Worker \endcode
180*e5436536SAndroid Build Coastguard Worker -# If out-of-band config data (Audio Specific Config (ASC) or Stream Mux Config
181*e5436536SAndroid Build Coastguard Worker (SMC)) is available, call aacDecoder_ConfigRaw() to pass this data to the
182*e5436536SAndroid Build Coastguard Worker decoder before beginning the decoding process. If this data is not available in
183*e5436536SAndroid Build Coastguard Worker advance, the decoder will configure itself while decoding, during the
184*e5436536SAndroid Build Coastguard Worker aacDecoder_DecodeFrame() function call.
185*e5436536SAndroid Build Coastguard Worker -# Begin decoding loop.
186*e5436536SAndroid Build Coastguard Worker \code
187*e5436536SAndroid Build Coastguard Worker do {
188*e5436536SAndroid Build Coastguard Worker \endcode
189*e5436536SAndroid Build Coastguard Worker -# Read data from bitstream file or stream buffer in to the driver program
190*e5436536SAndroid Build Coastguard Worker working memory (a client-supplied input buffer "inBuffer" in framework). This
191*e5436536SAndroid Build Coastguard Worker buffer will be used to load AAC bitstream data to the decoder.  Only when all
192*e5436536SAndroid Build Coastguard Worker data in this buffer has been processed will the decoder signal an empty buffer.
193*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_Fill() to fill the decoder's internal bitstream input buffer
194*e5436536SAndroid Build Coastguard Worker with the client-supplied bitstream input buffer. Note, if the data loaded in to
195*e5436536SAndroid Build Coastguard Worker the internal buffer is not sufficient to decode a frame,
196*e5436536SAndroid Build Coastguard Worker aacDecoder_DecodeFrame() will return ::AAC_DEC_NOT_ENOUGH_BITS until a
197*e5436536SAndroid Build Coastguard Worker sufficient amount of data is loaded in to the internal buffer. For streaming
198*e5436536SAndroid Build Coastguard Worker formats (ADTS, LOAS), it is acceptable to load more than one frame to the
199*e5436536SAndroid Build Coastguard Worker decoder. However, for packed based formats, only one frame may be loaded to the
200*e5436536SAndroid Build Coastguard Worker decoder per aacDecoder_DecodeFrame() call. For least amount of communication
201*e5436536SAndroid Build Coastguard Worker delay, fill and decode should be performed on a frame by frame basis. \code
202*e5436536SAndroid Build Coastguard Worker     ErrorStatus = aacDecoder_Fill(aacDecoderInfo, inBuffer, bytesRead,
203*e5436536SAndroid Build Coastguard Worker bytesValid); \endcode
204*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_DecodeFrame(). This function decodes one frame and writes
205*e5436536SAndroid Build Coastguard Worker decoded PCM audio data to a client-supplied buffer. It is the client's
206*e5436536SAndroid Build Coastguard Worker responsibility to allocate a buffer which is large enough to hold the decoded
207*e5436536SAndroid Build Coastguard Worker output data. \code ErrorStatus = aacDecoder_DecodeFrame(aacDecoderInfo,
208*e5436536SAndroid Build Coastguard Worker TimeData, OUT_BUF_SIZE, flags); \endcode If the bitstream configuration (number
209*e5436536SAndroid Build Coastguard Worker of channels, sample rate, frame size) is not known a priori, you may call
210*e5436536SAndroid Build Coastguard Worker aacDecoder_GetStreamInfo() to retrieve a structure that contains this
211*e5436536SAndroid Build Coastguard Worker information. You may use this data to initialize an audio output device. \code
212*e5436536SAndroid Build Coastguard Worker     p_si = aacDecoder_GetStreamInfo(aacDecoderInfo);
213*e5436536SAndroid Build Coastguard Worker \endcode
214*e5436536SAndroid Build Coastguard Worker -# Repeat steps 5 to 7 until no data is available to decode any more, or in case
215*e5436536SAndroid Build Coastguard Worker of error. \code } while (bytesRead[0] > 0 || doFlush || doBsFlush ||
216*e5436536SAndroid Build Coastguard Worker forceContinue); \endcode
217*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_Close() to de-allocate all AAC decoder and transport layer
218*e5436536SAndroid Build Coastguard Worker structures. \code aacDecoder_Close(aacDecoderInfo); \endcode
219*e5436536SAndroid Build Coastguard Worker 
220*e5436536SAndroid Build Coastguard Worker \image latex decode.png "Decode calling sequence" width=11cm
221*e5436536SAndroid Build Coastguard Worker 
222*e5436536SAndroid Build Coastguard Worker \image latex change_source.png "Change data source sequence" width=5cm
223*e5436536SAndroid Build Coastguard Worker 
224*e5436536SAndroid Build Coastguard Worker \image latex conceal.png "Error concealment sequence" width=14cm
225*e5436536SAndroid Build Coastguard Worker 
226*e5436536SAndroid Build Coastguard Worker \subsection Error_Concealment_Sequence Error Concealment Sequence
227*e5436536SAndroid Build Coastguard Worker 
228*e5436536SAndroid Build Coastguard Worker There are different strategies to handle bit stream errors. Depending on the
229*e5436536SAndroid Build Coastguard Worker system properties the product designer might choose to take different actions in
230*e5436536SAndroid Build Coastguard Worker case a bit error occurs. In many cases the decoder might be able to do
231*e5436536SAndroid Build Coastguard Worker reasonable error concealment without the need of any additional actions from the
232*e5436536SAndroid Build Coastguard Worker system. But in some cases its not even possible to know how many decoded PCM
233*e5436536SAndroid Build Coastguard Worker output samples are required to fill the gap due to the data error, then the
234*e5436536SAndroid Build Coastguard Worker software surrounding the decoder must deal with the situation. The most simple
235*e5436536SAndroid Build Coastguard Worker way would be to just stop audio playback and resume once enough bit stream data
236*e5436536SAndroid Build Coastguard Worker and/or buffered output samples are available. More sophisticated designs might
237*e5436536SAndroid Build Coastguard Worker also be able to deal with sender/receiver clock drifts or data drop outs by
238*e5436536SAndroid Build Coastguard Worker using a closed loop control of FIFO fulness levels. The chosen strategy depends
239*e5436536SAndroid Build Coastguard Worker on the final product requirements.
240*e5436536SAndroid Build Coastguard Worker 
241*e5436536SAndroid Build Coastguard Worker The error concealment sequence diagram illustrates the general execution paths
242*e5436536SAndroid Build Coastguard Worker for error handling.
243*e5436536SAndroid Build Coastguard Worker 
244*e5436536SAndroid Build Coastguard Worker The macro IS_OUTPUT_VALID(err) can be used to identify if the audio output
245*e5436536SAndroid Build Coastguard Worker buffer contains valid audio either from error free bit stream data or successful
246*e5436536SAndroid Build Coastguard Worker error concealment. In case the result is false, the decoder output buffer does
247*e5436536SAndroid Build Coastguard Worker not contain meaningful audio samples and should not be passed to any output as
248*e5436536SAndroid Build Coastguard Worker it is. Most likely in case that a continuous audio output PCM stream is
249*e5436536SAndroid Build Coastguard Worker required, the output buffer must be filled with audio data from the calling
250*e5436536SAndroid Build Coastguard Worker framework. This might be e.g. an appropriate number of samples all zero.
251*e5436536SAndroid Build Coastguard Worker 
252*e5436536SAndroid Build Coastguard Worker If error code ::AAC_DEC_TRANSPORT_SYNC_ERROR is returned by the decoder, under
253*e5436536SAndroid Build Coastguard Worker some particular conditions it is possible to estimate lost frames due to the bit
254*e5436536SAndroid Build Coastguard Worker stream error. In that case the bit stream is required to have a constant
255*e5436536SAndroid Build Coastguard Worker bitrate, and compatible transport type. Audio samples for the lost frames can be
256*e5436536SAndroid Build Coastguard Worker obtained by calling aacDecoder_DecodeFrame() with flag ::AACDEC_CONCEAL set
257*e5436536SAndroid Build Coastguard Worker n-times where n is the count of lost frames. Please note that the decoder has to
258*e5436536SAndroid Build Coastguard Worker have encountered valid configuration data at least once to be able to generate
259*e5436536SAndroid Build Coastguard Worker concealed data, because at the minimum the sampling rate, frame size and amount
260*e5436536SAndroid Build Coastguard Worker of audio channels needs to be known.
261*e5436536SAndroid Build Coastguard Worker 
262*e5436536SAndroid Build Coastguard Worker If it is not possible to get an estimation of lost frames then a constant
263*e5436536SAndroid Build Coastguard Worker fullness of the audio output buffer can be achieved by implementing different
264*e5436536SAndroid Build Coastguard Worker FIFO control techniques e.g. just stop taking of samples from the buffer to
265*e5436536SAndroid Build Coastguard Worker avoid underflow or stop filling new data to the buffer to avoid overflow. But
266*e5436536SAndroid Build Coastguard Worker this techniques are out of scope of this document.
267*e5436536SAndroid Build Coastguard Worker 
268*e5436536SAndroid Build Coastguard Worker For a detailed description of a specific error code please refer also to
269*e5436536SAndroid Build Coastguard Worker ::AAC_DECODER_ERROR.
270*e5436536SAndroid Build Coastguard Worker 
271*e5436536SAndroid Build Coastguard Worker \section BufferSystem Buffer System
272*e5436536SAndroid Build Coastguard Worker 
273*e5436536SAndroid Build Coastguard Worker There are three main buffers in an AAC decoder application. One external input
274*e5436536SAndroid Build Coastguard Worker buffer to hold bitstream data from file I/O or elsewhere, one decoder-internal
275*e5436536SAndroid Build Coastguard Worker input buffer, and one to hold the decoded output PCM sample data. In resource
276*e5436536SAndroid Build Coastguard Worker limited applications, the output buffer may be reused as an external input
277*e5436536SAndroid Build Coastguard Worker buffer prior to the subsequence aacDecoder_Fill() function call.
278*e5436536SAndroid Build Coastguard Worker 
279*e5436536SAndroid Build Coastguard Worker To feed the data to the decoder-internal input buffer, use the
280*e5436536SAndroid Build Coastguard Worker function aacDecoder_Fill(). This function returns important information
281*e5436536SAndroid Build Coastguard Worker regarding the number of bytes in the external input buffer that have not yet
282*e5436536SAndroid Build Coastguard Worker been copied into the internal input buffer (variable bytesValid). Once the
283*e5436536SAndroid Build Coastguard Worker external buffer has been fully copied, it can be completely re-filled again. In
284*e5436536SAndroid Build Coastguard Worker case you wish to refill the buffer while there are unprocessed bytes (bytesValid
285*e5436536SAndroid Build Coastguard Worker is unequal 0), you should preserve the unconsumed data. However, we recommend to
286*e5436536SAndroid Build Coastguard Worker refill the buffer only when bytesValid returns 0.
287*e5436536SAndroid Build Coastguard Worker 
288*e5436536SAndroid Build Coastguard Worker The bytesValid parameter is an input and output parameter to the FDK decoder. As
289*e5436536SAndroid Build Coastguard Worker an input, it signals how many valid bytes are available in the external buffer.
290*e5436536SAndroid Build Coastguard Worker After consumption of the external buffer using aacDecoder_Fill() function, the
291*e5436536SAndroid Build Coastguard Worker bytesValid parameter indicates if any of the bytes in the external buffer were
292*e5436536SAndroid Build Coastguard Worker not consumed.
293*e5436536SAndroid Build Coastguard Worker 
294*e5436536SAndroid Build Coastguard Worker \image latex dec_buffer.png "Life cycle of the external input buffer" width=9cm
295*e5436536SAndroid Build Coastguard Worker 
296*e5436536SAndroid Build Coastguard Worker \page OutputFormat Decoder audio output
297*e5436536SAndroid Build Coastguard Worker 
298*e5436536SAndroid Build Coastguard Worker \section OutputFormatObtaining Obtaining channel mapping information
299*e5436536SAndroid Build Coastguard Worker 
300*e5436536SAndroid Build Coastguard Worker The decoded audio output format is indicated by a set of variables of the
301*e5436536SAndroid Build Coastguard Worker CStreamInfo structure. While the struct members sampleRate, frameSize and
302*e5436536SAndroid Build Coastguard Worker numChannels might be self explanatory, pChannelType and pChannelIndices require
303*e5436536SAndroid Build Coastguard Worker some further explanation.
304*e5436536SAndroid Build Coastguard Worker 
305*e5436536SAndroid Build Coastguard Worker These two arrays indicate the configuration of channel data within the output
306*e5436536SAndroid Build Coastguard Worker buffer. Both arrays have CStreamInfo::numChannels number of cells. Each cell of
307*e5436536SAndroid Build Coastguard Worker pChannelType indicates the channel type, which is described in the enum
308*e5436536SAndroid Build Coastguard Worker ::AUDIO_CHANNEL_TYPE (defined in FDK_audio.h). The cells of pChannelIndices
309*e5436536SAndroid Build Coastguard Worker indicate the sub index among the channels starting with 0 among channels of the
310*e5436536SAndroid Build Coastguard Worker same audio channel type.
311*e5436536SAndroid Build Coastguard Worker 
312*e5436536SAndroid Build Coastguard Worker The indexing scheme is structured as defined in MPEG-2/4 Standards. Indices
313*e5436536SAndroid Build Coastguard Worker start from the front direction (a center channel if available, will always be
314*e5436536SAndroid Build Coastguard Worker index 0) and increment, starting with the left side, pairwise (e.g. L, R) and
315*e5436536SAndroid Build Coastguard Worker from front to back (Front L, Front R, Surround L, Surround R). For detailed
316*e5436536SAndroid Build Coastguard Worker explanation, please refer to ISO/IEC 13818-7:2005(E), chapter 8.5.3.2.
317*e5436536SAndroid Build Coastguard Worker 
318*e5436536SAndroid Build Coastguard Worker In case a Program Config is included in the audio configuration, the channel
319*e5436536SAndroid Build Coastguard Worker mapping described within it will be adopted.
320*e5436536SAndroid Build Coastguard Worker 
321*e5436536SAndroid Build Coastguard Worker The examples below explain these aspects in detail.
322*e5436536SAndroid Build Coastguard Worker 
323*e5436536SAndroid Build Coastguard Worker \section OutputFormatChange Changing the audio output format
324*e5436536SAndroid Build Coastguard Worker 
325*e5436536SAndroid Build Coastguard Worker For MPEG-4 audio the channel order can be changed at runtime through the
326*e5436536SAndroid Build Coastguard Worker parameter
327*e5436536SAndroid Build Coastguard Worker ::AAC_PCM_OUTPUT_CHANNEL_MAPPING. See the description of those
328*e5436536SAndroid Build Coastguard Worker parameters and the decoder library function aacDecoder_SetParam() for more
329*e5436536SAndroid Build Coastguard Worker detail.
330*e5436536SAndroid Build Coastguard Worker 
331*e5436536SAndroid Build Coastguard Worker \section OutputFormatExample Channel mapping examples
332*e5436536SAndroid Build Coastguard Worker 
333*e5436536SAndroid Build Coastguard Worker The following examples illustrate the location of individual audio samples in
334*e5436536SAndroid Build Coastguard Worker the audio buffer that is passed to aacDecoder_DecodeFrame() and the expected
335*e5436536SAndroid Build Coastguard Worker data in the CStreamInfo structure which can be obtained by calling
336*e5436536SAndroid Build Coastguard Worker aacDecoder_GetStreamInfo().
337*e5436536SAndroid Build Coastguard Worker 
338*e5436536SAndroid Build Coastguard Worker \subsection ExamplesStereo Stereo
339*e5436536SAndroid Build Coastguard Worker 
340*e5436536SAndroid Build Coastguard Worker In case of ::AAC_PCM_OUTPUT_CHANNEL_MAPPING set to 1,
341*e5436536SAndroid Build Coastguard Worker a AAC-LC bit stream which has channelConfiguration = 2 in its audio specific
342*e5436536SAndroid Build Coastguard Worker config would lead to the following values in CStreamInfo:
343*e5436536SAndroid Build Coastguard Worker 
344*e5436536SAndroid Build Coastguard Worker CStreamInfo::numChannels = 2
345*e5436536SAndroid Build Coastguard Worker 
346*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelType = { ::ACT_FRONT, ::ACT_FRONT }
347*e5436536SAndroid Build Coastguard Worker 
348*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelIndices = { 0, 1 }
349*e5436536SAndroid Build Coastguard Worker 
350*e5436536SAndroid Build Coastguard Worker The output buffer will be formatted as follows:
351*e5436536SAndroid Build Coastguard Worker 
352*e5436536SAndroid Build Coastguard Worker \verbatim
353*e5436536SAndroid Build Coastguard Worker   <left sample 0>  <left sample 1>  <left sample 2>  ... <left sample N>
354*e5436536SAndroid Build Coastguard Worker   <right sample 0> <right sample 1> <right sample 2> ... <right sample N>
355*e5436536SAndroid Build Coastguard Worker \endverbatim
356*e5436536SAndroid Build Coastguard Worker 
357*e5436536SAndroid Build Coastguard Worker Where N equals to CStreamInfo::frameSize .
358*e5436536SAndroid Build Coastguard Worker 
359*e5436536SAndroid Build Coastguard Worker \subsection ExamplesSurround Surround 5.1
360*e5436536SAndroid Build Coastguard Worker 
361*e5436536SAndroid Build Coastguard Worker In case of ::AAC_PCM_OUTPUT_CHANNEL_MAPPING set to 1,
362*e5436536SAndroid Build Coastguard Worker a AAC-LC bit stream which has channelConfiguration = 6 in its audio specific
363*e5436536SAndroid Build Coastguard Worker config, would lead to the following values in CStreamInfo:
364*e5436536SAndroid Build Coastguard Worker 
365*e5436536SAndroid Build Coastguard Worker CStreamInfo::numChannels = 6
366*e5436536SAndroid Build Coastguard Worker 
367*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelType = { ::ACT_FRONT, ::ACT_FRONT, ::ACT_FRONT, ::ACT_LFE,
368*e5436536SAndroid Build Coastguard Worker ::ACT_BACK, ::ACT_BACK }
369*e5436536SAndroid Build Coastguard Worker 
370*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelIndices = { 1, 2, 0, 0, 0, 1 }
371*e5436536SAndroid Build Coastguard Worker 
372*e5436536SAndroid Build Coastguard Worker Since ::AAC_PCM_OUTPUT_CHANNEL_MAPPING is 1, WAV file channel ordering will be
373*e5436536SAndroid Build Coastguard Worker used. For a 5.1 channel scheme, thus the channels would be: front left, front
374*e5436536SAndroid Build Coastguard Worker right, center, LFE, surround left, surround right. Thus the third channel is the
375*e5436536SAndroid Build Coastguard Worker center channel, receiving the index 0. The other front channels are front left,
376*e5436536SAndroid Build Coastguard Worker front right being placed as first and second channels with indices 1 and 2
377*e5436536SAndroid Build Coastguard Worker correspondingly. There is only one LFE, placed as the fourth channel and index
378*e5436536SAndroid Build Coastguard Worker 0. Finally both surround channels get the type definition ACT_BACK, and the
379*e5436536SAndroid Build Coastguard Worker indices 0 and 1.
380*e5436536SAndroid Build Coastguard Worker 
381*e5436536SAndroid Build Coastguard Worker The output buffer will be formatted as follows:
382*e5436536SAndroid Build Coastguard Worker 
383*e5436536SAndroid Build Coastguard Worker \verbatim
384*e5436536SAndroid Build Coastguard Worker <front left sample 0> <front right sample 0>
385*e5436536SAndroid Build Coastguard Worker <center sample 0> <LFE sample 0>
386*e5436536SAndroid Build Coastguard Worker <surround left sample 0> <surround right sample 0>
387*e5436536SAndroid Build Coastguard Worker 
388*e5436536SAndroid Build Coastguard Worker <front left sample 1> <front right sample 1>
389*e5436536SAndroid Build Coastguard Worker <center sample 1> <LFE sample 1>
390*e5436536SAndroid Build Coastguard Worker <surround left sample 1> <surround right sample 1>
391*e5436536SAndroid Build Coastguard Worker 
392*e5436536SAndroid Build Coastguard Worker ...
393*e5436536SAndroid Build Coastguard Worker 
394*e5436536SAndroid Build Coastguard Worker <front left sample N> <front right sample N>
395*e5436536SAndroid Build Coastguard Worker <center sample N> <LFE sample N>
396*e5436536SAndroid Build Coastguard Worker <surround left sample N> <surround right sample N>
397*e5436536SAndroid Build Coastguard Worker \endverbatim
398*e5436536SAndroid Build Coastguard Worker 
399*e5436536SAndroid Build Coastguard Worker Where N equals to CStreamInfo::frameSize .
400*e5436536SAndroid Build Coastguard Worker 
401*e5436536SAndroid Build Coastguard Worker \subsection ExamplesArib ARIB coding mode 2/1
402*e5436536SAndroid Build Coastguard Worker 
403*e5436536SAndroid Build Coastguard Worker In case of ::AAC_PCM_OUTPUT_CHANNEL_MAPPING set to 1,
404*e5436536SAndroid Build Coastguard Worker in case of a ARIB bit stream using coding mode 2/1 as described in ARIB STD-B32
405*e5436536SAndroid Build Coastguard Worker Part 2 Version 2.1-E1, page 61, would lead to the following values in
406*e5436536SAndroid Build Coastguard Worker CStreamInfo:
407*e5436536SAndroid Build Coastguard Worker 
408*e5436536SAndroid Build Coastguard Worker CStreamInfo::numChannels = 3
409*e5436536SAndroid Build Coastguard Worker 
410*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelType = { ::ACT_FRONT, ::ACT_FRONT, ::ACT_BACK }
411*e5436536SAndroid Build Coastguard Worker 
412*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelIndices = { 0, 1, 0 }
413*e5436536SAndroid Build Coastguard Worker 
414*e5436536SAndroid Build Coastguard Worker The audio channels will be placed as follows in the audio output buffer:
415*e5436536SAndroid Build Coastguard Worker 
416*e5436536SAndroid Build Coastguard Worker \verbatim
417*e5436536SAndroid Build Coastguard Worker <front left sample 0> <front right sample 0>  <mid surround sample 0>
418*e5436536SAndroid Build Coastguard Worker 
419*e5436536SAndroid Build Coastguard Worker <front left sample 1> <front right sample 1> <mid surround sample 1>
420*e5436536SAndroid Build Coastguard Worker 
421*e5436536SAndroid Build Coastguard Worker ...
422*e5436536SAndroid Build Coastguard Worker 
423*e5436536SAndroid Build Coastguard Worker <front left sample N> <front right sample N> <mid surround sample N>
424*e5436536SAndroid Build Coastguard Worker 
425*e5436536SAndroid Build Coastguard Worker Where N equals to CStreamInfo::frameSize .
426*e5436536SAndroid Build Coastguard Worker 
427*e5436536SAndroid Build Coastguard Worker \endverbatim
428*e5436536SAndroid Build Coastguard Worker 
429*e5436536SAndroid Build Coastguard Worker */
430*e5436536SAndroid Build Coastguard Worker 
431*e5436536SAndroid Build Coastguard Worker #include "machine_type.h"
432*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h"
433*e5436536SAndroid Build Coastguard Worker 
434*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_VL0 3
435*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_VL1 2
436*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_VL2 0
437*e5436536SAndroid Build Coastguard Worker 
438*e5436536SAndroid Build Coastguard Worker #include "genericStds.h"
439*e5436536SAndroid Build Coastguard Worker /**
440*e5436536SAndroid Build Coastguard Worker  * \brief  AAC decoder error codes.
441*e5436536SAndroid Build Coastguard Worker  */
442*e5436536SAndroid Build Coastguard Worker typedef enum {
443*e5436536SAndroid Build Coastguard Worker   AAC_DEC_OK =
444*e5436536SAndroid Build Coastguard Worker       0x0000, /*!< No error occurred. Output buffer is valid and error free. */
445*e5436536SAndroid Build Coastguard Worker   AAC_DEC_OUT_OF_MEMORY =
446*e5436536SAndroid Build Coastguard Worker       0x0002, /*!< Heap returned NULL pointer. Output buffer is invalid. */
447*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNKNOWN =
448*e5436536SAndroid Build Coastguard Worker       0x0005, /*!< Error condition is of unknown reason, or from a another
449*e5436536SAndroid Build Coastguard Worker                  module. Output buffer is invalid. */
450*e5436536SAndroid Build Coastguard Worker 
451*e5436536SAndroid Build Coastguard Worker   /* Synchronization errors. Output buffer is invalid. */
452*e5436536SAndroid Build Coastguard Worker   aac_dec_sync_error_start = 0x1000,
453*e5436536SAndroid Build Coastguard Worker   AAC_DEC_TRANSPORT_SYNC_ERROR = 0x1001, /*!< The transport decoder had
454*e5436536SAndroid Build Coastguard Worker                                             synchronization problems. Do not
455*e5436536SAndroid Build Coastguard Worker                                             exit decoding. Just feed new
456*e5436536SAndroid Build Coastguard Worker                                               bitstream data. */
457*e5436536SAndroid Build Coastguard Worker   AAC_DEC_NOT_ENOUGH_BITS = 0x1002, /*!< The input buffer ran out of bits. */
458*e5436536SAndroid Build Coastguard Worker   aac_dec_sync_error_end = 0x1FFF,
459*e5436536SAndroid Build Coastguard Worker 
460*e5436536SAndroid Build Coastguard Worker   /* Initialization errors. Output buffer is invalid. */
461*e5436536SAndroid Build Coastguard Worker   aac_dec_init_error_start = 0x2000,
462*e5436536SAndroid Build Coastguard Worker   AAC_DEC_INVALID_HANDLE =
463*e5436536SAndroid Build Coastguard Worker       0x2001, /*!< The handle passed to the function call was invalid (NULL). */
464*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_AOT =
465*e5436536SAndroid Build Coastguard Worker       0x2002, /*!< The AOT found in the configuration is not supported. */
466*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_FORMAT =
467*e5436536SAndroid Build Coastguard Worker       0x2003, /*!< The bitstream format is not supported.  */
468*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_ER_FORMAT =
469*e5436536SAndroid Build Coastguard Worker       0x2004, /*!< The error resilience tool format is not supported. */
470*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_EPCONFIG =
471*e5436536SAndroid Build Coastguard Worker       0x2005, /*!< The error protection format is not supported. */
472*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_MULTILAYER =
473*e5436536SAndroid Build Coastguard Worker       0x2006, /*!< More than one layer for AAC scalable is not supported. */
474*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_CHANNELCONFIG =
475*e5436536SAndroid Build Coastguard Worker       0x2007, /*!< The channel configuration (either number or arrangement) is
476*e5436536SAndroid Build Coastguard Worker                  not supported. */
477*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_SAMPLINGRATE = 0x2008, /*!< The sample rate specified in
478*e5436536SAndroid Build Coastguard Worker                                                 the configuration is not
479*e5436536SAndroid Build Coastguard Worker                                                 supported. */
480*e5436536SAndroid Build Coastguard Worker   AAC_DEC_INVALID_SBR_CONFIG =
481*e5436536SAndroid Build Coastguard Worker       0x2009, /*!< The SBR configuration is not supported. */
482*e5436536SAndroid Build Coastguard Worker   AAC_DEC_SET_PARAM_FAIL = 0x200A,  /*!< The parameter could not be set. Either
483*e5436536SAndroid Build Coastguard Worker                                        the value was out of range or the
484*e5436536SAndroid Build Coastguard Worker                                        parameter does  not exist. */
485*e5436536SAndroid Build Coastguard Worker   AAC_DEC_NEED_TO_RESTART = 0x200B, /*!< The decoder needs to be restarted,
486*e5436536SAndroid Build Coastguard Worker                                        since the required configuration change
487*e5436536SAndroid Build Coastguard Worker                                        cannot be performed. */
488*e5436536SAndroid Build Coastguard Worker   AAC_DEC_OUTPUT_BUFFER_TOO_SMALL =
489*e5436536SAndroid Build Coastguard Worker       0x200C, /*!< The provided output buffer is too small. */
490*e5436536SAndroid Build Coastguard Worker   aac_dec_init_error_end = 0x2FFF,
491*e5436536SAndroid Build Coastguard Worker 
492*e5436536SAndroid Build Coastguard Worker   /* Decode errors. Output buffer is valid but concealed. */
493*e5436536SAndroid Build Coastguard Worker   aac_dec_decode_error_start = 0x4000,
494*e5436536SAndroid Build Coastguard Worker   AAC_DEC_TRANSPORT_ERROR =
495*e5436536SAndroid Build Coastguard Worker       0x4001, /*!< The transport decoder encountered an unexpected error. */
496*e5436536SAndroid Build Coastguard Worker   AAC_DEC_PARSE_ERROR = 0x4002, /*!< Error while parsing the bitstream. Most
497*e5436536SAndroid Build Coastguard Worker                                    probably it is corrupted, or the system
498*e5436536SAndroid Build Coastguard Worker                                    crashed. */
499*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_EXTENSION_PAYLOAD =
500*e5436536SAndroid Build Coastguard Worker       0x4003, /*!< Error while parsing the extension payload of the bitstream.
501*e5436536SAndroid Build Coastguard Worker                  The extension payload type found is not supported. */
502*e5436536SAndroid Build Coastguard Worker   AAC_DEC_DECODE_FRAME_ERROR = 0x4004, /*!< The parsed bitstream value is out of
503*e5436536SAndroid Build Coastguard Worker                                           range. Most probably the bitstream is
504*e5436536SAndroid Build Coastguard Worker                                           corrupt, or the system crashed. */
505*e5436536SAndroid Build Coastguard Worker   AAC_DEC_CRC_ERROR = 0x4005,          /*!< The embedded CRC did not match. */
506*e5436536SAndroid Build Coastguard Worker   AAC_DEC_INVALID_CODE_BOOK = 0x4006,  /*!< An invalid codebook was signaled.
507*e5436536SAndroid Build Coastguard Worker                                           Most probably the bitstream is corrupt,
508*e5436536SAndroid Build Coastguard Worker                                           or the system  crashed. */
509*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_PREDICTION =
510*e5436536SAndroid Build Coastguard Worker       0x4007, /*!< Predictor found, but not supported in the AAC Low Complexity
511*e5436536SAndroid Build Coastguard Worker                  profile. Most probably the bitstream is corrupt, or has a wrong
512*e5436536SAndroid Build Coastguard Worker                  format. */
513*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_CCE = 0x4008, /*!< A CCE element was found which is not
514*e5436536SAndroid Build Coastguard Worker                                        supported. Most probably the bitstream is
515*e5436536SAndroid Build Coastguard Worker                                        corrupt, or has a wrong format. */
516*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_LFE = 0x4009, /*!< A LFE element was found which is not
517*e5436536SAndroid Build Coastguard Worker                                        supported. Most probably the bitstream is
518*e5436536SAndroid Build Coastguard Worker                                        corrupt, or has a wrong format. */
519*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_GAIN_CONTROL_DATA =
520*e5436536SAndroid Build Coastguard Worker       0x400A, /*!< Gain control data found but not supported. Most probably the
521*e5436536SAndroid Build Coastguard Worker                  bitstream is corrupt, or has a wrong format. */
522*e5436536SAndroid Build Coastguard Worker   AAC_DEC_UNSUPPORTED_SBA =
523*e5436536SAndroid Build Coastguard Worker       0x400B, /*!< SBA found, but currently not supported in the BSAC profile.
524*e5436536SAndroid Build Coastguard Worker                */
525*e5436536SAndroid Build Coastguard Worker   AAC_DEC_TNS_READ_ERROR = 0x400C, /*!< Error while reading TNS data. Most
526*e5436536SAndroid Build Coastguard Worker                                       probably the bitstream is corrupt or the
527*e5436536SAndroid Build Coastguard Worker                                       system crashed. */
528*e5436536SAndroid Build Coastguard Worker   AAC_DEC_RVLC_ERROR =
529*e5436536SAndroid Build Coastguard Worker       0x400D, /*!< Error while decoding error resilient data. */
530*e5436536SAndroid Build Coastguard Worker   aac_dec_decode_error_end = 0x4FFF,
531*e5436536SAndroid Build Coastguard Worker   /* Ancillary data errors. Output buffer is valid. */
532*e5436536SAndroid Build Coastguard Worker   aac_dec_anc_data_error_start = 0x8000,
533*e5436536SAndroid Build Coastguard Worker   AAC_DEC_ANC_DATA_ERROR =
534*e5436536SAndroid Build Coastguard Worker       0x8001, /*!< Non severe error concerning the ancillary data handling. */
535*e5436536SAndroid Build Coastguard Worker   AAC_DEC_TOO_SMALL_ANC_BUFFER = 0x8002,  /*!< The registered ancillary data
536*e5436536SAndroid Build Coastguard Worker                                              buffer is too small to receive the
537*e5436536SAndroid Build Coastguard Worker                                              parsed data. */
538*e5436536SAndroid Build Coastguard Worker   AAC_DEC_TOO_MANY_ANC_ELEMENTS = 0x8003, /*!< More than the allowed number of
539*e5436536SAndroid Build Coastguard Worker                                              ancillary data elements should be
540*e5436536SAndroid Build Coastguard Worker                                              written to buffer. */
541*e5436536SAndroid Build Coastguard Worker   aac_dec_anc_data_error_end = 0x8FFF
542*e5436536SAndroid Build Coastguard Worker 
543*e5436536SAndroid Build Coastguard Worker } AAC_DECODER_ERROR;
544*e5436536SAndroid Build Coastguard Worker 
545*e5436536SAndroid Build Coastguard Worker /** Macro to identify initialization errors. Output buffer is invalid. */
546*e5436536SAndroid Build Coastguard Worker #define IS_INIT_ERROR(err)                                                    \
547*e5436536SAndroid Build Coastguard Worker   ((((err) >= aac_dec_init_error_start) && ((err) <= aac_dec_init_error_end)) \
548*e5436536SAndroid Build Coastguard Worker        ? 1                                                                    \
549*e5436536SAndroid Build Coastguard Worker        : 0)
550*e5436536SAndroid Build Coastguard Worker /** Macro to identify decode errors. Output buffer is valid but concealed. */
551*e5436536SAndroid Build Coastguard Worker #define IS_DECODE_ERROR(err)                 \
552*e5436536SAndroid Build Coastguard Worker   ((((err) >= aac_dec_decode_error_start) && \
553*e5436536SAndroid Build Coastguard Worker     ((err) <= aac_dec_decode_error_end))     \
554*e5436536SAndroid Build Coastguard Worker        ? 1                                   \
555*e5436536SAndroid Build Coastguard Worker        : 0)
556*e5436536SAndroid Build Coastguard Worker /**
557*e5436536SAndroid Build Coastguard Worker  * Macro to identify if the audio output buffer contains valid samples after
558*e5436536SAndroid Build Coastguard Worker  * calling aacDecoder_DecodeFrame(). Output buffer is valid but can be
559*e5436536SAndroid Build Coastguard Worker  * concealed.
560*e5436536SAndroid Build Coastguard Worker  */
561*e5436536SAndroid Build Coastguard Worker #define IS_OUTPUT_VALID(err) (((err) == AAC_DEC_OK) || IS_DECODE_ERROR(err))
562*e5436536SAndroid Build Coastguard Worker 
563*e5436536SAndroid Build Coastguard Worker /*! \enum  AAC_MD_PROFILE
564*e5436536SAndroid Build Coastguard Worker  *  \brief The available metadata profiles which are mostly related to downmixing. The values define the arguments
565*e5436536SAndroid Build Coastguard Worker  *         for the use with parameter ::AAC_METADATA_PROFILE.
566*e5436536SAndroid Build Coastguard Worker  */
567*e5436536SAndroid Build Coastguard Worker typedef enum {
568*e5436536SAndroid Build Coastguard Worker   AAC_MD_PROFILE_MPEG_STANDARD =
569*e5436536SAndroid Build Coastguard Worker       0, /*!< The standard profile creates a mixdown signal based on the
570*e5436536SAndroid Build Coastguard Worker             advanced downmix metadata (from a DSE). The equations and default
571*e5436536SAndroid Build Coastguard Worker             values are defined in ISO/IEC 14496:3 Ammendment 4. Any other
572*e5436536SAndroid Build Coastguard Worker             (legacy) downmix metadata will be ignored. No other parameter will
573*e5436536SAndroid Build Coastguard Worker             be modified.         */
574*e5436536SAndroid Build Coastguard Worker   AAC_MD_PROFILE_MPEG_LEGACY =
575*e5436536SAndroid Build Coastguard Worker       1, /*!< This profile behaves identical to the standard profile if advanced
576*e5436536SAndroid Build Coastguard Worker               downmix metadata (from a DSE) is available. If not, the
577*e5436536SAndroid Build Coastguard Worker             matrix_mixdown information embedded in the program configuration
578*e5436536SAndroid Build Coastguard Worker             element (PCE) will be applied. If neither is the case, the module
579*e5436536SAndroid Build Coastguard Worker             creates a mixdown using the default coefficients as defined in
580*e5436536SAndroid Build Coastguard Worker             ISO/IEC 14496:3 AMD 4. The profile can be used to support legacy
581*e5436536SAndroid Build Coastguard Worker             digital TV (e.g. DVB) streams.           */
582*e5436536SAndroid Build Coastguard Worker   AAC_MD_PROFILE_MPEG_LEGACY_PRIO =
583*e5436536SAndroid Build Coastguard Worker       2, /*!< Similar to the ::AAC_MD_PROFILE_MPEG_LEGACY profile but if both
584*e5436536SAndroid Build Coastguard Worker             the advanced (ISO/IEC 14496:3 AMD 4) and the legacy (PCE) MPEG
585*e5436536SAndroid Build Coastguard Worker             downmix metadata are available the latter will be applied.
586*e5436536SAndroid Build Coastguard Worker           */
587*e5436536SAndroid Build Coastguard Worker   AAC_MD_PROFILE_ARIB_JAPAN =
588*e5436536SAndroid Build Coastguard Worker       3 /*!< Downmix creation as described in ABNT NBR 15602-2. But if advanced
589*e5436536SAndroid Build Coastguard Worker              downmix metadata (ISO/IEC 14496:3 AMD 4) is available it will be
590*e5436536SAndroid Build Coastguard Worker              preferred because of the higher resolutions. In addition the
591*e5436536SAndroid Build Coastguard Worker            metadata expiry time will be set to the value defined in the ARIB
592*e5436536SAndroid Build Coastguard Worker            standard (see ::AAC_METADATA_EXPIRY_TIME).
593*e5436536SAndroid Build Coastguard Worker          */
594*e5436536SAndroid Build Coastguard Worker } AAC_MD_PROFILE;
595*e5436536SAndroid Build Coastguard Worker 
596*e5436536SAndroid Build Coastguard Worker /*! \enum  AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS
597*e5436536SAndroid Build Coastguard Worker  *  \brief Options for handling of DRC parameters, if presentation mode is not indicated in bitstream
598*e5436536SAndroid Build Coastguard Worker  */
599*e5436536SAndroid Build Coastguard Worker typedef enum {
600*e5436536SAndroid Build Coastguard Worker   AAC_DRC_PARAMETER_HANDLING_DISABLED = -1, /*!< DRC parameter handling
601*e5436536SAndroid Build Coastguard Worker                                                disabled, all parameters are
602*e5436536SAndroid Build Coastguard Worker                                                applied as requested. */
603*e5436536SAndroid Build Coastguard Worker   AAC_DRC_PARAMETER_HANDLING_ENABLED =
604*e5436536SAndroid Build Coastguard Worker       0, /*!< Apply changes to requested DRC parameters to prevent clipping. */
605*e5436536SAndroid Build Coastguard Worker   AAC_DRC_PRESENTATION_MODE_1_DEFAULT =
606*e5436536SAndroid Build Coastguard Worker       1, /*!< Use DRC presentation mode 1 as default (e.g. for Nordig) */
607*e5436536SAndroid Build Coastguard Worker   AAC_DRC_PRESENTATION_MODE_2_DEFAULT =
608*e5436536SAndroid Build Coastguard Worker       2 /*!< Use DRC presentation mode 2 as default (e.g. for DTG DBook) */
609*e5436536SAndroid Build Coastguard Worker } AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS;
610*e5436536SAndroid Build Coastguard Worker 
611*e5436536SAndroid Build Coastguard Worker /**
612*e5436536SAndroid Build Coastguard Worker  * \brief AAC decoder setting parameters
613*e5436536SAndroid Build Coastguard Worker  */
614*e5436536SAndroid Build Coastguard Worker typedef enum {
615*e5436536SAndroid Build Coastguard Worker   AAC_PCM_DUAL_CHANNEL_OUTPUT_MODE =
616*e5436536SAndroid Build Coastguard Worker       0x0002, /*!< Defines how the decoder processes two channel signals: \n
617*e5436536SAndroid Build Coastguard Worker                    0: Leave both signals as they are (default). \n
618*e5436536SAndroid Build Coastguard Worker                    1: Create a dual mono output signal from channel 1. \n
619*e5436536SAndroid Build Coastguard Worker                    2: Create a dual mono output signal from channel 2. \n
620*e5436536SAndroid Build Coastguard Worker                    3: Create a dual mono output signal by mixing both channels
621*e5436536SAndroid Build Coastguard Worker                  (L' = R' = 0.5*Ch1 + 0.5*Ch2). */
622*e5436536SAndroid Build Coastguard Worker   AAC_PCM_OUTPUT_CHANNEL_MAPPING =
623*e5436536SAndroid Build Coastguard Worker       0x0003, /*!< Output buffer channel ordering. 0: MPEG PCE style order, 1:
624*e5436536SAndroid Build Coastguard Worker                  WAV file channel order (default). */
625*e5436536SAndroid Build Coastguard Worker   AAC_PCM_LIMITER_ENABLE =
626*e5436536SAndroid Build Coastguard Worker       0x0004,                           /*!< Enable signal level limiting. \n
627*e5436536SAndroid Build Coastguard Worker                                              -1: Auto-config. Enable limiter for all
628*e5436536SAndroid Build Coastguard Worker                                            non-lowdelay configurations by default. \n
629*e5436536SAndroid Build Coastguard Worker                                               0: Disable limiter in general. \n
630*e5436536SAndroid Build Coastguard Worker                                               1: Enable limiter always.
631*e5436536SAndroid Build Coastguard Worker                                              It is recommended to call the decoder
632*e5436536SAndroid Build Coastguard Worker                                            with a AACDEC_CLRHIST flag to reset all
633*e5436536SAndroid Build Coastguard Worker                                            states when      the limiter switch is changed
634*e5436536SAndroid Build Coastguard Worker                                            explicitly. */
635*e5436536SAndroid Build Coastguard Worker   AAC_PCM_LIMITER_ATTACK_TIME = 0x0005, /*!< Signal level limiting attack time
636*e5436536SAndroid Build Coastguard Worker                                            in ms. Default configuration is 15
637*e5436536SAndroid Build Coastguard Worker                                            ms. Adjustable range from 1 ms to 15
638*e5436536SAndroid Build Coastguard Worker                                            ms. */
639*e5436536SAndroid Build Coastguard Worker   AAC_PCM_LIMITER_RELEAS_TIME = 0x0006, /*!< Signal level limiting release time
640*e5436536SAndroid Build Coastguard Worker                                            in ms. Default configuration is 50
641*e5436536SAndroid Build Coastguard Worker                                            ms. Adjustable time must be larger
642*e5436536SAndroid Build Coastguard Worker                                            than 0 ms. */
643*e5436536SAndroid Build Coastguard Worker   AAC_PCM_MIN_OUTPUT_CHANNELS =
644*e5436536SAndroid Build Coastguard Worker       0x0011, /*!< Minimum number of PCM output channels. If higher than the
645*e5436536SAndroid Build Coastguard Worker                  number of encoded audio channels, a simple channel extension is
646*e5436536SAndroid Build Coastguard Worker                  applied (see note 4 for exceptions). \n -1, 0: Disable channel
647*e5436536SAndroid Build Coastguard Worker                  extension feature. The decoder output contains the same number
648*e5436536SAndroid Build Coastguard Worker                  of channels as the encoded bitstream. \n 1:    This value is
649*e5436536SAndroid Build Coastguard Worker                  currently needed only together with the mix-down feature. See
650*e5436536SAndroid Build Coastguard Worker                           ::AAC_PCM_MAX_OUTPUT_CHANNELS and note 2 below. \n
651*e5436536SAndroid Build Coastguard Worker                     2:    Encoded mono signals will be duplicated to achieve a
652*e5436536SAndroid Build Coastguard Worker                  2/0/0.0 channel output configuration. \n 6:    The decoder
653*e5436536SAndroid Build Coastguard Worker                  tries to reorder encoded signals with less than six channels to
654*e5436536SAndroid Build Coastguard Worker                  achieve a 3/0/2.1 channel output signal. Missing channels will
655*e5436536SAndroid Build Coastguard Worker                  be filled with a zero signal. If reordering is not possible the
656*e5436536SAndroid Build Coastguard Worker                  empty channels will simply be appended. Only available if
657*e5436536SAndroid Build Coastguard Worker                  instance is configured to support multichannel output. \n 8:
658*e5436536SAndroid Build Coastguard Worker                  The decoder tries to reorder encoded signals with less than
659*e5436536SAndroid Build Coastguard Worker                  eight channels to achieve a 3/0/4.1 channel output signal.
660*e5436536SAndroid Build Coastguard Worker                  Missing channels will be filled with a zero signal. If
661*e5436536SAndroid Build Coastguard Worker                  reordering is not possible the empty channels will simply be
662*e5436536SAndroid Build Coastguard Worker                           appended. Only available if instance is configured to
663*e5436536SAndroid Build Coastguard Worker                  support multichannel output.\n NOTE: \n
664*e5436536SAndroid Build Coastguard Worker                      1. The channel signaling (CStreamInfo::pChannelType and
665*e5436536SAndroid Build Coastguard Worker                  CStreamInfo::pChannelIndices) will not be modified. Added empty
666*e5436536SAndroid Build Coastguard Worker                  channels will be signaled with channel type
667*e5436536SAndroid Build Coastguard Worker                         AUDIO_CHANNEL_TYPE::ACT_NONE. \n
668*e5436536SAndroid Build Coastguard Worker                      2. If the parameter value is greater than that of
669*e5436536SAndroid Build Coastguard Worker                  ::AAC_PCM_MAX_OUTPUT_CHANNELS both will be set to the same
670*e5436536SAndroid Build Coastguard Worker                  value. \n
671*e5436536SAndroid Build Coastguard Worker                      3. This parameter will be ignored if the number of encoded
672*e5436536SAndroid Build Coastguard Worker                  audio channels is greater than 8. */
673*e5436536SAndroid Build Coastguard Worker   AAC_PCM_MAX_OUTPUT_CHANNELS =
674*e5436536SAndroid Build Coastguard Worker       0x0012, /*!< Maximum number of PCM output channels. If lower than the
675*e5436536SAndroid Build Coastguard Worker                  number of encoded audio channels, downmixing is applied
676*e5436536SAndroid Build Coastguard Worker                  accordingly (see note 5 for exceptions). If dedicated metadata
677*e5436536SAndroid Build Coastguard Worker                  is available in the stream it will be used to achieve better
678*e5436536SAndroid Build Coastguard Worker                  mixing results. \n -1, 0: Disable downmixing feature. The
679*e5436536SAndroid Build Coastguard Worker                  decoder output contains the same number of channels as the
680*e5436536SAndroid Build Coastguard Worker                  encoded bitstream. \n 1:    All encoded audio configurations
681*e5436536SAndroid Build Coastguard Worker                  with more than one channel will be mixed down to one mono
682*e5436536SAndroid Build Coastguard Worker                  output signal. \n 2:    The decoder performs a stereo mix-down
683*e5436536SAndroid Build Coastguard Worker                  if the number encoded audio channels is greater than two. \n 6:
684*e5436536SAndroid Build Coastguard Worker                  If the number of encoded audio channels is greater than six the
685*e5436536SAndroid Build Coastguard Worker                  decoder performs a mix-down to meet the target output
686*e5436536SAndroid Build Coastguard Worker                  configuration of 3/0/2.1 channels. Only available if instance
687*e5436536SAndroid Build Coastguard Worker                  is configured to support multichannel output. \n 8:    This
688*e5436536SAndroid Build Coastguard Worker                  value is currently needed only together with the channel
689*e5436536SAndroid Build Coastguard Worker                  extension feature. See ::AAC_PCM_MIN_OUTPUT_CHANNELS and note 2
690*e5436536SAndroid Build Coastguard Worker                  below. Only available if instance is configured to support
691*e5436536SAndroid Build Coastguard Worker                  multichannel output. \n NOTE: \n
692*e5436536SAndroid Build Coastguard Worker                      1. Down-mixing of any seven or eight channel configuration
693*e5436536SAndroid Build Coastguard Worker                  not defined in ISO/IEC 14496-3 PDAM 4 is not supported by this
694*e5436536SAndroid Build Coastguard Worker                  software version. \n
695*e5436536SAndroid Build Coastguard Worker                      2. If the parameter value is greater than zero but smaller
696*e5436536SAndroid Build Coastguard Worker                  than ::AAC_PCM_MIN_OUTPUT_CHANNELS both will be set to same
697*e5436536SAndroid Build Coastguard Worker                  value. \n
698*e5436536SAndroid Build Coastguard Worker                      3. This parameter will be ignored if the number of encoded
699*e5436536SAndroid Build Coastguard Worker                  audio channels is greater than 8. */
700*e5436536SAndroid Build Coastguard Worker   AAC_METADATA_PROFILE =
701*e5436536SAndroid Build Coastguard Worker       0x0020, /*!< See ::AAC_MD_PROFILE for all available values. */
702*e5436536SAndroid Build Coastguard Worker   AAC_METADATA_EXPIRY_TIME = 0x0021, /*!< Defines the time in ms after which all
703*e5436536SAndroid Build Coastguard Worker                                         the bitstream associated meta-data (DRC,
704*e5436536SAndroid Build Coastguard Worker                                         downmix coefficients, ...) will be reset
705*e5436536SAndroid Build Coastguard Worker                                         to default if no update has been
706*e5436536SAndroid Build Coastguard Worker                                         received. Negative values disable the
707*e5436536SAndroid Build Coastguard Worker                                         feature. */
708*e5436536SAndroid Build Coastguard Worker 
709*e5436536SAndroid Build Coastguard Worker   AAC_CONCEAL_METHOD = 0x0100, /*!< Error concealment: Processing method. \n
710*e5436536SAndroid Build Coastguard Worker                                     0: Spectral muting. \n
711*e5436536SAndroid Build Coastguard Worker                                     1: Noise substitution (see ::CONCEAL_NOISE).
712*e5436536SAndroid Build Coastguard Worker                                   \n 2: Energy interpolation (adds additional
713*e5436536SAndroid Build Coastguard Worker                                   signal delay of one frame, see
714*e5436536SAndroid Build Coastguard Worker                                   ::CONCEAL_INTER. only some AOTs are
715*e5436536SAndroid Build Coastguard Worker                                   supported). \n */
716*e5436536SAndroid Build Coastguard Worker   AAC_DRC_BOOST_FACTOR =
717*e5436536SAndroid Build Coastguard Worker       0x0200, /*!< MPEG-4 / MPEG-D Dynamic Range Control (DRC): Scaling factor
718*e5436536SAndroid Build Coastguard Worker                  for boosting gain values. Defines how the boosting DRC factors
719*e5436536SAndroid Build Coastguard Worker                  (conveyed in the bitstream) will be applied to the decoded
720*e5436536SAndroid Build Coastguard Worker                  signal. The valid values range from 0 (don't apply boost
721*e5436536SAndroid Build Coastguard Worker                  factors) to 127 (fully apply boost factors). Default value is 0
722*e5436536SAndroid Build Coastguard Worker                  for MPEG-4 DRC and 127 for MPEG-D DRC. */
723*e5436536SAndroid Build Coastguard Worker   AAC_DRC_ATTENUATION_FACTOR = 0x0201, /*!< MPEG-4 / MPEG-D DRC: Scaling factor
724*e5436536SAndroid Build Coastguard Worker                                           for attenuating gain values. Same as
725*e5436536SAndroid Build Coastguard Worker                                             ::AAC_DRC_BOOST_FACTOR but for
726*e5436536SAndroid Build Coastguard Worker                                           attenuating DRC factors. */
727*e5436536SAndroid Build Coastguard Worker   AAC_DRC_REFERENCE_LEVEL =
728*e5436536SAndroid Build Coastguard Worker       0x0202, /*!< MPEG-4 / MPEG-D DRC: Target reference level / decoder target
729*e5436536SAndroid Build Coastguard Worker                  loudness.\n Defines the level below full-scale (quantized in
730*e5436536SAndroid Build Coastguard Worker                  steps of 0.25dB) to which the output audio signal will be
731*e5436536SAndroid Build Coastguard Worker                  normalized to by the DRC module.\n The parameter controls
732*e5436536SAndroid Build Coastguard Worker                  loudness normalization for both MPEG-4 DRC and MPEG-D DRC. The
733*e5436536SAndroid Build Coastguard Worker                  valid values range from 40 (-10 dBFS) to 127 (-31.75 dBFS).\n
734*e5436536SAndroid Build Coastguard Worker                    Example values:\n
735*e5436536SAndroid Build Coastguard Worker                    124 (-31 dBFS) for audio/video receivers (AVR) or other
736*e5436536SAndroid Build Coastguard Worker                  devices allowing audio playback with high dynamic range,\n 96
737*e5436536SAndroid Build Coastguard Worker                  (-24 dBFS) for TV sets or equivalent devices (default),\n 64
738*e5436536SAndroid Build Coastguard Worker                  (-16 dBFS) for mobile devices where the dynamic range of audio
739*e5436536SAndroid Build Coastguard Worker                  playback is restricted.\n Any value smaller than 0 switches off
740*e5436536SAndroid Build Coastguard Worker                  loudness normalization and MPEG-4 DRC. */
741*e5436536SAndroid Build Coastguard Worker   AAC_DRC_HEAVY_COMPRESSION =
742*e5436536SAndroid Build Coastguard Worker       0x0203, /*!< MPEG-4 DRC: En-/Disable DVB specific heavy compression (aka
743*e5436536SAndroid Build Coastguard Worker                  RF mode). If set to 1, the decoder will apply the compression
744*e5436536SAndroid Build Coastguard Worker                  values from the DVB specific ancillary data field. At the same
745*e5436536SAndroid Build Coastguard Worker                  time the MPEG-4 Dynamic Range Control tool will be disabled. By
746*e5436536SAndroid Build Coastguard Worker                    default, heavy compression is disabled. */
747*e5436536SAndroid Build Coastguard Worker   AAC_DRC_DEFAULT_PRESENTATION_MODE =
748*e5436536SAndroid Build Coastguard Worker       0x0204, /*!< MPEG-4 DRC: Default presentation mode (DRC parameter
749*e5436536SAndroid Build Coastguard Worker                  handling). \n Defines the handling of the DRC parameters boost
750*e5436536SAndroid Build Coastguard Worker                  factor, attenuation factor and heavy compression, if no
751*e5436536SAndroid Build Coastguard Worker                  presentation mode is indicated in the bitstream.\n For options,
752*e5436536SAndroid Build Coastguard Worker                  see ::AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS.\n Default:
753*e5436536SAndroid Build Coastguard Worker                  ::AAC_DRC_PARAMETER_HANDLING_DISABLED */
754*e5436536SAndroid Build Coastguard Worker   AAC_DRC_ENC_TARGET_LEVEL =
755*e5436536SAndroid Build Coastguard Worker       0x0205, /*!< MPEG-4 DRC: Encoder target level for light (i.e. not heavy)
756*e5436536SAndroid Build Coastguard Worker                  compression.\n If known, this declares the target reference
757*e5436536SAndroid Build Coastguard Worker                  level that was assumed at the encoder for calculation of
758*e5436536SAndroid Build Coastguard Worker                  limiting gains. The valid values range from 0 (full-scale) to
759*e5436536SAndroid Build Coastguard Worker                  127 (31.75 dB below full-scale). This parameter is used only
760*e5436536SAndroid Build Coastguard Worker                  with ::AAC_DRC_PARAMETER_HANDLING_ENABLED and ignored
761*e5436536SAndroid Build Coastguard Worker                  otherwise.\n Default: 127 (worst-case assumption).\n */
762*e5436536SAndroid Build Coastguard Worker   AAC_UNIDRC_SET_EFFECT = 0x0206, /*!< MPEG-D DRC: Request a DRC effect type for
763*e5436536SAndroid Build Coastguard Worker                                      selection of a DRC set.\n Supported indices
764*e5436536SAndroid Build Coastguard Worker                                      are:\n -1: DRC off. Completely disables
765*e5436536SAndroid Build Coastguard Worker                                      MPEG-D DRC.\n 0: None (default). Disables
766*e5436536SAndroid Build Coastguard Worker                                      MPEG-D DRC, but automatically enables DRC
767*e5436536SAndroid Build Coastguard Worker                                      if necessary to prevent clipping.\n 1: Late
768*e5436536SAndroid Build Coastguard Worker                                      night\n 2: Noisy environment\n 3: Limited
769*e5436536SAndroid Build Coastguard Worker                                      playback range\n 4: Low playback level\n 5:
770*e5436536SAndroid Build Coastguard Worker                                      Dialog enhancement\n 6: General
771*e5436536SAndroid Build Coastguard Worker                                      compression. Used for generally enabling
772*e5436536SAndroid Build Coastguard Worker                                      MPEG-D DRC without particular request.\n */
773*e5436536SAndroid Build Coastguard Worker   AAC_UNIDRC_ALBUM_MODE =
774*e5436536SAndroid Build Coastguard Worker       0x0207, /*!<  MPEG-D DRC: Enable album mode. 0: Disabled (default), 1:
775*e5436536SAndroid Build Coastguard Worker                  Enabled.\n Disabled album mode leads to application of gain
776*e5436536SAndroid Build Coastguard Worker                  sequences for fading in and out, if provided in the
777*e5436536SAndroid Build Coastguard Worker                  bitstream.\n Enabled album mode makes use of dedicated album
778*e5436536SAndroid Build Coastguard Worker                  loudness information, if provided in the bitstream.\n */
779*e5436536SAndroid Build Coastguard Worker   AAC_QMF_LOWPOWER =
780*e5436536SAndroid Build Coastguard Worker       0x0300, /*!< Quadrature Mirror Filter (QMF) Bank processing mode. \n
781*e5436536SAndroid Build Coastguard Worker                    -1: Use internal default. \n
782*e5436536SAndroid Build Coastguard Worker                     0: Use complex QMF data mode. \n
783*e5436536SAndroid Build Coastguard Worker                     1: Use real (low power) QMF data mode. \n */
784*e5436536SAndroid Build Coastguard Worker   AAC_TPDEC_CLEAR_BUFFER =
785*e5436536SAndroid Build Coastguard Worker       0x0603 /*!< Clear internal bit stream buffer of transport layers. The
786*e5436536SAndroid Build Coastguard Worker                 decoder will start decoding at new data passed after this event
787*e5436536SAndroid Build Coastguard Worker                 and any previous data is discarded. */
788*e5436536SAndroid Build Coastguard Worker 
789*e5436536SAndroid Build Coastguard Worker } AACDEC_PARAM;
790*e5436536SAndroid Build Coastguard Worker 
791*e5436536SAndroid Build Coastguard Worker /**
792*e5436536SAndroid Build Coastguard Worker  * \brief This structure gives information about the currently decoded audio
793*e5436536SAndroid Build Coastguard Worker  * data. All fields are read-only.
794*e5436536SAndroid Build Coastguard Worker  */
795*e5436536SAndroid Build Coastguard Worker typedef struct {
796*e5436536SAndroid Build Coastguard Worker   /* These five members are the only really relevant ones for the user. */
797*e5436536SAndroid Build Coastguard Worker   INT sampleRate; /*!< The sample rate in Hz of the decoded PCM audio signal. */
798*e5436536SAndroid Build Coastguard Worker   INT frameSize;  /*!< The frame size of the decoded PCM audio signal. \n
799*e5436536SAndroid Build Coastguard Worker                        Typically this is: \n
800*e5436536SAndroid Build Coastguard Worker                        1024 or 960 for AAC-LC \n
801*e5436536SAndroid Build Coastguard Worker                        2048 or 1920 for HE-AAC (v2) \n
802*e5436536SAndroid Build Coastguard Worker                        512 or 480 for AAC-LD and AAC-ELD \n
803*e5436536SAndroid Build Coastguard Worker                        768, 1024, 2048 or 4096 for USAC  */
804*e5436536SAndroid Build Coastguard Worker   INT numChannels; /*!< The number of output audio channels before the rendering
805*e5436536SAndroid Build Coastguard Worker                       module, i.e. the original channel configuration. */
806*e5436536SAndroid Build Coastguard Worker   AUDIO_CHANNEL_TYPE
807*e5436536SAndroid Build Coastguard Worker   *pChannelType; /*!< Audio channel type of each output audio channel. */
808*e5436536SAndroid Build Coastguard Worker   UCHAR *pChannelIndices; /*!< Audio channel index for each output audio
809*e5436536SAndroid Build Coastguard Worker                              channel. See ISO/IEC 13818-7:2005(E), 8.5.3.2
810*e5436536SAndroid Build Coastguard Worker                              Explicit channel mapping using a
811*e5436536SAndroid Build Coastguard Worker                              program_config_element() */
812*e5436536SAndroid Build Coastguard Worker   /* Decoder internal members. */
813*e5436536SAndroid Build Coastguard Worker   INT aacSampleRate; /*!< Sampling rate in Hz without SBR (from configuration
814*e5436536SAndroid Build Coastguard Worker                         info) divided by a (ELD) downscale factor if present. */
815*e5436536SAndroid Build Coastguard Worker   INT profile; /*!< MPEG-2 profile (from file header) (-1: not applicable (e. g.
816*e5436536SAndroid Build Coastguard Worker                   MPEG-4)).               */
817*e5436536SAndroid Build Coastguard Worker   AUDIO_OBJECT_TYPE
818*e5436536SAndroid Build Coastguard Worker   aot; /*!< Audio Object Type (from ASC): is set to the appropriate value
819*e5436536SAndroid Build Coastguard Worker           for MPEG-2 bitstreams (e. g. 2 for AAC-LC). */
820*e5436536SAndroid Build Coastguard Worker   INT channelConfig; /*!< Channel configuration (0: PCE defined, 1: mono, 2:
821*e5436536SAndroid Build Coastguard Worker                         stereo, ...                       */
822*e5436536SAndroid Build Coastguard Worker   INT bitRate;       /*!< Instantaneous bit rate.                   */
823*e5436536SAndroid Build Coastguard Worker   INT aacSamplesPerFrame;   /*!< Samples per frame for the AAC core (from ASC)
824*e5436536SAndroid Build Coastguard Worker                                divided by a (ELD) downscale factor if present. \n
825*e5436536SAndroid Build Coastguard Worker                                  Typically this is (with a downscale factor of 1):
826*e5436536SAndroid Build Coastguard Worker                                \n   1024 or 960 for AAC-LC \n   512 or 480 for
827*e5436536SAndroid Build Coastguard Worker                                AAC-LD   and AAC-ELD         */
828*e5436536SAndroid Build Coastguard Worker   INT aacNumChannels;       /*!< The number of audio channels after AAC core
829*e5436536SAndroid Build Coastguard Worker                                processing (before PS or MPS processing).       CAUTION: This
830*e5436536SAndroid Build Coastguard Worker                                are not the final number of output channels! */
831*e5436536SAndroid Build Coastguard Worker   AUDIO_OBJECT_TYPE extAot; /*!< Extension Audio Object Type (from ASC)   */
832*e5436536SAndroid Build Coastguard Worker   INT extSamplingRate; /*!< Extension sampling rate in Hz (from ASC) divided by
833*e5436536SAndroid Build Coastguard Worker                           a (ELD) downscale factor if present. */
834*e5436536SAndroid Build Coastguard Worker 
835*e5436536SAndroid Build Coastguard Worker   UINT outputDelay; /*!< The number of samples the output is additionally
836*e5436536SAndroid Build Coastguard Worker                        delayed by.the decoder. */
837*e5436536SAndroid Build Coastguard Worker   UINT flags; /*!< Copy of internal flags. Only to be written by the decoder,
838*e5436536SAndroid Build Coastguard Worker                  and only to be read externally. */
839*e5436536SAndroid Build Coastguard Worker 
840*e5436536SAndroid Build Coastguard Worker   SCHAR epConfig; /*!< epConfig level (from ASC): only level 0 supported, -1
841*e5436536SAndroid Build Coastguard Worker                      means no ER (e. g. AOT=2, MPEG-2 AAC, etc.)  */
842*e5436536SAndroid Build Coastguard Worker   /* Statistics */
843*e5436536SAndroid Build Coastguard Worker   INT numLostAccessUnits; /*!< This integer will reflect the estimated amount of
844*e5436536SAndroid Build Coastguard Worker                              lost access units in case aacDecoder_DecodeFrame()
845*e5436536SAndroid Build Coastguard Worker                                returns AAC_DEC_TRANSPORT_SYNC_ERROR. It will be
846*e5436536SAndroid Build Coastguard Worker                              < 0 if the estimation failed. */
847*e5436536SAndroid Build Coastguard Worker 
848*e5436536SAndroid Build Coastguard Worker   INT64 numTotalBytes; /*!< This is the number of total bytes that have passed
849*e5436536SAndroid Build Coastguard Worker                           through the decoder. */
850*e5436536SAndroid Build Coastguard Worker   INT64
851*e5436536SAndroid Build Coastguard Worker   numBadBytes; /*!< This is the number of total bytes that were considered
852*e5436536SAndroid Build Coastguard Worker                   with errors from numTotalBytes. */
853*e5436536SAndroid Build Coastguard Worker   INT64
854*e5436536SAndroid Build Coastguard Worker   numTotalAccessUnits;     /*!< This is the number of total access units that
855*e5436536SAndroid Build Coastguard Worker                               have passed through the decoder. */
856*e5436536SAndroid Build Coastguard Worker   INT64 numBadAccessUnits; /*!< This is the number of total access units that
857*e5436536SAndroid Build Coastguard Worker                               were considered with errors from numTotalBytes. */
858*e5436536SAndroid Build Coastguard Worker 
859*e5436536SAndroid Build Coastguard Worker   /* Metadata */
860*e5436536SAndroid Build Coastguard Worker   SCHAR drcProgRefLev; /*!< DRC program reference level. Defines the reference
861*e5436536SAndroid Build Coastguard Worker                           level below full-scale. It is quantized in steps of
862*e5436536SAndroid Build Coastguard Worker                           0.25dB. The valid values range from 0 (0 dBFS) to 127
863*e5436536SAndroid Build Coastguard Worker                           (-31.75 dBFS). It is used to reflect the average
864*e5436536SAndroid Build Coastguard Worker                           loudness of the audio in LKFS according to ITU-R BS
865*e5436536SAndroid Build Coastguard Worker                           1770. If no level has been found in the bitstream the
866*e5436536SAndroid Build Coastguard Worker                           value is -1. */
867*e5436536SAndroid Build Coastguard Worker   SCHAR
868*e5436536SAndroid Build Coastguard Worker   drcPresMode;        /*!< DRC presentation mode. According to ETSI TS 101 154,
869*e5436536SAndroid Build Coastguard Worker                          this field indicates whether   light (MPEG-4 Dynamic Range
870*e5436536SAndroid Build Coastguard Worker                          Control tool) or heavy compression (DVB heavy
871*e5436536SAndroid Build Coastguard Worker                          compression)   dynamic range control shall take priority
872*e5436536SAndroid Build Coastguard Worker                          on the outputs.   For details, see ETSI TS 101 154, table
873*e5436536SAndroid Build Coastguard Worker                          C.33. Possible values are: \n   -1: No corresponding
874*e5436536SAndroid Build Coastguard Worker                          metadata found in the bitstream \n   0: DRC presentation
875*e5436536SAndroid Build Coastguard Worker                          mode not indicated \n   1: DRC presentation mode 1 \n   2:
876*e5436536SAndroid Build Coastguard Worker                          DRC presentation mode 2 \n   3: Reserved */
877*e5436536SAndroid Build Coastguard Worker   INT outputLoudness; /*!< Audio output loudness in steps of -0.25 dB. Range: 0
878*e5436536SAndroid Build Coastguard Worker                          (0 dBFS) to 231 (-57.75 dBFS).\n  A value of -1
879*e5436536SAndroid Build Coastguard Worker                          indicates that no loudness metadata is present.\n  If
880*e5436536SAndroid Build Coastguard Worker                          loudness normalization is active, the value corresponds
881*e5436536SAndroid Build Coastguard Worker                          to the target loudness value set with
882*e5436536SAndroid Build Coastguard Worker                          ::AAC_DRC_REFERENCE_LEVEL.\n  If loudness normalization
883*e5436536SAndroid Build Coastguard Worker                          is not active, the output loudness value corresponds to
884*e5436536SAndroid Build Coastguard Worker                          the loudness metadata given in the bitstream.\n
885*e5436536SAndroid Build Coastguard Worker                            Loudness metadata can originate from MPEG-4 DRC or
886*e5436536SAndroid Build Coastguard Worker                          MPEG-D DRC. */
887*e5436536SAndroid Build Coastguard Worker 
888*e5436536SAndroid Build Coastguard Worker } CStreamInfo;
889*e5436536SAndroid Build Coastguard Worker 
890*e5436536SAndroid Build Coastguard Worker typedef struct AAC_DECODER_INSTANCE
891*e5436536SAndroid Build Coastguard Worker     *HANDLE_AACDECODER; /*!< Pointer to a AAC decoder instance. */
892*e5436536SAndroid Build Coastguard Worker 
893*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
894*e5436536SAndroid Build Coastguard Worker extern "C" {
895*e5436536SAndroid Build Coastguard Worker #endif
896*e5436536SAndroid Build Coastguard Worker 
897*e5436536SAndroid Build Coastguard Worker /**
898*e5436536SAndroid Build Coastguard Worker  * \brief Initialize ancillary data buffer.
899*e5436536SAndroid Build Coastguard Worker  *
900*e5436536SAndroid Build Coastguard Worker  * \param self    AAC decoder handle.
901*e5436536SAndroid Build Coastguard Worker  * \param buffer  Pointer to (external) ancillary data buffer.
902*e5436536SAndroid Build Coastguard Worker  * \param size    Size of the buffer pointed to by buffer.
903*e5436536SAndroid Build Coastguard Worker  * \return        Error code.
904*e5436536SAndroid Build Coastguard Worker  */
905*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_AncDataInit(HANDLE_AACDECODER self,
906*e5436536SAndroid Build Coastguard Worker                                                     UCHAR *buffer, int size);
907*e5436536SAndroid Build Coastguard Worker 
908*e5436536SAndroid Build Coastguard Worker /**
909*e5436536SAndroid Build Coastguard Worker  * \brief Get one ancillary data element.
910*e5436536SAndroid Build Coastguard Worker  *
911*e5436536SAndroid Build Coastguard Worker  * \param self   AAC decoder handle.
912*e5436536SAndroid Build Coastguard Worker  * \param index  Index of the ancillary data element to get.
913*e5436536SAndroid Build Coastguard Worker  * \param ptr    Pointer to a buffer receiving a pointer to the requested
914*e5436536SAndroid Build Coastguard Worker  * ancillary data element.
915*e5436536SAndroid Build Coastguard Worker  * \param size   Pointer to a buffer receiving the length of the requested
916*e5436536SAndroid Build Coastguard Worker  * ancillary data element.
917*e5436536SAndroid Build Coastguard Worker  * \return       Error code.
918*e5436536SAndroid Build Coastguard Worker  */
919*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_AncDataGet(HANDLE_AACDECODER self,
920*e5436536SAndroid Build Coastguard Worker                                                    int index, UCHAR **ptr,
921*e5436536SAndroid Build Coastguard Worker                                                    int *size);
922*e5436536SAndroid Build Coastguard Worker 
923*e5436536SAndroid Build Coastguard Worker /**
924*e5436536SAndroid Build Coastguard Worker  * \brief Set one single decoder parameter.
925*e5436536SAndroid Build Coastguard Worker  *
926*e5436536SAndroid Build Coastguard Worker  * \param self   AAC decoder handle.
927*e5436536SAndroid Build Coastguard Worker  * \param param  Parameter to be set.
928*e5436536SAndroid Build Coastguard Worker  * \param value  Parameter value.
929*e5436536SAndroid Build Coastguard Worker  * \return       Error code.
930*e5436536SAndroid Build Coastguard Worker  */
931*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_SetParam(const HANDLE_AACDECODER self,
932*e5436536SAndroid Build Coastguard Worker                                                  const AACDEC_PARAM param,
933*e5436536SAndroid Build Coastguard Worker                                                  const INT value);
934*e5436536SAndroid Build Coastguard Worker 
935*e5436536SAndroid Build Coastguard Worker /**
936*e5436536SAndroid Build Coastguard Worker  * \brief              Get free bytes inside decoder internal buffer.
937*e5436536SAndroid Build Coastguard Worker  * \param self         Handle of AAC decoder instance.
938*e5436536SAndroid Build Coastguard Worker  * \param pFreeBytes   Pointer to variable receiving amount of free bytes inside
939*e5436536SAndroid Build Coastguard Worker  * decoder internal buffer.
940*e5436536SAndroid Build Coastguard Worker  * \return             Error code.
941*e5436536SAndroid Build Coastguard Worker  */
942*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR
943*e5436536SAndroid Build Coastguard Worker aacDecoder_GetFreeBytes(const HANDLE_AACDECODER self, UINT *pFreeBytes);
944*e5436536SAndroid Build Coastguard Worker 
945*e5436536SAndroid Build Coastguard Worker /**
946*e5436536SAndroid Build Coastguard Worker  * \brief               Open an AAC decoder instance.
947*e5436536SAndroid Build Coastguard Worker  * \param transportFmt  The transport type to be used.
948*e5436536SAndroid Build Coastguard Worker  * \param nrOfLayers    Number of transport layers.
949*e5436536SAndroid Build Coastguard Worker  * \return              AAC decoder handle.
950*e5436536SAndroid Build Coastguard Worker  */
951*e5436536SAndroid Build Coastguard Worker LINKSPEC_H HANDLE_AACDECODER aacDecoder_Open(TRANSPORT_TYPE transportFmt,
952*e5436536SAndroid Build Coastguard Worker                                              UINT nrOfLayers);
953*e5436536SAndroid Build Coastguard Worker 
954*e5436536SAndroid Build Coastguard Worker /**
955*e5436536SAndroid Build Coastguard Worker  * \brief Explicitly configure the decoder by passing a raw AudioSpecificConfig
956*e5436536SAndroid Build Coastguard Worker  * (ASC) or a StreamMuxConfig (SMC), contained in a binary buffer. This is
957*e5436536SAndroid Build Coastguard Worker  * required for MPEG-4 and Raw Packets file format bitstreams as well as for
958*e5436536SAndroid Build Coastguard Worker  * LATM bitstreams with no in-band SMC. If the transport format is LATM with or
959*e5436536SAndroid Build Coastguard Worker  * without LOAS, configuration is assumed to be an SMC, for all other file
960*e5436536SAndroid Build Coastguard Worker  * formats an ASC.
961*e5436536SAndroid Build Coastguard Worker  *
962*e5436536SAndroid Build Coastguard Worker  * \param self    AAC decoder handle.
963*e5436536SAndroid Build Coastguard Worker  * \param conf    Pointer to an unsigned char buffer containing the binary
964*e5436536SAndroid Build Coastguard Worker  * configuration buffer (either ASC or SMC).
965*e5436536SAndroid Build Coastguard Worker  * \param length  Length of the configuration buffer in bytes.
966*e5436536SAndroid Build Coastguard Worker  * \return        Error code.
967*e5436536SAndroid Build Coastguard Worker  */
968*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_ConfigRaw(HANDLE_AACDECODER self,
969*e5436536SAndroid Build Coastguard Worker                                                   UCHAR *conf[],
970*e5436536SAndroid Build Coastguard Worker                                                   const UINT length[]);
971*e5436536SAndroid Build Coastguard Worker 
972*e5436536SAndroid Build Coastguard Worker /**
973*e5436536SAndroid Build Coastguard Worker  * \brief Submit raw ISO base media file format boxes to decoder for parsing
974*e5436536SAndroid Build Coastguard Worker  * (only some box types are recognized).
975*e5436536SAndroid Build Coastguard Worker  *
976*e5436536SAndroid Build Coastguard Worker  * \param self    AAC decoder handle.
977*e5436536SAndroid Build Coastguard Worker  * \param buffer  Pointer to an unsigned char buffer containing the binary box
978*e5436536SAndroid Build Coastguard Worker  * data (including size and type, can be a sequence of multiple boxes).
979*e5436536SAndroid Build Coastguard Worker  * \param length  Length of the data in bytes.
980*e5436536SAndroid Build Coastguard Worker  * \return        Error code.
981*e5436536SAndroid Build Coastguard Worker  */
982*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_RawISOBMFFData(HANDLE_AACDECODER self,
983*e5436536SAndroid Build Coastguard Worker                                                        UCHAR *buffer,
984*e5436536SAndroid Build Coastguard Worker                                                        UINT length);
985*e5436536SAndroid Build Coastguard Worker 
986*e5436536SAndroid Build Coastguard Worker /**
987*e5436536SAndroid Build Coastguard Worker  * \brief Fill AAC decoder's internal input buffer with bitstream data from the
988*e5436536SAndroid Build Coastguard Worker  * external input buffer. The function only copies such data as long as the
989*e5436536SAndroid Build Coastguard Worker  * decoder-internal input buffer is not full. So it grabs whatever it can from
990*e5436536SAndroid Build Coastguard Worker  * pBuffer and returns information (bytesValid) so that at a subsequent call of
991*e5436536SAndroid Build Coastguard Worker  * %aacDecoder_Fill(), the right position in pBuffer can be determined to grab
992*e5436536SAndroid Build Coastguard Worker  * the next data.
993*e5436536SAndroid Build Coastguard Worker  *
994*e5436536SAndroid Build Coastguard Worker  * \param self        AAC decoder handle.
995*e5436536SAndroid Build Coastguard Worker  * \param pBuffer     Pointer to external input buffer.
996*e5436536SAndroid Build Coastguard Worker  * \param bufferSize  Size of external input buffer. This argument is required
997*e5436536SAndroid Build Coastguard Worker  * because decoder-internally we need the information to calculate the offset to
998*e5436536SAndroid Build Coastguard Worker  * pBuffer, where the next available data is, which is then
999*e5436536SAndroid Build Coastguard Worker  * fed into the decoder-internal buffer (as much as
1000*e5436536SAndroid Build Coastguard Worker  * possible). Our example framework implementation fills the
1001*e5436536SAndroid Build Coastguard Worker  * buffer at pBuffer again, once it contains no available valid bytes anymore
1002*e5436536SAndroid Build Coastguard Worker  * (meaning bytesValid equal 0).
1003*e5436536SAndroid Build Coastguard Worker  * \param bytesValid  Number of bitstream bytes in the external bitstream buffer
1004*e5436536SAndroid Build Coastguard Worker  * that have not yet been copied into the decoder's internal bitstream buffer by
1005*e5436536SAndroid Build Coastguard Worker  * calling this function. The value is updated according to
1006*e5436536SAndroid Build Coastguard Worker  * the amount of newly copied bytes.
1007*e5436536SAndroid Build Coastguard Worker  * \return            Error code.
1008*e5436536SAndroid Build Coastguard Worker  */
1009*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_Fill(HANDLE_AACDECODER self,
1010*e5436536SAndroid Build Coastguard Worker                                              UCHAR *pBuffer[],
1011*e5436536SAndroid Build Coastguard Worker                                              const UINT bufferSize[],
1012*e5436536SAndroid Build Coastguard Worker                                              UINT *bytesValid);
1013*e5436536SAndroid Build Coastguard Worker 
1014*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Trigger the built-in error concealment
1015*e5436536SAndroid Build Coastguard Worker  * module to generate a substitute signal for one lost frame. New input data
1016*e5436536SAndroid Build Coastguard Worker  * will not be considered.
1017*e5436536SAndroid Build Coastguard Worker  */
1018*e5436536SAndroid Build Coastguard Worker #define AACDEC_CONCEAL 1
1019*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Flush all filterbanks to get all delayed
1020*e5436536SAndroid Build Coastguard Worker  * audio without having new input data. Thus new input data will not be
1021*e5436536SAndroid Build Coastguard Worker  * considered.
1022*e5436536SAndroid Build Coastguard Worker  */
1023*e5436536SAndroid Build Coastguard Worker #define AACDEC_FLUSH 2
1024*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Signal an input bit stream data
1025*e5436536SAndroid Build Coastguard Worker  * discontinuity. Resync any internals as necessary.
1026*e5436536SAndroid Build Coastguard Worker  */
1027*e5436536SAndroid Build Coastguard Worker #define AACDEC_INTR 4
1028*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Clear all signal delay lines and history
1029*e5436536SAndroid Build Coastguard Worker  * buffers. CAUTION: This can cause discontinuities in the output signal.
1030*e5436536SAndroid Build Coastguard Worker  */
1031*e5436536SAndroid Build Coastguard Worker #define AACDEC_CLRHIST 8
1032*e5436536SAndroid Build Coastguard Worker 
1033*e5436536SAndroid Build Coastguard Worker /**
1034*e5436536SAndroid Build Coastguard Worker  * \brief               Decode one audio frame
1035*e5436536SAndroid Build Coastguard Worker  *
1036*e5436536SAndroid Build Coastguard Worker  * \param self          AAC decoder handle.
1037*e5436536SAndroid Build Coastguard Worker  * \param pTimeData     Pointer to external output buffer where the decoded PCM
1038*e5436536SAndroid Build Coastguard Worker  * samples will be stored into.
1039*e5436536SAndroid Build Coastguard Worker  * \param timeDataSize  Size of external output buffer in PCM samples.
1040*e5436536SAndroid Build Coastguard Worker  * \param flags         Bit field with flags for the decoder: \n
1041*e5436536SAndroid Build Coastguard Worker  *                      (flags & AACDEC_CONCEAL) == 1: Do concealment. \n
1042*e5436536SAndroid Build Coastguard Worker  *                      (flags & AACDEC_FLUSH) == 2: Discard input data. Flush
1043*e5436536SAndroid Build Coastguard Worker  * filter banks (output delayed audio). \n (flags & AACDEC_INTR) == 4: Input
1044*e5436536SAndroid Build Coastguard Worker  * data is discontinuous. Resynchronize any internals as
1045*e5436536SAndroid Build Coastguard Worker  * necessary. \n (flags & AACDEC_CLRHIST) == 8: Clear all signal delay lines and
1046*e5436536SAndroid Build Coastguard Worker  * history buffers.
1047*e5436536SAndroid Build Coastguard Worker  * \return              Error code.
1048*e5436536SAndroid Build Coastguard Worker  */
1049*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_DecodeFrame(HANDLE_AACDECODER self,
1050*e5436536SAndroid Build Coastguard Worker                                                     INT_PCM *pTimeData,
1051*e5436536SAndroid Build Coastguard Worker                                                     const INT timeDataSize,
1052*e5436536SAndroid Build Coastguard Worker                                                     const UINT flags);
1053*e5436536SAndroid Build Coastguard Worker 
1054*e5436536SAndroid Build Coastguard Worker /**
1055*e5436536SAndroid Build Coastguard Worker  * \brief       De-allocate all resources of an AAC decoder instance.
1056*e5436536SAndroid Build Coastguard Worker  *
1057*e5436536SAndroid Build Coastguard Worker  * \param self  AAC decoder handle.
1058*e5436536SAndroid Build Coastguard Worker  * \return      void.
1059*e5436536SAndroid Build Coastguard Worker  */
1060*e5436536SAndroid Build Coastguard Worker LINKSPEC_H void aacDecoder_Close(HANDLE_AACDECODER self);
1061*e5436536SAndroid Build Coastguard Worker 
1062*e5436536SAndroid Build Coastguard Worker /**
1063*e5436536SAndroid Build Coastguard Worker  * \brief       Get CStreamInfo handle from decoder.
1064*e5436536SAndroid Build Coastguard Worker  *
1065*e5436536SAndroid Build Coastguard Worker  * \param self  AAC decoder handle.
1066*e5436536SAndroid Build Coastguard Worker  * \return      Reference to requested CStreamInfo.
1067*e5436536SAndroid Build Coastguard Worker  */
1068*e5436536SAndroid Build Coastguard Worker LINKSPEC_H CStreamInfo *aacDecoder_GetStreamInfo(HANDLE_AACDECODER self);
1069*e5436536SAndroid Build Coastguard Worker 
1070*e5436536SAndroid Build Coastguard Worker /**
1071*e5436536SAndroid Build Coastguard Worker  * \brief       Get decoder library info.
1072*e5436536SAndroid Build Coastguard Worker  *
1073*e5436536SAndroid Build Coastguard Worker  * \param info  Pointer to an allocated LIB_INFO structure.
1074*e5436536SAndroid Build Coastguard Worker  * \return      0 on success.
1075*e5436536SAndroid Build Coastguard Worker  */
1076*e5436536SAndroid Build Coastguard Worker LINKSPEC_H INT aacDecoder_GetLibInfo(LIB_INFO *info);
1077*e5436536SAndroid Build Coastguard Worker 
1078*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
1079*e5436536SAndroid Build Coastguard Worker }
1080*e5436536SAndroid Build Coastguard Worker #endif
1081*e5436536SAndroid Build Coastguard Worker 
1082*e5436536SAndroid Build Coastguard Worker #endif /* AACDECODER_LIB_H */
1083