xref: /aosp_15_r20/external/aac/libSBRdec/include/sbrdecoder.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 /**************************** SBR decoder library ******************************
96*e5436536SAndroid Build Coastguard Worker 
97*e5436536SAndroid Build Coastguard Worker    Author(s):
98*e5436536SAndroid Build Coastguard Worker 
99*e5436536SAndroid Build Coastguard Worker    Description: SBR decoder front-end prototypes and definitions.
100*e5436536SAndroid Build Coastguard Worker 
101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
102*e5436536SAndroid Build Coastguard Worker 
103*e5436536SAndroid Build Coastguard Worker #ifndef SBRDECODER_H
104*e5436536SAndroid Build Coastguard Worker #define SBRDECODER_H
105*e5436536SAndroid Build Coastguard Worker 
106*e5436536SAndroid Build Coastguard Worker #include "common_fix.h"
107*e5436536SAndroid Build Coastguard Worker 
108*e5436536SAndroid Build Coastguard Worker #include "FDK_bitstream.h"
109*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h"
110*e5436536SAndroid Build Coastguard Worker 
111*e5436536SAndroid Build Coastguard Worker #include "FDK_qmf_domain.h"
112*e5436536SAndroid Build Coastguard Worker 
113*e5436536SAndroid Build Coastguard Worker #define SBR_DEBUG_EXTHLP \
114*e5436536SAndroid Build Coastguard Worker   "\
115*e5436536SAndroid Build Coastguard Worker --- SBR ---\n\
116*e5436536SAndroid Build Coastguard Worker     0x00000010 Ancillary data and SBR-Header\n\
117*e5436536SAndroid Build Coastguard Worker     0x00000020 SBR-Side info\n\
118*e5436536SAndroid Build Coastguard Worker     0x00000040 Decoded SBR-bitstream data, e.g. envelope data\n\
119*e5436536SAndroid Build Coastguard Worker     0x00000080 SBR-Bitstream statistics\n\
120*e5436536SAndroid Build Coastguard Worker     0x00000100 Miscellaneous SBR-messages\n\
121*e5436536SAndroid Build Coastguard Worker     0x00000200 SBR-Energies and gains in the adjustor\n\
122*e5436536SAndroid Build Coastguard Worker     0x00000400 Fatal SBR errors\n\
123*e5436536SAndroid Build Coastguard Worker     0x00000800 Transposer coefficients for inverse filtering\n\
124*e5436536SAndroid Build Coastguard Worker "
125*e5436536SAndroid Build Coastguard Worker 
126*e5436536SAndroid Build Coastguard Worker /* Capability flags */
127*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_LP \
128*e5436536SAndroid Build Coastguard Worker   0x00000001 /*!< Flag indicating library's capability of Low Power mode. */
129*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_HQ                                                          \
130*e5436536SAndroid Build Coastguard Worker   0x00000002 /*!< Flag indicating library's capability of High Quality mode. \
131*e5436536SAndroid Build Coastguard Worker               */
132*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_DRM_BS                                                        \
133*e5436536SAndroid Build Coastguard Worker   0x00000004 /*!< Flag indicating library's capability to decode DRM SBR data. \
134*e5436536SAndroid Build Coastguard Worker               */
135*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_CONCEALMENT                                                \
136*e5436536SAndroid Build Coastguard Worker   0x00000008 /*!< Flag indicating library's capability to conceal erroneous \
137*e5436536SAndroid Build Coastguard Worker                 frames.          */
138*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_DRC                                                     \
139*e5436536SAndroid Build Coastguard Worker   0x00000010 /*!< Flag indicating library's capability for Dynamic Range \
140*e5436536SAndroid Build Coastguard Worker                 Control.            */
141*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_PS_MPEG                                                     \
142*e5436536SAndroid Build Coastguard Worker   0x00000020 /*!< Flag indicating library's capability to do MPEG Parametric \
143*e5436536SAndroid Build Coastguard Worker                 Stereo.         */
144*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_PS_DRM                                                     \
145*e5436536SAndroid Build Coastguard Worker   0x00000040 /*!< Flag indicating library's capability to do DRM Parametric \
146*e5436536SAndroid Build Coastguard Worker                 Stereo.          */
147*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_ELD_DOWNSCALE                                               \
148*e5436536SAndroid Build Coastguard Worker   0x00000080 /*!< Flag indicating library's capability to do ELD decoding in \
149*e5436536SAndroid Build Coastguard Worker                 downscaled mode */
150*e5436536SAndroid Build Coastguard Worker #define CAPF_SBR_HBEHQ                                                   \
151*e5436536SAndroid Build Coastguard Worker   0x00000100 /*!< Flag indicating library's capability to do HQ Harmonic \
152*e5436536SAndroid Build Coastguard Worker                 transposing         */
153*e5436536SAndroid Build Coastguard Worker 
154*e5436536SAndroid Build Coastguard Worker typedef enum {
155*e5436536SAndroid Build Coastguard Worker   SBRDEC_OK = 0, /*!< All fine. */
156*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_CONCEAL, */
157*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_NOSYNCH, */
158*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_ILLEGAL_PROGRAM, */
159*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_ILLEGAL_TAG, */
160*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_ILLEGAL_CHN_CONFIG, */
161*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_ILLEGAL_SECTION, */
162*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_ILLEGAL_SCFACTORS, */
163*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_ILLEGAL_PULSE_DATA, */
164*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_MAIN_PROFILE_NOT_IMPLEMENTED, */
165*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_GC_NOT_IMPLEMENTED, */
166*e5436536SAndroid Build Coastguard Worker   /* SBRDEC_ILLEGAL_PLUS_ELE_ID, */
167*e5436536SAndroid Build Coastguard Worker   SBRDEC_INVALID_ARGUMENT,   /*!<   */
168*e5436536SAndroid Build Coastguard Worker   SBRDEC_CREATE_ERROR,       /*!<       */
169*e5436536SAndroid Build Coastguard Worker   SBRDEC_NOT_INITIALIZED,    /*!<    */
170*e5436536SAndroid Build Coastguard Worker   SBRDEC_MEM_ALLOC_FAILED,   /*!< Memory allocation failed. Probably not enough
171*e5436536SAndroid Build Coastguard Worker                                 memory available. */
172*e5436536SAndroid Build Coastguard Worker   SBRDEC_PARSE_ERROR,        /*!<        */
173*e5436536SAndroid Build Coastguard Worker   SBRDEC_UNSUPPORTED_CONFIG, /*!< */
174*e5436536SAndroid Build Coastguard Worker   SBRDEC_SET_PARAM_FAIL,     /*!<     */
175*e5436536SAndroid Build Coastguard Worker   SBRDEC_OUTPUT_BUFFER_TOO_SMALL /*!< */
176*e5436536SAndroid Build Coastguard Worker } SBR_ERROR;
177*e5436536SAndroid Build Coastguard Worker 
178*e5436536SAndroid Build Coastguard Worker typedef enum {
179*e5436536SAndroid Build Coastguard Worker   SBR_SYSTEM_BITSTREAM_DELAY, /*!< System: Switch to enable an additional SBR
180*e5436536SAndroid Build Coastguard Worker                                  bitstream delay of one frame. */
181*e5436536SAndroid Build Coastguard Worker   SBR_QMF_MODE,               /*!< Set QMF mode, either complex or low power. */
182*e5436536SAndroid Build Coastguard Worker   SBR_LD_QMF_TIME_ALIGN, /*!< Set QMF type, either LD-MPS or CLDFB. Relevant for
183*e5436536SAndroid Build Coastguard Worker                             ELD streams only. */
184*e5436536SAndroid Build Coastguard Worker   SBR_FLUSH_DATA,     /*!< Set internal state to flush the decoder with the next
185*e5436536SAndroid Build Coastguard Worker                          process call. */
186*e5436536SAndroid Build Coastguard Worker   SBR_CLEAR_HISTORY,  /*!< Clear all internal states (delay lines, QMF states,
187*e5436536SAndroid Build Coastguard Worker                          ...). */
188*e5436536SAndroid Build Coastguard Worker   SBR_BS_INTERRUPTION /*!< Signal bit stream interruption. Value is ignored. */
189*e5436536SAndroid Build Coastguard Worker   ,
190*e5436536SAndroid Build Coastguard Worker   SBR_SKIP_QMF /*!< Enable skipping of QMF step: 1 skip analysis, 2 skip
191*e5436536SAndroid Build Coastguard Worker                   synthesis */
192*e5436536SAndroid Build Coastguard Worker } SBRDEC_PARAM;
193*e5436536SAndroid Build Coastguard Worker 
194*e5436536SAndroid Build Coastguard Worker typedef struct SBR_DECODER_INSTANCE *HANDLE_SBRDECODER;
195*e5436536SAndroid Build Coastguard Worker 
196*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
197*e5436536SAndroid Build Coastguard Worker extern "C" {
198*e5436536SAndroid Build Coastguard Worker #endif
199*e5436536SAndroid Build Coastguard Worker 
200*e5436536SAndroid Build Coastguard Worker /**
201*e5436536SAndroid Build Coastguard Worker  * \brief             Allocates and initializes one SBR decoder instance.
202*e5436536SAndroid Build Coastguard Worker  * \param pSelf       Pointer to where a SBR decoder handle is copied into.
203*e5436536SAndroid Build Coastguard Worker  * \param pQmfDomain  Pointer to QMF domain data structure.
204*e5436536SAndroid Build Coastguard Worker  *
205*e5436536SAndroid Build Coastguard Worker  * \return            Error code.
206*e5436536SAndroid Build Coastguard Worker  */
207*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_Open(HANDLE_SBRDECODER *pSelf,
208*e5436536SAndroid Build Coastguard Worker                           HANDLE_FDK_QMF_DOMAIN pQmfDomain);
209*e5436536SAndroid Build Coastguard Worker 
210*e5436536SAndroid Build Coastguard Worker /**
211*e5436536SAndroid Build Coastguard Worker  * \brief  Initialize a SBR decoder runtime instance. Must be called before
212*e5436536SAndroid Build Coastguard Worker  * decoding starts.
213*e5436536SAndroid Build Coastguard Worker  *
214*e5436536SAndroid Build Coastguard Worker  * \param self             Handle to a SBR decoder instance.
215*e5436536SAndroid Build Coastguard Worker  * \param sampleRateIn     Input samplerate of the SBR decoder instance.
216*e5436536SAndroid Build Coastguard Worker  * \param sampleRateOut    Output samplerate of the SBR decoder instance.
217*e5436536SAndroid Build Coastguard Worker  * \param samplesPerFrame  Number of samples per frames.
218*e5436536SAndroid Build Coastguard Worker  * \param coreCodec        Audio Object Type (AOT) of the core codec.
219*e5436536SAndroid Build Coastguard Worker  * \param elementID        Table with MPEG-4 element Ids in canonical order.
220*e5436536SAndroid Build Coastguard Worker  * \param elementIndex     SBR element index
221*e5436536SAndroid Build Coastguard Worker  * \param harmonicSBR
222*e5436536SAndroid Build Coastguard Worker  * \param stereoConfigIndex
223*e5436536SAndroid Build Coastguard Worker  * \param downscaleFactor  ELD downscale factor
224*e5436536SAndroid Build Coastguard Worker  * \param configMode       Table with MPEG-4 element Ids in canonical order.
225*e5436536SAndroid Build Coastguard Worker  * \param configChanged    Flag that enforces a complete decoder reset.
226*e5436536SAndroid Build Coastguard Worker  *
227*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
228*e5436536SAndroid Build Coastguard Worker  */
229*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_InitElement(
230*e5436536SAndroid Build Coastguard Worker     HANDLE_SBRDECODER self, const int sampleRateIn, const int sampleRateOut,
231*e5436536SAndroid Build Coastguard Worker     const int samplesPerFrame, const AUDIO_OBJECT_TYPE coreCodec,
232*e5436536SAndroid Build Coastguard Worker     const MP4_ELEMENT_ID elementID, const int elementIndex,
233*e5436536SAndroid Build Coastguard Worker     const UCHAR harmonicSBR, const UCHAR stereoConfigIndex,
234*e5436536SAndroid Build Coastguard Worker     const UCHAR configMode, UCHAR *configChanged, const INT downscaleFactor);
235*e5436536SAndroid Build Coastguard Worker 
236*e5436536SAndroid Build Coastguard Worker /**
237*e5436536SAndroid Build Coastguard Worker  * \brief Free config dependent SBR memory.
238*e5436536SAndroid Build Coastguard Worker  * \param self SBR decoder instance handle
239*e5436536SAndroid Build Coastguard Worker  */
240*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_FreeMem(HANDLE_SBRDECODER *self);
241*e5436536SAndroid Build Coastguard Worker 
242*e5436536SAndroid Build Coastguard Worker /**
243*e5436536SAndroid Build Coastguard Worker  * \brief pass out of band SBR header to SBR decoder
244*e5436536SAndroid Build Coastguard Worker  *
245*e5436536SAndroid Build Coastguard Worker  * \param self         Handle to a SBR decoder instance.
246*e5436536SAndroid Build Coastguard Worker  * \param hBs          bit stream handle data source.
247*e5436536SAndroid Build Coastguard Worker  * \param sampleRateIn SBR input sampling rate
248*e5436536SAndroid Build Coastguard Worker  * \param sampleRateOut SBR output sampling rate
249*e5436536SAndroid Build Coastguard Worker  * \param samplesPerFrame frame length
250*e5436536SAndroid Build Coastguard Worker  * \param elementID    SBR element ID.
251*e5436536SAndroid Build Coastguard Worker  * \param elementIndex SBR element index.
252*e5436536SAndroid Build Coastguard Worker  * \param harmonicSBR
253*e5436536SAndroid Build Coastguard Worker  * \param stereoConfigIndex
254*e5436536SAndroid Build Coastguard Worker  * \param downscaleFactor  ELD downscale factor
255*e5436536SAndroid Build Coastguard Worker  *
256*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
257*e5436536SAndroid Build Coastguard Worker  */
258*e5436536SAndroid Build Coastguard Worker INT sbrDecoder_Header(HANDLE_SBRDECODER self, HANDLE_FDK_BITSTREAM hBs,
259*e5436536SAndroid Build Coastguard Worker                       const INT sampleRateIn, const INT sampleRateOut,
260*e5436536SAndroid Build Coastguard Worker                       const INT samplesPerFrame,
261*e5436536SAndroid Build Coastguard Worker                       const AUDIO_OBJECT_TYPE coreCodec,
262*e5436536SAndroid Build Coastguard Worker                       const MP4_ELEMENT_ID elementID, const INT elementIndex,
263*e5436536SAndroid Build Coastguard Worker                       const UCHAR harmonicSBR, const UCHAR stereoConfigIndex,
264*e5436536SAndroid Build Coastguard Worker                       const UCHAR configMode, UCHAR *configChanged,
265*e5436536SAndroid Build Coastguard Worker                       const INT downscaleFactor);
266*e5436536SAndroid Build Coastguard Worker 
267*e5436536SAndroid Build Coastguard Worker /**
268*e5436536SAndroid Build Coastguard Worker  * \brief        Set a parameter of the SBR decoder runtime instance.
269*e5436536SAndroid Build Coastguard Worker  * \param self   SBR decoder handle.
270*e5436536SAndroid Build Coastguard Worker  * \param param  Parameter which will be set if successfull.
271*e5436536SAndroid Build Coastguard Worker  * \param value  New parameter value.
272*e5436536SAndroid Build Coastguard Worker  * \return       Error code.
273*e5436536SAndroid Build Coastguard Worker  */
274*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_SetParam(HANDLE_SBRDECODER self, const SBRDEC_PARAM param,
275*e5436536SAndroid Build Coastguard Worker                               const INT value);
276*e5436536SAndroid Build Coastguard Worker 
277*e5436536SAndroid Build Coastguard Worker /**
278*e5436536SAndroid Build Coastguard Worker  * \brief  Feed DRC channel data into a SBR decoder runtime instance.
279*e5436536SAndroid Build Coastguard Worker  *
280*e5436536SAndroid Build Coastguard Worker  * \param self                    SBR decoder handle.
281*e5436536SAndroid Build Coastguard Worker  * \param ch                      Channel number to which the DRC data is
282*e5436536SAndroid Build Coastguard Worker  * associated to.
283*e5436536SAndroid Build Coastguard Worker  * \param numBands                Number of DRC bands.
284*e5436536SAndroid Build Coastguard Worker  * \param pNextFact_mag           Pointer to a table with the DRC factor
285*e5436536SAndroid Build Coastguard Worker  * magnitudes.
286*e5436536SAndroid Build Coastguard Worker  * \param nextFact_exp            Exponent for all DRC factors.
287*e5436536SAndroid Build Coastguard Worker  * \param drcInterpolationScheme  DRC interpolation scheme.
288*e5436536SAndroid Build Coastguard Worker  * \param winSequence             Window sequence from core coder (eight short
289*e5436536SAndroid Build Coastguard Worker  * or one long window).
290*e5436536SAndroid Build Coastguard Worker  * \param pBandTop                Pointer to a table with the top borders for
291*e5436536SAndroid Build Coastguard Worker  * all DRC bands.
292*e5436536SAndroid Build Coastguard Worker  *
293*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
294*e5436536SAndroid Build Coastguard Worker  */
295*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_drcFeedChannel(HANDLE_SBRDECODER self, INT ch,
296*e5436536SAndroid Build Coastguard Worker                                     UINT numBands, FIXP_DBL *pNextFact_mag,
297*e5436536SAndroid Build Coastguard Worker                                     INT nextFact_exp,
298*e5436536SAndroid Build Coastguard Worker                                     SHORT drcInterpolationScheme,
299*e5436536SAndroid Build Coastguard Worker                                     UCHAR winSequence, USHORT *pBandTop);
300*e5436536SAndroid Build Coastguard Worker 
301*e5436536SAndroid Build Coastguard Worker /**
302*e5436536SAndroid Build Coastguard Worker  * \brief  Disable SBR DRC for a certain channel.
303*e5436536SAndroid Build Coastguard Worker  *
304*e5436536SAndroid Build Coastguard Worker  * \param hSbrDecoder  SBR decoder handle.
305*e5436536SAndroid Build Coastguard Worker  * \param ch           Number of the channel that has to be disabled.
306*e5436536SAndroid Build Coastguard Worker  *
307*e5436536SAndroid Build Coastguard Worker  * \return  None.
308*e5436536SAndroid Build Coastguard Worker  */
309*e5436536SAndroid Build Coastguard Worker void sbrDecoder_drcDisable(HANDLE_SBRDECODER self, INT ch);
310*e5436536SAndroid Build Coastguard Worker 
311*e5436536SAndroid Build Coastguard Worker /**
312*e5436536SAndroid Build Coastguard Worker  * \brief  Parse one SBR element data extension data block. The bit stream
313*e5436536SAndroid Build Coastguard Worker  * position will be placed at the end of the SBR payload block. The remaining
314*e5436536SAndroid Build Coastguard Worker  * bits will be returned into *count if a payload length is given
315*e5436536SAndroid Build Coastguard Worker  * (byPayLen > 0). If no SBR payload length is given (bsPayLen < 0) then
316*e5436536SAndroid Build Coastguard Worker  * the bit stream position on return will be random after this function
317*e5436536SAndroid Build Coastguard Worker  * call in case of errors, and any further decoding will be completely
318*e5436536SAndroid Build Coastguard Worker  * pointless. This function accepts either normal ordered SBR data or reverse
319*e5436536SAndroid Build Coastguard Worker  * ordered DRM SBR data.
320*e5436536SAndroid Build Coastguard Worker  *
321*e5436536SAndroid Build Coastguard Worker  * \param self           SBR decoder handle.
322*e5436536SAndroid Build Coastguard Worker  * \param hBs            Bit stream handle as data source.
323*e5436536SAndroid Build Coastguard Worker  * \param count          Pointer to an integer where the amount of parsed SBR
324*e5436536SAndroid Build Coastguard Worker  * payload bits is stored into.
325*e5436536SAndroid Build Coastguard Worker  * \param bsPayLen       If > 0 this value is the SBR payload length. If < 0,
326*e5436536SAndroid Build Coastguard Worker  * the SBR payload length is unknown.
327*e5436536SAndroid Build Coastguard Worker  * \param flags          CRC flag (0: EXT_SBR_DATA; 1: EXT_SBR_DATA_CRC)
328*e5436536SAndroid Build Coastguard Worker  * \param prev_element   Previous MPEG-4 element ID.
329*e5436536SAndroid Build Coastguard Worker  * \param element_index  Index of the current element.
330*e5436536SAndroid Build Coastguard Worker  * \param acFlags        Audio codec flags
331*e5436536SAndroid Build Coastguard Worker  *
332*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
333*e5436536SAndroid Build Coastguard Worker  */
334*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_Parse(HANDLE_SBRDECODER self, HANDLE_FDK_BITSTREAM hBs,
335*e5436536SAndroid Build Coastguard Worker                            UCHAR *pDrmBsBuffer, USHORT drmBsBufferSize,
336*e5436536SAndroid Build Coastguard Worker                            int *count, int bsPayLen, int crcFlag,
337*e5436536SAndroid Build Coastguard Worker                            MP4_ELEMENT_ID prev_element, int element_index,
338*e5436536SAndroid Build Coastguard Worker                            UINT acFlags, UINT acElFlags[]);
339*e5436536SAndroid Build Coastguard Worker 
340*e5436536SAndroid Build Coastguard Worker /**
341*e5436536SAndroid Build Coastguard Worker  * \brief  This function decodes the given SBR bitstreams and applies SBR to the
342*e5436536SAndroid Build Coastguard Worker  * given time data.
343*e5436536SAndroid Build Coastguard Worker  *
344*e5436536SAndroid Build Coastguard Worker  * SBR-processing works InPlace. I.e. the calling function has to provide
345*e5436536SAndroid Build Coastguard Worker  * a time domain buffer timeData which can hold the completely decoded
346*e5436536SAndroid Build Coastguard Worker  * result.
347*e5436536SAndroid Build Coastguard Worker  *
348*e5436536SAndroid Build Coastguard Worker  * Left and right channel are read and stored according to the
349*e5436536SAndroid Build Coastguard Worker  * interleaving flag, frame length and number of channels.
350*e5436536SAndroid Build Coastguard Worker  *
351*e5436536SAndroid Build Coastguard Worker  * \param self            Handle of an open SBR decoder instance.
352*e5436536SAndroid Build Coastguard Worker  * \param hSbrBs          SBR Bitstream handle.
353*e5436536SAndroid Build Coastguard Worker  * \param input           Pointer to input data.
354*e5436536SAndroid Build Coastguard Worker  * \param timeData        Pointer to upsampled output data.
355*e5436536SAndroid Build Coastguard Worker  * \param timeDataSize    Size of timeData.
356*e5436536SAndroid Build Coastguard Worker  * \param numChannels     Pointer to a buffer holding the number of channels in
357*e5436536SAndroid Build Coastguard Worker  * time data buffer.
358*e5436536SAndroid Build Coastguard Worker  * \param sampleRate      Output samplerate.
359*e5436536SAndroid Build Coastguard Worker  * \param channelMapping  Channel mapping indices.
360*e5436536SAndroid Build Coastguard Worker  * \param coreDecodedOk   Flag indicating if the core decoder did not find any
361*e5436536SAndroid Build Coastguard Worker  * error (0: core decoder found errors, 1: no errors).
362*e5436536SAndroid Build Coastguard Worker  * \param psDecoded       Pointer to a buffer holding a flag. Input: PS is
363*e5436536SAndroid Build Coastguard Worker  * possible, Output: PS has been rendered.
364*e5436536SAndroid Build Coastguard Worker  * \param inDataHeadroom  Headroom of the SBR input time signal to prevent
365*e5436536SAndroid Build Coastguard Worker  * clipping.
366*e5436536SAndroid Build Coastguard Worker  * \param outDataHeadroom Pointer to headroom of the SBR output time signal to
367*e5436536SAndroid Build Coastguard Worker  * prevent clipping.
368*e5436536SAndroid Build Coastguard Worker  *
369*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
370*e5436536SAndroid Build Coastguard Worker  */
371*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_Apply(HANDLE_SBRDECODER self, LONG *input, LONG *timeData,
372*e5436536SAndroid Build Coastguard Worker                            const int timeDataSize, int *numChannels,
373*e5436536SAndroid Build Coastguard Worker                            int *sampleRate,
374*e5436536SAndroid Build Coastguard Worker                            const FDK_channelMapDescr *const mapDescr,
375*e5436536SAndroid Build Coastguard Worker                            const int mapIdx, const int coreDecodedOk,
376*e5436536SAndroid Build Coastguard Worker                            UCHAR *psDecoded, const INT inDataHeadroom,
377*e5436536SAndroid Build Coastguard Worker                            INT *outDataHeadroom);
378*e5436536SAndroid Build Coastguard Worker 
379*e5436536SAndroid Build Coastguard Worker /**
380*e5436536SAndroid Build Coastguard Worker  * \brief       Close SBR decoder instance and free memory.
381*e5436536SAndroid Build Coastguard Worker  * \param self  SBR decoder handle.
382*e5436536SAndroid Build Coastguard Worker  * \return      Error Code.
383*e5436536SAndroid Build Coastguard Worker  */
384*e5436536SAndroid Build Coastguard Worker SBR_ERROR sbrDecoder_Close(HANDLE_SBRDECODER *self);
385*e5436536SAndroid Build Coastguard Worker 
386*e5436536SAndroid Build Coastguard Worker /**
387*e5436536SAndroid Build Coastguard Worker  * \brief       Get SBR decoder library information.
388*e5436536SAndroid Build Coastguard Worker  * \param info  Pointer to a LIB_INFO struct, where library information is
389*e5436536SAndroid Build Coastguard Worker  * written to.
390*e5436536SAndroid Build Coastguard Worker  * \return      0 on success, -1 if invalid handle or if no free element is
391*e5436536SAndroid Build Coastguard Worker  * available to write information to.
392*e5436536SAndroid Build Coastguard Worker  */
393*e5436536SAndroid Build Coastguard Worker INT sbrDecoder_GetLibInfo(LIB_INFO *info);
394*e5436536SAndroid Build Coastguard Worker 
395*e5436536SAndroid Build Coastguard Worker /**
396*e5436536SAndroid Build Coastguard Worker  * \brief       Determine the modules output signal delay in samples.
397*e5436536SAndroid Build Coastguard Worker  * \param self  SBR decoder handle.
398*e5436536SAndroid Build Coastguard Worker  * \return      The number of samples signal delay added by the module.
399*e5436536SAndroid Build Coastguard Worker  */
400*e5436536SAndroid Build Coastguard Worker UINT sbrDecoder_GetDelay(const HANDLE_SBRDECODER self);
401*e5436536SAndroid Build Coastguard Worker 
402*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
403*e5436536SAndroid Build Coastguard Worker }
404*e5436536SAndroid Build Coastguard Worker #endif
405*e5436536SAndroid Build Coastguard Worker 
406*e5436536SAndroid Build Coastguard Worker #endif
407