xref: /aosp_15_r20/external/aac/libMpegTPDec/include/tpdec_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 - 2018 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 /******************* MPEG transport format 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: MPEG Transport decoder
100*e5436536SAndroid Build Coastguard Worker 
101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
102*e5436536SAndroid Build Coastguard Worker 
103*e5436536SAndroid Build Coastguard Worker #ifndef TPDEC_LIB_H
104*e5436536SAndroid Build Coastguard Worker #define TPDEC_LIB_H
105*e5436536SAndroid Build Coastguard Worker 
106*e5436536SAndroid Build Coastguard Worker #include "tp_data.h"
107*e5436536SAndroid Build Coastguard Worker 
108*e5436536SAndroid Build Coastguard Worker #include "FDK_bitstream.h"
109*e5436536SAndroid Build Coastguard Worker 
110*e5436536SAndroid Build Coastguard Worker typedef enum {
111*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_OK = 0, /*!< All fine. */
112*e5436536SAndroid Build Coastguard Worker 
113*e5436536SAndroid Build Coastguard Worker   /* Synchronization errors. Wait for new input data and try again. */
114*e5436536SAndroid Build Coastguard Worker   tpdec_sync_error_start = 0x100,
115*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_NOT_ENOUGH_BITS, /*!< Out of bits. Provide more bits and try
116*e5436536SAndroid Build Coastguard Worker                                    again.              */
117*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_SYNC_ERROR, /*!< No sync was found or sync got lost. Keep trying.
118*e5436536SAndroid Build Coastguard Worker                             */
119*e5436536SAndroid Build Coastguard Worker   tpdec_sync_error_end,
120*e5436536SAndroid Build Coastguard Worker 
121*e5436536SAndroid Build Coastguard Worker   /* Decode errors. Mostly caused due to bit errors. */
122*e5436536SAndroid Build Coastguard Worker   tpdec_decode_error_start = 0x400,
123*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_PARSE_ERROR, /*!< Bitstream data showed inconsistencies (wrong
124*e5436536SAndroid Build Coastguard Worker                                syntax).      */
125*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_UNSUPPORTED_FORMAT, /*!< Unsupported format or feature found in
126*e5436536SAndroid Build Coastguard Worker                                       the bitstream data. */
127*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_CRC_ERROR, /*!< CRC error encountered in bitstream data. */
128*e5436536SAndroid Build Coastguard Worker   tpdec_decode_error_end,
129*e5436536SAndroid Build Coastguard Worker 
130*e5436536SAndroid Build Coastguard Worker   /* Fatal errors. Stop immediately on one of these errors! */
131*e5436536SAndroid Build Coastguard Worker   tpdec_fatal_error_start = 0x200,
132*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_UNKOWN_ERROR,      /*!< An unknown error occured.      */
133*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_INVALID_PARAMETER, /*!< An invalid parameter was passed to a
134*e5436536SAndroid Build Coastguard Worker                                      function.             */
135*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_NEED_TO_RESTART,   /*!< The decoder needs to be restarted, since
136*e5436536SAndroid Build Coastguard Worker                                      the requiered   configuration change cannot
137*e5436536SAndroid Build Coastguard Worker                                      be   performed.                  */
138*e5436536SAndroid Build Coastguard Worker   TRANSPORTDEC_TOO_MANY_BITS,     /*!< In case of packet based formats: Supplied
139*e5436536SAndroid Build Coastguard Worker                                      number of bits     exceed the size of the
140*e5436536SAndroid Build Coastguard Worker                                      internal     bit buffer.                */
141*e5436536SAndroid Build Coastguard Worker   tpdec_fatal_error_end
142*e5436536SAndroid Build Coastguard Worker 
143*e5436536SAndroid Build Coastguard Worker } TRANSPORTDEC_ERROR;
144*e5436536SAndroid Build Coastguard Worker 
145*e5436536SAndroid Build Coastguard Worker /** Macro to identify decode errors. */
146*e5436536SAndroid Build Coastguard Worker #define TPDEC_IS_DECODE_ERROR(err)                                            \
147*e5436536SAndroid Build Coastguard Worker   (((err >= tpdec_decode_error_start) && (err <= tpdec_decode_error_end)) ? 1 \
148*e5436536SAndroid Build Coastguard Worker                                                                           : 0)
149*e5436536SAndroid Build Coastguard Worker /** Macro to identify fatal errors. */
150*e5436536SAndroid Build Coastguard Worker #define TPDEC_IS_FATAL_ERROR(err) \
151*e5436536SAndroid Build Coastguard Worker   (((err >= tpdec_fatal_error_start) && (err <= tpdec_fatal_error_end)) ? 1 : 0)
152*e5436536SAndroid Build Coastguard Worker 
153*e5436536SAndroid Build Coastguard Worker /**
154*e5436536SAndroid Build Coastguard Worker  * \brief Parameter identifiers for transportDec_SetParam()
155*e5436536SAndroid Build Coastguard Worker  */
156*e5436536SAndroid Build Coastguard Worker typedef enum {
157*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_MINIMIZE_DELAY = 1, /** Delay minimization strategy. 0: none, 1:
158*e5436536SAndroid Build Coastguard Worker                                      discard as many frames as possible. */
159*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_EARLY_CONFIG,       /** Enable early config discovery. */
160*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_IGNORE_BUFFERFULLNESS, /** Ignore buffer fullness. */
161*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_SET_BITRATE,  /** Set average bit rate for bit stream interruption
162*e5436536SAndroid Build Coastguard Worker                                frame misses estimation. */
163*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_RESET,        /** Reset transport decoder instance status. */
164*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_BURST_PERIOD, /** Set data reception burst period in mili seconds.
165*e5436536SAndroid Build Coastguard Worker                              */
166*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_TARGETLAYOUT, /** Set CICP target layout */
167*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_FORCE_CONFIG_CHANGE, /** Force config change for next received
168*e5436536SAndroid Build Coastguard Worker                                       config */
169*e5436536SAndroid Build Coastguard Worker   TPDEC_PARAM_USE_ELEM_SKIPPING
170*e5436536SAndroid Build Coastguard Worker } TPDEC_PARAM;
171*e5436536SAndroid Build Coastguard Worker 
172*e5436536SAndroid Build Coastguard Worker /*!
173*e5436536SAndroid Build Coastguard Worker   \brief               Reset Program Config Element.
174*e5436536SAndroid Build Coastguard Worker   \param pPce          Program Config Element structure.
175*e5436536SAndroid Build Coastguard Worker   \return              void
176*e5436536SAndroid Build Coastguard Worker */
177*e5436536SAndroid Build Coastguard Worker void CProgramConfig_Reset(CProgramConfig *pPce);
178*e5436536SAndroid Build Coastguard Worker 
179*e5436536SAndroid Build Coastguard Worker /*!
180*e5436536SAndroid Build Coastguard Worker   \brief               Initialize Program Config Element.
181*e5436536SAndroid Build Coastguard Worker   \param pPce          Program Config Element structure.
182*e5436536SAndroid Build Coastguard Worker   \return              void
183*e5436536SAndroid Build Coastguard Worker */
184*e5436536SAndroid Build Coastguard Worker void CProgramConfig_Init(CProgramConfig *pPce);
185*e5436536SAndroid Build Coastguard Worker 
186*e5436536SAndroid Build Coastguard Worker /*!
187*e5436536SAndroid Build Coastguard Worker   \brief               Inquire state of present Program Config Element
188*e5436536SAndroid Build Coastguard Worker   structure. \param pPce          Program Config Element structure. \return
189*e5436536SAndroid Build Coastguard Worker   1 if the PCE structure is filled correct, 0 if no valid PCE present.
190*e5436536SAndroid Build Coastguard Worker */
191*e5436536SAndroid Build Coastguard Worker int CProgramConfig_IsValid(const CProgramConfig *pPce);
192*e5436536SAndroid Build Coastguard Worker 
193*e5436536SAndroid Build Coastguard Worker /*!
194*e5436536SAndroid Build Coastguard Worker   \brief               Read Program Config Element.
195*e5436536SAndroid Build Coastguard Worker   \param pPce          Program Config Element structure.
196*e5436536SAndroid Build Coastguard Worker   \param bs            Bitstream buffer to read from.
197*e5436536SAndroid Build Coastguard Worker   \param alignAnchor   Align bitstream to alignAnchor bits after all read
198*e5436536SAndroid Build Coastguard Worker   operations. \return              void
199*e5436536SAndroid Build Coastguard Worker */
200*e5436536SAndroid Build Coastguard Worker void CProgramConfig_Read(CProgramConfig *pPce, HANDLE_FDK_BITSTREAM bs,
201*e5436536SAndroid Build Coastguard Worker                          UINT alignAnchor);
202*e5436536SAndroid Build Coastguard Worker 
203*e5436536SAndroid Build Coastguard Worker /*!
204*e5436536SAndroid Build Coastguard Worker   \brief               Compare two Program Config Elements.
205*e5436536SAndroid Build Coastguard Worker   \param pPce1         Pointer to first Program Config Element structure.
206*e5436536SAndroid Build Coastguard Worker   \param pPce2         Pointer to second Program Config Element structure.
207*e5436536SAndroid Build Coastguard Worker   \return              -1 if PCEs are completely different,
208*e5436536SAndroid Build Coastguard Worker                         0 if PCEs are completely equal,
209*e5436536SAndroid Build Coastguard Worker                         1 if PCEs are different but have the same channel
210*e5436536SAndroid Build Coastguard Worker   config, 2 if PCEs have different channel config but same number of channels.
211*e5436536SAndroid Build Coastguard Worker */
212*e5436536SAndroid Build Coastguard Worker int CProgramConfig_Compare(const CProgramConfig *const pPce1,
213*e5436536SAndroid Build Coastguard Worker                            const CProgramConfig *const pPce2);
214*e5436536SAndroid Build Coastguard Worker 
215*e5436536SAndroid Build Coastguard Worker /*!
216*e5436536SAndroid Build Coastguard Worker   \brief               Get a Program Config Element that matches the predefined
217*e5436536SAndroid Build Coastguard Worker   MPEG-4 channel configurations 1-14. \param pPce          Program Config
218*e5436536SAndroid Build Coastguard Worker   Element structure. \param channelConfig MPEG-4 channel configuration. \return
219*e5436536SAndroid Build Coastguard Worker   void
220*e5436536SAndroid Build Coastguard Worker */
221*e5436536SAndroid Build Coastguard Worker void CProgramConfig_GetDefault(CProgramConfig *pPce, const UINT channelConfig);
222*e5436536SAndroid Build Coastguard Worker 
223*e5436536SAndroid Build Coastguard Worker /**
224*e5436536SAndroid Build Coastguard Worker  * \brief Lookup and verify a given element. The decoder calls this
225*e5436536SAndroid Build Coastguard Worker  *        method with every new element ID found in the bitstream.
226*e5436536SAndroid Build Coastguard Worker  *
227*e5436536SAndroid Build Coastguard Worker  * \param pPce        A valid Program config structure.
228*e5436536SAndroid Build Coastguard Worker  * \param chConfig    MPEG-4 channel configuration.
229*e5436536SAndroid Build Coastguard Worker  * \param tag         Tag of the current element to be looked up.
230*e5436536SAndroid Build Coastguard Worker  * \param channelIdx  The current channel count of the decoder parser.
231*e5436536SAndroid Build Coastguard Worker  * \param chMapping   Array to store the canonical channel mapping indexes.
232*e5436536SAndroid Build Coastguard Worker  * \param chType      Array to store the audio channel type.
233*e5436536SAndroid Build Coastguard Worker  * \param chIndex     Array to store the individual audio channel type index.
234*e5436536SAndroid Build Coastguard Worker  * \param chDescrLen  Length of the output channel description array.
235*e5436536SAndroid Build Coastguard Worker  * \param elMapping   Pointer where the canonical element index is stored.
236*e5436536SAndroid Build Coastguard Worker  * \param elType      The element id of the current element to be looked up.
237*e5436536SAndroid Build Coastguard Worker  *
238*e5436536SAndroid Build Coastguard Worker  * \return            Non-zero if the element belongs to the current program,
239*e5436536SAndroid Build Coastguard Worker  * zero if it does not.
240*e5436536SAndroid Build Coastguard Worker  */
241*e5436536SAndroid Build Coastguard Worker int CProgramConfig_LookupElement(CProgramConfig *pPce, UINT chConfig,
242*e5436536SAndroid Build Coastguard Worker                                  const UINT tag, const UINT channelIdx,
243*e5436536SAndroid Build Coastguard Worker                                  UCHAR chMapping[], AUDIO_CHANNEL_TYPE chType[],
244*e5436536SAndroid Build Coastguard Worker                                  UCHAR chIndex[], const UINT chDescrLen,
245*e5436536SAndroid Build Coastguard Worker                                  UCHAR *elMapping, MP4_ELEMENT_ID elList[],
246*e5436536SAndroid Build Coastguard Worker                                  MP4_ELEMENT_ID elType);
247*e5436536SAndroid Build Coastguard Worker 
248*e5436536SAndroid Build Coastguard Worker /**
249*e5436536SAndroid Build Coastguard Worker  * \brief             Get table of channel indices in the order of their
250*e5436536SAndroid Build Coastguard Worker  * appearance in by the program config field.
251*e5436536SAndroid Build Coastguard Worker  * \param pPce        A valid program config structure.
252*e5436536SAndroid Build Coastguard Worker  * \param pceChMap    Array to store the channel mapping indices like they
253*e5436536SAndroid Build Coastguard Worker  * appear in the PCE.
254*e5436536SAndroid Build Coastguard Worker  * \param pceChMapLen Lenght of the channel mapping index array (pceChMap).
255*e5436536SAndroid Build Coastguard Worker  *
256*e5436536SAndroid Build Coastguard Worker  * \return            Non-zero if any error occured otherwise zero.
257*e5436536SAndroid Build Coastguard Worker  */
258*e5436536SAndroid Build Coastguard Worker int CProgramConfig_GetPceChMap(const CProgramConfig *pPce, UCHAR pceChMap[],
259*e5436536SAndroid Build Coastguard Worker                                const UINT pceChMapLen);
260*e5436536SAndroid Build Coastguard Worker 
261*e5436536SAndroid Build Coastguard Worker /**
262*e5436536SAndroid Build Coastguard Worker  * \brief             Get table of elements in canonical order from a
263*e5436536SAndroid Build Coastguard Worker  *                    give program config field.
264*e5436536SAndroid Build Coastguard Worker  * \param pPce        A valid program config structure.
265*e5436536SAndroid Build Coastguard Worker  * \param table       An array where the element IDs are stored.
266*e5436536SAndroid Build Coastguard Worker  * \param elListSize  The length of the table array.
267*e5436536SAndroid Build Coastguard Worker  * \param pChMapIdx   Pointer to a field receiving the corresponding
268*e5436536SAndroid Build Coastguard Worker  *                    implicit channel configuration index of the given
269*e5436536SAndroid Build Coastguard Worker  *                    PCE. If none can be found it receives the value 0.
270*e5436536SAndroid Build Coastguard Worker  * \return            Total element count including all SCE, CPE and LFE.
271*e5436536SAndroid Build Coastguard Worker  */
272*e5436536SAndroid Build Coastguard Worker int CProgramConfig_GetElementTable(const CProgramConfig *pPce,
273*e5436536SAndroid Build Coastguard Worker                                    MP4_ELEMENT_ID table[], const INT elListSize,
274*e5436536SAndroid Build Coastguard Worker                                    UCHAR *pChMapIdx);
275*e5436536SAndroid Build Coastguard Worker 
276*e5436536SAndroid Build Coastguard Worker /**
277*e5436536SAndroid Build Coastguard Worker  * \brief          Get channel description (type and index) for implicit
278*e5436536SAndroid Build Coastguard Worker                    configurations (chConfig > 0) in MPEG canonical order.
279*e5436536SAndroid Build Coastguard Worker  * \param chConfig MPEG-4 channel configuration.
280*e5436536SAndroid Build Coastguard Worker  * \param chType   Array to store the audio channel type.
281*e5436536SAndroid Build Coastguard Worker  * \param chIndex  Array to store the individual audio channel type index.
282*e5436536SAndroid Build Coastguard Worker  * \return         void
283*e5436536SAndroid Build Coastguard Worker  */
284*e5436536SAndroid Build Coastguard Worker void CProgramConfig_GetChannelDescription(const UINT chConfig,
285*e5436536SAndroid Build Coastguard Worker                                           const CProgramConfig *pPce,
286*e5436536SAndroid Build Coastguard Worker                                           AUDIO_CHANNEL_TYPE chType[],
287*e5436536SAndroid Build Coastguard Worker                                           UCHAR chIndex[]);
288*e5436536SAndroid Build Coastguard Worker 
289*e5436536SAndroid Build Coastguard Worker /**
290*e5436536SAndroid Build Coastguard Worker  * \brief       Initialize a given AudioSpecificConfig structure.
291*e5436536SAndroid Build Coastguard Worker  * \param pAsc  A pointer to an allocated CSAudioSpecificConfig struct.
292*e5436536SAndroid Build Coastguard Worker  * \return      void
293*e5436536SAndroid Build Coastguard Worker  */
294*e5436536SAndroid Build Coastguard Worker void AudioSpecificConfig_Init(CSAudioSpecificConfig *pAsc);
295*e5436536SAndroid Build Coastguard Worker 
296*e5436536SAndroid Build Coastguard Worker /**
297*e5436536SAndroid Build Coastguard Worker  * \brief   Parse a AudioSpecificConfig from a given bitstream handle.
298*e5436536SAndroid Build Coastguard Worker  *
299*e5436536SAndroid Build Coastguard Worker  * \param pAsc                         A pointer to an allocated
300*e5436536SAndroid Build Coastguard Worker  * CSAudioSpecificConfig struct.
301*e5436536SAndroid Build Coastguard Worker  * \param hBs                          Bitstream handle.
302*e5436536SAndroid Build Coastguard Worker  * \param fExplicitBackwardCompatible  Do explicit backward compatibility
303*e5436536SAndroid Build Coastguard Worker  * parsing if set (flag).
304*e5436536SAndroid Build Coastguard Worker  * \param cb pointer to structure holding callback information
305*e5436536SAndroid Build Coastguard Worker  * \param configMode Config modes: memory allocation mode or config change
306*e5436536SAndroid Build Coastguard Worker  * detection mode.
307*e5436536SAndroid Build Coastguard Worker  * \param configChanged Indicates a config change.
308*e5436536SAndroid Build Coastguard Worker  * \param m_aot in case of unequal AOT_NULL_OBJECT only the specific config is
309*e5436536SAndroid Build Coastguard Worker  * parsed.
310*e5436536SAndroid Build Coastguard Worker  *
311*e5436536SAndroid Build Coastguard Worker  * \return  Total element count including all SCE, CPE and LFE.
312*e5436536SAndroid Build Coastguard Worker  */
313*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR AudioSpecificConfig_Parse(
314*e5436536SAndroid Build Coastguard Worker     CSAudioSpecificConfig *pAsc, HANDLE_FDK_BITSTREAM hBs,
315*e5436536SAndroid Build Coastguard Worker     int fExplicitBackwardCompatible, CSTpCallBacks *cb, UCHAR configMode,
316*e5436536SAndroid Build Coastguard Worker     UCHAR configChanged, AUDIO_OBJECT_TYPE m_aot);
317*e5436536SAndroid Build Coastguard Worker 
318*e5436536SAndroid Build Coastguard Worker /* CELP stuff */
319*e5436536SAndroid Build Coastguard Worker enum { MPE = 0, RPE = 1, fs8KHz = 0, fs16KHz = 1 };
320*e5436536SAndroid Build Coastguard Worker 
321*e5436536SAndroid Build Coastguard Worker /* Defintion of flags that can be passed to transportDecOpen() */
322*e5436536SAndroid Build Coastguard Worker #define TP_FLAG_MPEG4 1
323*e5436536SAndroid Build Coastguard Worker 
324*e5436536SAndroid Build Coastguard Worker /* Capability flags */
325*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_ADIF \
326*e5436536SAndroid Build Coastguard Worker   0x00001000 /**< Flag indicating support for ADIF transport format.        */
327*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_ADTS \
328*e5436536SAndroid Build Coastguard Worker   0x00002000 /**< Flag indicating support for ADTS transport format.        */
329*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_LOAS \
330*e5436536SAndroid Build Coastguard Worker   0x00004000 /**< Flag indicating support for LOAS transport format.        */
331*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_LATM \
332*e5436536SAndroid Build Coastguard Worker   0x00008000 /**< Flag indicating support for LATM transport format.        */
333*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_RAWPACKETS \
334*e5436536SAndroid Build Coastguard Worker   0x00010000 /**< Flag indicating support for raw packets transport format. */
335*e5436536SAndroid Build Coastguard Worker 
336*e5436536SAndroid Build Coastguard Worker typedef struct TRANSPORTDEC *HANDLE_TRANSPORTDEC;
337*e5436536SAndroid Build Coastguard Worker 
338*e5436536SAndroid Build Coastguard Worker /**
339*e5436536SAndroid Build Coastguard Worker  * \brief Configure Transport Decoder via a binary coded AudioSpecificConfig or
340*e5436536SAndroid Build Coastguard Worker  * StreamMuxConfig. The previously requested configuration callback will be
341*e5436536SAndroid Build Coastguard Worker  * called as well. The buffer conf must containt a SMC in case of
342*e5436536SAndroid Build Coastguard Worker  * LOAS/LATM transport format, and an ASC elseways.
343*e5436536SAndroid Build Coastguard Worker  *
344*e5436536SAndroid Build Coastguard Worker  * \param hTp     Handle of a transport decoder.
345*e5436536SAndroid Build Coastguard Worker  * \param conf    UCHAR buffer of the binary coded config (ASC or SMC).
346*e5436536SAndroid Build Coastguard Worker  * \param length  The length in bytes of the conf buffer.
347*e5436536SAndroid Build Coastguard Worker  *
348*e5436536SAndroid Build Coastguard Worker  * \return        Error code.
349*e5436536SAndroid Build Coastguard Worker  */
350*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_OutOfBandConfig(const HANDLE_TRANSPORTDEC hTp,
351*e5436536SAndroid Build Coastguard Worker                                                 UCHAR *conf, const UINT length,
352*e5436536SAndroid Build Coastguard Worker                                                 const UINT layer);
353*e5436536SAndroid Build Coastguard Worker 
354*e5436536SAndroid Build Coastguard Worker /**
355*e5436536SAndroid Build Coastguard Worker  * \brief Configure Transport Decoder via a binary coded USAC/RSV603DA Config.
356*e5436536SAndroid Build Coastguard Worker  *        The buffer newConfig contains a binary coded USAC/RSV603DA config of
357*e5436536SAndroid Build Coastguard Worker  * length newConfigLength bytes. If the new config and the previous config are
358*e5436536SAndroid Build Coastguard Worker  * different configChanged is set to 1 otherwise it is set to 0.
359*e5436536SAndroid Build Coastguard Worker  *
360*e5436536SAndroid Build Coastguard Worker  * \param hTp              Handle of a transport decoder.
361*e5436536SAndroid Build Coastguard Worker  * \param newConfig        buffer of the binary coded config.
362*e5436536SAndroid Build Coastguard Worker  * \param newConfigLength  Length of new config in bytes.
363*e5436536SAndroid Build Coastguard Worker  * \param buildUpStatus    Indicates build up status: off|on|idle.
364*e5436536SAndroid Build Coastguard Worker  * \param configChanged    Indicates if config changed.
365*e5436536SAndroid Build Coastguard Worker  * \param layer            Instance layer.
366*e5436536SAndroid Build Coastguard Worker  *
367*e5436536SAndroid Build Coastguard Worker  * \return        Error code.
368*e5436536SAndroid Build Coastguard Worker  */
369*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_InBandConfig(
370*e5436536SAndroid Build Coastguard Worker     const HANDLE_TRANSPORTDEC hTp, UCHAR *newConfig, const UINT newConfigLength,
371*e5436536SAndroid Build Coastguard Worker     const UCHAR buildUpStatus, UCHAR *configChanged, const UINT layer,
372*e5436536SAndroid Build Coastguard Worker     UCHAR *implicitExplicitCfgDiff);
373*e5436536SAndroid Build Coastguard Worker 
374*e5436536SAndroid Build Coastguard Worker /**
375*e5436536SAndroid Build Coastguard Worker  * \brief Open Transport medium for reading.
376*e5436536SAndroid Build Coastguard Worker  *
377*e5436536SAndroid Build Coastguard Worker  * \param transportDecFmt Format of the transport decoder medium to be accessed.
378*e5436536SAndroid Build Coastguard Worker  * \param flags           Transport decoder flags. Currently only TP_FLAG_MPEG4,
379*e5436536SAndroid Build Coastguard Worker  * which signals a MPEG4 capable decoder (relevant for ADTS only).
380*e5436536SAndroid Build Coastguard Worker  *
381*e5436536SAndroid Build Coastguard Worker  * \return   A pointer to a valid and allocated HANDLE_TRANSPORTDEC or a null
382*e5436536SAndroid Build Coastguard Worker  * pointer on failure.
383*e5436536SAndroid Build Coastguard Worker  */
384*e5436536SAndroid Build Coastguard Worker HANDLE_TRANSPORTDEC transportDec_Open(TRANSPORT_TYPE transportDecFmt,
385*e5436536SAndroid Build Coastguard Worker                                       const UINT flags, const UINT nrOfLayer);
386*e5436536SAndroid Build Coastguard Worker 
387*e5436536SAndroid Build Coastguard Worker /**
388*e5436536SAndroid Build Coastguard Worker  * \brief                Register configuration change callback.
389*e5436536SAndroid Build Coastguard Worker  * \param hTp            Handle of transport decoder.
390*e5436536SAndroid Build Coastguard Worker  * \param cbUpdateConfig Pointer to a callback function to handle audio config
391*e5436536SAndroid Build Coastguard Worker  * changes.
392*e5436536SAndroid Build Coastguard Worker  * \param user_data      void pointer for user data passed to the callback as
393*e5436536SAndroid Build Coastguard Worker  * first parameter.
394*e5436536SAndroid Build Coastguard Worker  * \return               0 on success.
395*e5436536SAndroid Build Coastguard Worker  */
396*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterAscCallback(HANDLE_TRANSPORTDEC hTp,
397*e5436536SAndroid Build Coastguard Worker                                      const cbUpdateConfig_t cbUpdateConfig,
398*e5436536SAndroid Build Coastguard Worker                                      void *user_data);
399*e5436536SAndroid Build Coastguard Worker 
400*e5436536SAndroid Build Coastguard Worker /**
401*e5436536SAndroid Build Coastguard Worker  * \brief                Register free memory callback.
402*e5436536SAndroid Build Coastguard Worker  * \param hTp            Handle of transport decoder.
403*e5436536SAndroid Build Coastguard Worker  * \param cbFreeMem      Pointer to a callback function to free config dependent
404*e5436536SAndroid Build Coastguard Worker  * memory.
405*e5436536SAndroid Build Coastguard Worker  * \param user_data      void pointer for user data passed to the callback as
406*e5436536SAndroid Build Coastguard Worker  * first parameter.
407*e5436536SAndroid Build Coastguard Worker  * \return               0 on success.
408*e5436536SAndroid Build Coastguard Worker  */
409*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterFreeMemCallback(HANDLE_TRANSPORTDEC hTp,
410*e5436536SAndroid Build Coastguard Worker                                          const cbFreeMem_t cbFreeMem,
411*e5436536SAndroid Build Coastguard Worker                                          void *user_data);
412*e5436536SAndroid Build Coastguard Worker 
413*e5436536SAndroid Build Coastguard Worker /**
414*e5436536SAndroid Build Coastguard Worker  * \brief                 Register config change control callback.
415*e5436536SAndroid Build Coastguard Worker  * \param hTp             Handle of transport decoder.
416*e5436536SAndroid Build Coastguard Worker  * \param cbCtrlCFGChange Pointer to a callback function for config change
417*e5436536SAndroid Build Coastguard Worker  * control.
418*e5436536SAndroid Build Coastguard Worker  * \param user_data       void pointer for user data passed to the callback as
419*e5436536SAndroid Build Coastguard Worker  * first parameter.
420*e5436536SAndroid Build Coastguard Worker  * \return                0 on success.
421*e5436536SAndroid Build Coastguard Worker  */
422*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterCtrlCFGChangeCallback(
423*e5436536SAndroid Build Coastguard Worker     HANDLE_TRANSPORTDEC hTp, const cbCtrlCFGChange_t cbCtrlCFGChange,
424*e5436536SAndroid Build Coastguard Worker     void *user_data);
425*e5436536SAndroid Build Coastguard Worker 
426*e5436536SAndroid Build Coastguard Worker /**
427*e5436536SAndroid Build Coastguard Worker  * \brief                Register SSC parser callback.
428*e5436536SAndroid Build Coastguard Worker  * \param hTp            Handle of transport decoder.
429*e5436536SAndroid Build Coastguard Worker  * \param cbUpdateConfig Pointer to a callback function to handle SSC parsing.
430*e5436536SAndroid Build Coastguard Worker  * \param user_data      void pointer for user data passed to the callback as
431*e5436536SAndroid Build Coastguard Worker  * first parameter.
432*e5436536SAndroid Build Coastguard Worker  * \return               0 on success.
433*e5436536SAndroid Build Coastguard Worker  */
434*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterSscCallback(HANDLE_TRANSPORTDEC hTp,
435*e5436536SAndroid Build Coastguard Worker                                      const cbSsc_t cbSscParse, void *user_data);
436*e5436536SAndroid Build Coastguard Worker 
437*e5436536SAndroid Build Coastguard Worker /**
438*e5436536SAndroid Build Coastguard Worker  * \brief                Register SBR header parser callback.
439*e5436536SAndroid Build Coastguard Worker  * \param hTp            Handle of transport decoder.
440*e5436536SAndroid Build Coastguard Worker  * \param cbUpdateConfig Pointer to a callback function to handle SBR header
441*e5436536SAndroid Build Coastguard Worker  * parsing.
442*e5436536SAndroid Build Coastguard Worker  * \param user_data      void pointer for user data passed to the callback as
443*e5436536SAndroid Build Coastguard Worker  * first parameter.
444*e5436536SAndroid Build Coastguard Worker  * \return               0 on success.
445*e5436536SAndroid Build Coastguard Worker  */
446*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterSbrCallback(HANDLE_TRANSPORTDEC hTpDec,
447*e5436536SAndroid Build Coastguard Worker                                      const cbSbr_t cbSbr, void *user_data);
448*e5436536SAndroid Build Coastguard Worker 
449*e5436536SAndroid Build Coastguard Worker /**
450*e5436536SAndroid Build Coastguard Worker  * \brief                Register USAC SC parser callback.
451*e5436536SAndroid Build Coastguard Worker  * \param hTp            Handle of transport decoder.
452*e5436536SAndroid Build Coastguard Worker  * \param cbUpdateConfig Pointer to a callback function to handle USAC SC
453*e5436536SAndroid Build Coastguard Worker  * parsing.
454*e5436536SAndroid Build Coastguard Worker  * \param user_data      void pointer for user data passed to the callback as
455*e5436536SAndroid Build Coastguard Worker  * first parameter.
456*e5436536SAndroid Build Coastguard Worker  * \return               0 on success.
457*e5436536SAndroid Build Coastguard Worker  */
458*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterUsacCallback(HANDLE_TRANSPORTDEC hTpDec,
459*e5436536SAndroid Build Coastguard Worker                                       const cbUsac_t cbUsac, void *user_data);
460*e5436536SAndroid Build Coastguard Worker 
461*e5436536SAndroid Build Coastguard Worker /**
462*e5436536SAndroid Build Coastguard Worker  * \brief                Register uniDrcConfig and loudnessInfoSet parser
463*e5436536SAndroid Build Coastguard Worker  * callback.
464*e5436536SAndroid Build Coastguard Worker  * \param hTp            Handle of transport decoder.
465*e5436536SAndroid Build Coastguard Worker  * \param cbUpdateConfig Pointer to a callback function to handle uniDrcConfig
466*e5436536SAndroid Build Coastguard Worker  * and loudnessInfoSet parsing.
467*e5436536SAndroid Build Coastguard Worker  * \param user_data      void pointer for user data passed to the callback as
468*e5436536SAndroid Build Coastguard Worker  * first parameter.
469*e5436536SAndroid Build Coastguard Worker  * \return               0 on success.
470*e5436536SAndroid Build Coastguard Worker  */
471*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterUniDrcConfigCallback(HANDLE_TRANSPORTDEC hTpDec,
472*e5436536SAndroid Build Coastguard Worker                                               const cbUniDrc_t cbUniDrc,
473*e5436536SAndroid Build Coastguard Worker                                               void *user_data,
474*e5436536SAndroid Build Coastguard Worker                                               UINT *pLoudnessInfoSetPosition);
475*e5436536SAndroid Build Coastguard Worker 
476*e5436536SAndroid Build Coastguard Worker /**
477*e5436536SAndroid Build Coastguard Worker  * \brief Fill internal input buffer with bitstream data from the external input
478*e5436536SAndroid Build Coastguard Worker  * buffer. The function only copies such data as long as the decoder-internal
479*e5436536SAndroid Build Coastguard Worker  * input buffer is not full. So it grabs whatever it can from pBuffer and
480*e5436536SAndroid Build Coastguard Worker  * returns information (bytesValid) so that at a subsequent call of
481*e5436536SAndroid Build Coastguard Worker  * %transportDec_FillData(), the right position in pBuffer can be determined to
482*e5436536SAndroid Build Coastguard Worker  *  grab the next data.
483*e5436536SAndroid Build Coastguard Worker  *
484*e5436536SAndroid Build Coastguard Worker  * \param hTp         Handle of transportDec.
485*e5436536SAndroid Build Coastguard Worker  * \param pBuffer     Pointer to external input buffer.
486*e5436536SAndroid Build Coastguard Worker  * \param bufferSize  Size of external input buffer. This argument is required
487*e5436536SAndroid Build Coastguard Worker  * because decoder-internally we need the information to calculate the offset to
488*e5436536SAndroid Build Coastguard Worker  * pBuffer, where the next available data is, which is then
489*e5436536SAndroid Build Coastguard Worker  * fed into the decoder-internal buffer (as much as
490*e5436536SAndroid Build Coastguard Worker  * possible). Our example framework implementation fills the
491*e5436536SAndroid Build Coastguard Worker  * buffer at pBuffer again, once it contains no available valid bytes anymore
492*e5436536SAndroid Build Coastguard Worker  * (meaning bytesValid equal 0).
493*e5436536SAndroid Build Coastguard Worker  * \param bytesValid  Number of bitstream bytes in the external bitstream buffer
494*e5436536SAndroid Build Coastguard Worker  * that have not yet been copied into the decoder's internal bitstream buffer by
495*e5436536SAndroid Build Coastguard Worker  * calling this function. The value is updated according to
496*e5436536SAndroid Build Coastguard Worker  * the amount of newly copied bytes.
497*e5436536SAndroid Build Coastguard Worker  * \param layer       The layer the bitstream belongs to.
498*e5436536SAndroid Build Coastguard Worker  * \return            Error code.
499*e5436536SAndroid Build Coastguard Worker  */
500*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_FillData(const HANDLE_TRANSPORTDEC hTp,
501*e5436536SAndroid Build Coastguard Worker                                          UCHAR *pBuffer, const UINT bufferSize,
502*e5436536SAndroid Build Coastguard Worker                                          UINT *pBytesValid, const INT layer);
503*e5436536SAndroid Build Coastguard Worker 
504*e5436536SAndroid Build Coastguard Worker /**
505*e5436536SAndroid Build Coastguard Worker  * \brief      Get transportDec bitstream handle.
506*e5436536SAndroid Build Coastguard Worker  * \param hTp  Pointer to a transport decoder handle.
507*e5436536SAndroid Build Coastguard Worker  * \return     HANDLE_FDK_BITSTREAM bitstream handle.
508*e5436536SAndroid Build Coastguard Worker  */
509*e5436536SAndroid Build Coastguard Worker HANDLE_FDK_BITSTREAM transportDec_GetBitstream(const HANDLE_TRANSPORTDEC hTp,
510*e5436536SAndroid Build Coastguard Worker                                                const UINT layer);
511*e5436536SAndroid Build Coastguard Worker 
512*e5436536SAndroid Build Coastguard Worker /**
513*e5436536SAndroid Build Coastguard Worker  * \brief      Get transport format.
514*e5436536SAndroid Build Coastguard Worker  * \param hTp  Pointer to a transport decoder handle.
515*e5436536SAndroid Build Coastguard Worker  * \return     The transport format.
516*e5436536SAndroid Build Coastguard Worker  */
517*e5436536SAndroid Build Coastguard Worker TRANSPORT_TYPE transportDec_GetFormat(const HANDLE_TRANSPORTDEC hTp);
518*e5436536SAndroid Build Coastguard Worker 
519*e5436536SAndroid Build Coastguard Worker /**
520*e5436536SAndroid Build Coastguard Worker  * \brief Get the current buffer fullness value.
521*e5436536SAndroid Build Coastguard Worker  *
522*e5436536SAndroid Build Coastguard Worker  * \param hTp     Handle of a transport decoder.
523*e5436536SAndroid Build Coastguard Worker  *
524*e5436536SAndroid Build Coastguard Worker  * \return        Buffer fullness
525*e5436536SAndroid Build Coastguard Worker  */
526*e5436536SAndroid Build Coastguard Worker INT transportDec_GetBufferFullness(const HANDLE_TRANSPORTDEC hTp);
527*e5436536SAndroid Build Coastguard Worker 
528*e5436536SAndroid Build Coastguard Worker /**
529*e5436536SAndroid Build Coastguard Worker  * \brief       Close and deallocate transportDec.
530*e5436536SAndroid Build Coastguard Worker  * \param phTp  Pointer to a previously allocated transport decoder handle.
531*e5436536SAndroid Build Coastguard Worker  * \return      void
532*e5436536SAndroid Build Coastguard Worker  */
533*e5436536SAndroid Build Coastguard Worker void transportDec_Close(HANDLE_TRANSPORTDEC *phTp);
534*e5436536SAndroid Build Coastguard Worker 
535*e5436536SAndroid Build Coastguard Worker /**
536*e5436536SAndroid Build Coastguard Worker  * \brief         Read one access unit from the transportDec medium.
537*e5436536SAndroid Build Coastguard Worker  * \param hTp     Handle of transportDec.
538*e5436536SAndroid Build Coastguard Worker  * \param length  On return, this value is overwritten with the actual access
539*e5436536SAndroid Build Coastguard Worker  * unit length in bits. Set to -1 if length is unknown.
540*e5436536SAndroid Build Coastguard Worker  * \return        Error code.
541*e5436536SAndroid Build Coastguard Worker  */
542*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_ReadAccessUnit(const HANDLE_TRANSPORTDEC hTp,
543*e5436536SAndroid Build Coastguard Worker                                                const UINT layer);
544*e5436536SAndroid Build Coastguard Worker 
545*e5436536SAndroid Build Coastguard Worker /**
546*e5436536SAndroid Build Coastguard Worker  * \brief          Get AudioSpecificConfig.
547*e5436536SAndroid Build Coastguard Worker  * \param hTp      Handle of transportDec.
548*e5436536SAndroid Build Coastguard Worker  * \param layer    Transport layer.
549*e5436536SAndroid Build Coastguard Worker  * \param asc      Pointer to AudioSpecificConfig.
550*e5436536SAndroid Build Coastguard Worker  * \return         Error code.
551*e5436536SAndroid Build Coastguard Worker  */
552*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_GetAsc(const HANDLE_TRANSPORTDEC hTp,
553*e5436536SAndroid Build Coastguard Worker                                        const UINT layer,
554*e5436536SAndroid Build Coastguard Worker                                        CSAudioSpecificConfig *asc);
555*e5436536SAndroid Build Coastguard Worker 
556*e5436536SAndroid Build Coastguard Worker /**
557*e5436536SAndroid Build Coastguard Worker  * \brief Get the remaining amount of bits of the current access unit. The
558*e5436536SAndroid Build Coastguard Worker  * result can be below zero, meaning that too many bits have been read.
559*e5436536SAndroid Build Coastguard Worker  * \param hTp     Handle of transportDec.
560*e5436536SAndroid Build Coastguard Worker  * \return amount of remaining bits.
561*e5436536SAndroid Build Coastguard Worker  */
562*e5436536SAndroid Build Coastguard Worker INT transportDec_GetAuBitsRemaining(const HANDLE_TRANSPORTDEC hTp,
563*e5436536SAndroid Build Coastguard Worker                                     const UINT layer);
564*e5436536SAndroid Build Coastguard Worker 
565*e5436536SAndroid Build Coastguard Worker /**
566*e5436536SAndroid Build Coastguard Worker  * \brief Get the total amount of bits of the current access unit.
567*e5436536SAndroid Build Coastguard Worker  * \param hTp     Handle of transportDec.
568*e5436536SAndroid Build Coastguard Worker  * \return amount of total bits.
569*e5436536SAndroid Build Coastguard Worker  */
570*e5436536SAndroid Build Coastguard Worker INT transportDec_GetAuBitsTotal(const HANDLE_TRANSPORTDEC hTp,
571*e5436536SAndroid Build Coastguard Worker                                 const UINT layer);
572*e5436536SAndroid Build Coastguard Worker 
573*e5436536SAndroid Build Coastguard Worker /**
574*e5436536SAndroid Build Coastguard Worker  * \brief      This function is required to be called when the decoder has
575*e5436536SAndroid Build Coastguard Worker  * finished parsing one Access Unit for bitstream housekeeping.
576*e5436536SAndroid Build Coastguard Worker  * \param hTp  Transport Handle.
577*e5436536SAndroid Build Coastguard Worker  * \return     Error code.
578*e5436536SAndroid Build Coastguard Worker  */
579*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_EndAccessUnit(const HANDLE_TRANSPORTDEC hTp);
580*e5436536SAndroid Build Coastguard Worker 
581*e5436536SAndroid Build Coastguard Worker /**
582*e5436536SAndroid Build Coastguard Worker  * \brief      Obtain the amount of missing access units if applicable in case
583*e5436536SAndroid Build Coastguard Worker  * of a bit stream synchronization error. Each time
584*e5436536SAndroid Build Coastguard Worker  * transportDec_ReadAccessUnit() returns TRANSPORTDEC_SYNC_ERROR
585*e5436536SAndroid Build Coastguard Worker  * this function can be called to retrieve an estimate of the amount
586*e5436536SAndroid Build Coastguard Worker  * of missing access units. This works only in case of constant
587*e5436536SAndroid Build Coastguard Worker  * average bit rate (has to be known) and if the parameter
588*e5436536SAndroid Build Coastguard Worker  * TPDEC_PARAM_SET_BITRATE has been set accordingly.
589*e5436536SAndroid Build Coastguard Worker  * \param hTp  Transport Handle.
590*e5436536SAndroid Build Coastguard Worker  * \param pNAccessUnits pointer to a memory location where the estimated lost
591*e5436536SAndroid Build Coastguard Worker  * frame count will be stored into.
592*e5436536SAndroid Build Coastguard Worker  * \return     Error code.
593*e5436536SAndroid Build Coastguard Worker  */
594*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_GetMissingAccessUnitCount(
595*e5436536SAndroid Build Coastguard Worker     INT *pNAccessUnits, HANDLE_TRANSPORTDEC hTp);
596*e5436536SAndroid Build Coastguard Worker 
597*e5436536SAndroid Build Coastguard Worker /**
598*e5436536SAndroid Build Coastguard Worker  * \brief        Set a given setting.
599*e5436536SAndroid Build Coastguard Worker  * \param hTp    Transport Handle.
600*e5436536SAndroid Build Coastguard Worker  * \param param  Identifier of the parameter to be changed.
601*e5436536SAndroid Build Coastguard Worker  * \param value  Value for the parameter to be changed.
602*e5436536SAndroid Build Coastguard Worker  * \return       Error code.
603*e5436536SAndroid Build Coastguard Worker  */
604*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_SetParam(const HANDLE_TRANSPORTDEC hTp,
605*e5436536SAndroid Build Coastguard Worker                                          const TPDEC_PARAM param,
606*e5436536SAndroid Build Coastguard Worker                                          const INT value);
607*e5436536SAndroid Build Coastguard Worker 
608*e5436536SAndroid Build Coastguard Worker /**
609*e5436536SAndroid Build Coastguard Worker  * \brief        Get number of subframes (for LATM or ADTS)
610*e5436536SAndroid Build Coastguard Worker  * \param hTp    Transport Handle.
611*e5436536SAndroid Build Coastguard Worker  * \return       Number of ADTS/LATM subframes (return 1 for all other transport
612*e5436536SAndroid Build Coastguard Worker  * types).
613*e5436536SAndroid Build Coastguard Worker  */
614*e5436536SAndroid Build Coastguard Worker UINT transportDec_GetNrOfSubFrames(HANDLE_TRANSPORTDEC hTp);
615*e5436536SAndroid Build Coastguard Worker 
616*e5436536SAndroid Build Coastguard Worker /**
617*e5436536SAndroid Build Coastguard Worker  * \brief       Get info structure of transport decoder library.
618*e5436536SAndroid Build Coastguard Worker  * \param info  A pointer to an allocated LIB_INFO struct.
619*e5436536SAndroid Build Coastguard Worker  * \return      Error code.
620*e5436536SAndroid Build Coastguard Worker  */
621*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_GetLibInfo(LIB_INFO *info);
622*e5436536SAndroid Build Coastguard Worker 
623*e5436536SAndroid Build Coastguard Worker /* ADTS CRC support */
624*e5436536SAndroid Build Coastguard Worker 
625*e5436536SAndroid Build Coastguard Worker /**
626*e5436536SAndroid Build Coastguard Worker  * \brief        Set current bitstream position as start of a new data region.
627*e5436536SAndroid Build Coastguard Worker  * \param hTp    Transport handle.
628*e5436536SAndroid Build Coastguard Worker  * \param mBits  Size in bits of the data region. Set to 0 if it should not be
629*e5436536SAndroid Build Coastguard Worker  * of a fixed size.
630*e5436536SAndroid Build Coastguard Worker  * \return       Data region ID, which should be used when calling
631*e5436536SAndroid Build Coastguard Worker  * transportDec_CrcEndReg().
632*e5436536SAndroid Build Coastguard Worker  */
633*e5436536SAndroid Build Coastguard Worker int transportDec_CrcStartReg(const HANDLE_TRANSPORTDEC hTp, const INT mBits);
634*e5436536SAndroid Build Coastguard Worker 
635*e5436536SAndroid Build Coastguard Worker /**
636*e5436536SAndroid Build Coastguard Worker  * \brief        Set end of data region.
637*e5436536SAndroid Build Coastguard Worker  * \param hTp    Transport handle.
638*e5436536SAndroid Build Coastguard Worker  * \param reg    Data region ID, opbtained from transportDec_CrcStartReg().
639*e5436536SAndroid Build Coastguard Worker  * \return       void
640*e5436536SAndroid Build Coastguard Worker  */
641*e5436536SAndroid Build Coastguard Worker void transportDec_CrcEndReg(const HANDLE_TRANSPORTDEC hTp, const INT reg);
642*e5436536SAndroid Build Coastguard Worker 
643*e5436536SAndroid Build Coastguard Worker /**
644*e5436536SAndroid Build Coastguard Worker  * \brief      Calculate ADTS crc and check if it is correct. The ADTS checksum
645*e5436536SAndroid Build Coastguard Worker  * is held internally.
646*e5436536SAndroid Build Coastguard Worker  * \param hTp  Transport handle.
647*e5436536SAndroid Build Coastguard Worker  * \return     Return TRANSPORTDEC_OK if the CRC is ok, or error if CRC is not
648*e5436536SAndroid Build Coastguard Worker  * correct.
649*e5436536SAndroid Build Coastguard Worker  */
650*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_CrcCheck(const HANDLE_TRANSPORTDEC hTp);
651*e5436536SAndroid Build Coastguard Worker 
652*e5436536SAndroid Build Coastguard Worker /**
653*e5436536SAndroid Build Coastguard Worker  * \brief Only check whether a given config seems to be valid without modifying
654*e5436536SAndroid Build Coastguard Worker  * internal states.
655*e5436536SAndroid Build Coastguard Worker  *
656*e5436536SAndroid Build Coastguard Worker  * \param conf    UCHAR buffer of the binary coded config (SDC type 9).
657*e5436536SAndroid Build Coastguard Worker  * \param length  The length in bytes of the conf buffer.
658*e5436536SAndroid Build Coastguard Worker  *
659*e5436536SAndroid Build Coastguard Worker  * \return        Error code.
660*e5436536SAndroid Build Coastguard Worker  */
661*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_DrmRawSdcAudioConfig_Check(UCHAR *conf,
662*e5436536SAndroid Build Coastguard Worker                                                            const UINT length);
663*e5436536SAndroid Build Coastguard Worker 
664*e5436536SAndroid Build Coastguard Worker #endif /* #ifndef TPDEC_LIB_H */
665