xref: /aosp_15_r20/external/aac/libSACdec/include/sac_dec_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 - 2020 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 surround 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: Space Decoder
100*e5436536SAndroid Build Coastguard Worker 
101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
102*e5436536SAndroid Build Coastguard Worker 
103*e5436536SAndroid Build Coastguard Worker #ifndef SAC_DEC_LIB_H
104*e5436536SAndroid Build Coastguard Worker #define SAC_DEC_LIB_H
105*e5436536SAndroid Build Coastguard Worker 
106*e5436536SAndroid Build Coastguard Worker #include "common_fix.h"
107*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h"
108*e5436536SAndroid Build Coastguard Worker #include "sac_dec_errorcodes.h"
109*e5436536SAndroid Build Coastguard Worker #include "FDK_bitstream.h"
110*e5436536SAndroid Build Coastguard Worker #include "FDK_qmf_domain.h"
111*e5436536SAndroid Build Coastguard Worker 
112*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
113*e5436536SAndroid Build Coastguard Worker extern "C" {
114*e5436536SAndroid Build Coastguard Worker #endif /* __cplusplus */
115*e5436536SAndroid Build Coastguard Worker 
116*e5436536SAndroid Build Coastguard Worker /**
117*e5436536SAndroid Build Coastguard Worker  * \brief  MPEG Surround input data interface mode.
118*e5436536SAndroid Build Coastguard Worker  **/
119*e5436536SAndroid Build Coastguard Worker typedef enum {
120*e5436536SAndroid Build Coastguard Worker   SAC_INTERFACE_QMF =
121*e5436536SAndroid Build Coastguard Worker       0, /*!< Use QMF domain interface for the input downmix audio.  */
122*e5436536SAndroid Build Coastguard Worker   SAC_INTERFACE_TIME, /*!< Use time domain interface for the input downmix
123*e5436536SAndroid Build Coastguard Worker                          audio. */
124*e5436536SAndroid Build Coastguard Worker   SAC_INTERFACE_AUTO  /*!<          */
125*e5436536SAndroid Build Coastguard Worker } SAC_INPUT_CONFIG;
126*e5436536SAndroid Build Coastguard Worker 
127*e5436536SAndroid Build Coastguard Worker /**
128*e5436536SAndroid Build Coastguard Worker  * \brief  MPEG Surround output mode.
129*e5436536SAndroid Build Coastguard Worker  **/
130*e5436536SAndroid Build Coastguard Worker typedef enum {
131*e5436536SAndroid Build Coastguard Worker   SACDEC_OUT_MODE_NORMAL =
132*e5436536SAndroid Build Coastguard Worker       0, /*!< Normal multi channel processing without output restrictions. */
133*e5436536SAndroid Build Coastguard Worker   SACDEC_OUT_MODE_BINAURAL, /*!< Two channel output with binaural processsing.
134*e5436536SAndroid Build Coastguard Worker                              */
135*e5436536SAndroid Build Coastguard Worker   SACDEC_OUT_MODE_STEREO,   /*!< Always two channel output mode.   */
136*e5436536SAndroid Build Coastguard Worker   SACDEC_OUT_MODE_6CHANNEL  /*!< Always process with 5.1 channel output.  */
137*e5436536SAndroid Build Coastguard Worker } SAC_DEC_OUTPUT_MODE;
138*e5436536SAndroid Build Coastguard Worker 
139*e5436536SAndroid Build Coastguard Worker /**
140*e5436536SAndroid Build Coastguard Worker  * \brief  MPEG Surround binaural HRTF model.
141*e5436536SAndroid Build Coastguard Worker  *         HRTF will be applied only in combination with upmixtype
142*e5436536SAndroid Build Coastguard Worker  *SAC_UPMIX_TYPE_BINAURAL.
143*e5436536SAndroid Build Coastguard Worker  **/
144*e5436536SAndroid Build Coastguard Worker typedef enum {
145*e5436536SAndroid Build Coastguard Worker   SAC_BINAURAL_HRTF_KEMAR = 0,
146*e5436536SAndroid Build Coastguard Worker   SAC_BINAURAL_HRTF_VAST,
147*e5436536SAndroid Build Coastguard Worker   SAC_BINAURAL_HRTF_MPSVT,
148*e5436536SAndroid Build Coastguard Worker   SAC_BINAURAL_SINGLE_HRTFS
149*e5436536SAndroid Build Coastguard Worker } SAC_BINAURAL_HRTF_MODEL;
150*e5436536SAndroid Build Coastguard Worker 
151*e5436536SAndroid Build Coastguard Worker /**
152*e5436536SAndroid Build Coastguard Worker  * \brief  MPEG Surround decoder instance available.
153*e5436536SAndroid Build Coastguard Worker  **/
154*e5436536SAndroid Build Coastguard Worker typedef enum {
155*e5436536SAndroid Build Coastguard Worker   SAC_INSTANCE_NOT_FULL_AVAILABLE =
156*e5436536SAndroid Build Coastguard Worker       0, /*!< MPEG Surround decoder instance not full available. */
157*e5436536SAndroid Build Coastguard Worker   SAC_INSTANCE_FULL_AVAILABLE /*!< MPEG Surround decoder instance full
158*e5436536SAndroid Build Coastguard Worker                                  available. */
159*e5436536SAndroid Build Coastguard Worker } SAC_INSTANCE_AVAIL;
160*e5436536SAndroid Build Coastguard Worker 
161*e5436536SAndroid Build Coastguard Worker /**
162*e5436536SAndroid Build Coastguard Worker  * \brief  MPEG Surround decoder dynamic parameters.
163*e5436536SAndroid Build Coastguard Worker  *
164*e5436536SAndroid Build Coastguard Worker  * Use mpegSurroundDecoder_SetParam() function to configure internal status of
165*e5436536SAndroid Build Coastguard Worker  * following parameters.
166*e5436536SAndroid Build Coastguard Worker  */
167*e5436536SAndroid Build Coastguard Worker typedef enum {
168*e5436536SAndroid Build Coastguard Worker   SACDEC_OUTPUT_MODE = 0x0001, /*!< Set MPEG Surround decoder output mode. See
169*e5436536SAndroid Build Coastguard Worker                                   SAC_DEC_OUTPUT_MODE. */
170*e5436536SAndroid Build Coastguard Worker   SACDEC_BLIND_ENABLE =
171*e5436536SAndroid Build Coastguard Worker       0x0002, /*!< Multi channel output without MPEG Surround side info.    */
172*e5436536SAndroid Build Coastguard Worker   SACDEC_PARTIALLY_COMPLEX =
173*e5436536SAndroid Build Coastguard Worker       0x0003, /*!< Set partially complex flag for MPEG Surround.
174*e5436536SAndroid Build Coastguard Worker                     0: Use complex valued QMF data.
175*e5436536SAndroid Build Coastguard Worker                     1: Use real valued QMF data (low power mode) */
176*e5436536SAndroid Build Coastguard Worker   SACDEC_INTERFACE =
177*e5436536SAndroid Build Coastguard Worker       0x0004, /*!< Select signal input interface for MPEG Surround.
178*e5436536SAndroid Build Coastguard Worker                      Switch time interface off:  0
179*e5436536SAndroid Build Coastguard Worker                      Switch time interface on:   1 */
180*e5436536SAndroid Build Coastguard Worker   SACDEC_BS_DELAY = 0x0005, /*!< Select bit stream delay for MPEG Surround.
181*e5436536SAndroid Build Coastguard Worker                                    Switch bit stream delay off:  0
182*e5436536SAndroid Build Coastguard Worker                                    Switch bit stream delay on:   1 */
183*e5436536SAndroid Build Coastguard Worker   SACDEC_BINAURAL_QUALITY =
184*e5436536SAndroid Build Coastguard Worker       0x0102, /*!< Set binaural quality for MPEG Surround binaural mode.
185*e5436536SAndroid Build Coastguard Worker                    0: Low Complexity,
186*e5436536SAndroid Build Coastguard Worker                    1: High Quality */
187*e5436536SAndroid Build Coastguard Worker   SACDEC_BINAURAL_DISTANCE = 0x0103, /*!< Set perceived distance for binaural
188*e5436536SAndroid Build Coastguard Worker                                         playback (binaural mode only). The valid
189*e5436536SAndroid Build Coastguard Worker                                         values  range from 0 to 100. Where 100
190*e5436536SAndroid Build Coastguard Worker                                         corresponds to the farthest perceived
191*e5436536SAndroid Build Coastguard Worker                                         distance. */
192*e5436536SAndroid Build Coastguard Worker   SACDEC_BINAURAL_DIALOG_CLARITY =
193*e5436536SAndroid Build Coastguard Worker       0x0104, /*!< Set dialog clarity (for binaural playback).
194*e5436536SAndroid Build Coastguard Worker                    The valid values range from 0 to 100. */
195*e5436536SAndroid Build Coastguard Worker   SACDEC_BINAURAL_FRONT_ANGLE = 0x0105, /*!< Set angle between the virtual front
196*e5436536SAndroid Build Coastguard Worker                                            speaker pair (binaural mode only).
197*e5436536SAndroid Build Coastguard Worker                                              The valid range is from 0 to 180
198*e5436536SAndroid Build Coastguard Worker                                            angular degrees. */
199*e5436536SAndroid Build Coastguard Worker   SACDEC_BINAURAL_BACK_ANGLE = 0x0106,  /*!< Set angle between the virtual back
200*e5436536SAndroid Build Coastguard Worker                                            speaker pair (binaural mode only).  The
201*e5436536SAndroid Build Coastguard Worker                                            valid range is from 0 to 180 angular
202*e5436536SAndroid Build Coastguard Worker                                            degrees. */
203*e5436536SAndroid Build Coastguard Worker   SACDEC_BINAURAL_PRESET = 0x0107, /*!< Set a virtual speaker setup preset for
204*e5436536SAndroid Build Coastguard Worker                                       binaural playback (binaural mode only).
205*e5436536SAndroid Build Coastguard Worker                                       This meta-parameter implicitly modifies
206*e5436536SAndroid Build Coastguard Worker                                       the following parameters:
207*e5436536SAndroid Build Coastguard Worker                                           SACDEC_BINAURAL_DISTANCE,
208*e5436536SAndroid Build Coastguard Worker                                           SACDEC_BINAURAL_DIALOG_CLARITY,
209*e5436536SAndroid Build Coastguard Worker                                           SACDEC_BINAURAL_FRONT_ANGLE and
210*e5436536SAndroid Build Coastguard Worker                                           SACDEC_BINAURAL_BACK_ANGLE.
211*e5436536SAndroid Build Coastguard Worker                                         The following presets are available:
212*e5436536SAndroid Build Coastguard Worker                                           1: Dry room
213*e5436536SAndroid Build Coastguard Worker                                           2: Living room (default)
214*e5436536SAndroid Build Coastguard Worker                                           3: Cinema */
215*e5436536SAndroid Build Coastguard Worker 
216*e5436536SAndroid Build Coastguard Worker   SACDEC_BS_INTERRUPTION =
217*e5436536SAndroid Build Coastguard Worker       0x0200, /*!< If the given value is unequal to 0 hint the MPEG Surround
218*e5436536SAndroid Build Coastguard Worker                  decoder that the next input data is discontinuous, because of
219*e5436536SAndroid Build Coastguard Worker                  frame loss, seeking, etc. Announce the decoder that the
220*e5436536SAndroid Build Coastguard Worker                  bitstream data was interrupted (fSync = 0). This will cause the
221*e5436536SAndroid Build Coastguard Worker                  surround decoder not to parse any new bitstream data until a
222*e5436536SAndroid Build Coastguard Worker                  new header with a valid Spatial Specific Config and a
223*e5436536SAndroid Build Coastguard Worker                  independently decodable frame is found. Specially important
224*e5436536SAndroid Build Coastguard Worker                  when the MPEG Surround data is split accross several frames
225*e5436536SAndroid Build Coastguard Worker                  (for example in the case of AAC-LC downmix with 1024
226*e5436536SAndroid Build Coastguard Worker                  framelength and 2048 surround frame length) and a discontinuity
227*e5436536SAndroid Build Coastguard Worker                  in the bitstream data occurs. If fSync is 1, assume that MPEG
228*e5436536SAndroid Build Coastguard Worker                  Surround data is in sync (out of band config for example). */
229*e5436536SAndroid Build Coastguard Worker   SACDEC_CLEAR_HISTORY = 0x0201, /*!< If the given value is unequal to 0 clear
230*e5436536SAndroid Build Coastguard Worker                                     all internal states (delay lines, QMF
231*e5436536SAndroid Build Coastguard Worker                                     states, ...) of the MPEG Surround decoder.
232*e5436536SAndroid Build Coastguard Worker                                     This will cause a discontinuity in the audio
233*e5436536SAndroid Build Coastguard Worker                                     output signal. */
234*e5436536SAndroid Build Coastguard Worker 
235*e5436536SAndroid Build Coastguard Worker   SACDEC_CONCEAL_NUM_KEEP_FRAMES =
236*e5436536SAndroid Build Coastguard Worker       0x0301, /*!< Error concealment: The Number of frames the module keeps the
237*e5436536SAndroid Build Coastguard Worker                  last spatial image before fading to the particular spatial
238*e5436536SAndroid Build Coastguard Worker                  scenario starts. The default is 10 frames. */
239*e5436536SAndroid Build Coastguard Worker   SACDEC_CONCEAL_FADE_OUT_SLOPE_LENGTH =
240*e5436536SAndroid Build Coastguard Worker       0x0302, /*!< Error concealment: Length of the slope (in frames) the module
241*e5436536SAndroid Build Coastguard Worker                  creates to fade from the last spatial scenario to the
242*e5436536SAndroid Build Coastguard Worker                  particular default scenario (downmix) in case of consecutive
243*e5436536SAndroid Build Coastguard Worker                  errors. Default is 5. */
244*e5436536SAndroid Build Coastguard Worker   SACDEC_CONCEAL_FADE_IN_SLOPE_LENGTH =
245*e5436536SAndroid Build Coastguard Worker       0x0303, /*!< Error concealment: Length of the slope (in frames) the module
246*e5436536SAndroid Build Coastguard Worker                  creates to fade from the default spatial scenario (downmix) to
247*e5436536SAndroid Build Coastguard Worker                  the current scenario after fade-out. Default parameter value
248*e5436536SAndroid Build Coastguard Worker                  is 5. */
249*e5436536SAndroid Build Coastguard Worker   SACDEC_CONCEAL_NUM_RELEASE_FRAMES =
250*e5436536SAndroid Build Coastguard Worker       0x0304 /*!< Error concealment: The number of error free frames before the
251*e5436536SAndroid Build Coastguard Worker                 module starts fading from default to the current spatial
252*e5436536SAndroid Build Coastguard Worker                 scenario. Default parameter value is 3 frames. */
253*e5436536SAndroid Build Coastguard Worker } SACDEC_PARAM;
254*e5436536SAndroid Build Coastguard Worker 
255*e5436536SAndroid Build Coastguard Worker #define PCM_MPS LONG
256*e5436536SAndroid Build Coastguard Worker 
257*e5436536SAndroid Build Coastguard Worker /**
258*e5436536SAndroid Build Coastguard Worker  * \brief MPEG Surround decoder handle.
259*e5436536SAndroid Build Coastguard Worker  */
260*e5436536SAndroid Build Coastguard Worker typedef struct MpegSurroundDecoder CMpegSurroundDecoder;
261*e5436536SAndroid Build Coastguard Worker 
262*e5436536SAndroid Build Coastguard Worker /**
263*e5436536SAndroid Build Coastguard Worker  * \brief  Check if the full MPEG Surround decoder instance is allocated.
264*e5436536SAndroid Build Coastguard Worker  *
265*e5436536SAndroid Build Coastguard Worker  * Check if the full MPEG Surround decoder instance is allocated.
266*e5436536SAndroid Build Coastguard Worker  *
267*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder   A pointer to a decoder stucture.
268*e5436536SAndroid Build Coastguard Worker  *
269*e5436536SAndroid Build Coastguard Worker  * \return SACDEC_ERROR error code
270*e5436536SAndroid Build Coastguard Worker  */
271*e5436536SAndroid Build Coastguard Worker SAC_INSTANCE_AVAIL
272*e5436536SAndroid Build Coastguard Worker mpegSurroundDecoder_IsFullMpegSurroundDecoderInstanceAvailable(
273*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder);
274*e5436536SAndroid Build Coastguard Worker 
275*e5436536SAndroid Build Coastguard Worker /**
276*e5436536SAndroid Build Coastguard Worker  * \brief  Open one instance of the MPEG Surround decoder.
277*e5436536SAndroid Build Coastguard Worker  *
278*e5436536SAndroid Build Coastguard Worker  * Allocate one instance of decoder and input buffers.
279*e5436536SAndroid Build Coastguard Worker  * - Allocate decoder structure
280*e5436536SAndroid Build Coastguard Worker  * - Allocate input buffers (QMF/time/MPS data)
281*e5436536SAndroid Build Coastguard Worker  *
282*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder   A pointer to a decoder handle; filled on
283*e5436536SAndroid Build Coastguard Worker  * return.
284*e5436536SAndroid Build Coastguard Worker  * \param splitMemoryAllocation  Allocate only outer layer of MPS decoder. Core
285*e5436536SAndroid Build Coastguard Worker  * part is reallocated later if needed.
286*e5436536SAndroid Build Coastguard Worker  * \param stereoConfigIndex      USAC: Save memory by opening the MPS decoder
287*e5436536SAndroid Build Coastguard Worker  * for a specific stereoConfigIndex. (Needs optimization macros enabled.)
288*e5436536SAndroid Build Coastguard Worker  * \param pQmfDomain             Pointer to QMF domain data structure.
289*e5436536SAndroid Build Coastguard Worker  *
290*e5436536SAndroid Build Coastguard Worker  * \return SACDEC_ERROR error code
291*e5436536SAndroid Build Coastguard Worker  */
292*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_Open(
293*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder **pMpegSurroundDecoder, int stereoConfigIndex,
294*e5436536SAndroid Build Coastguard Worker     HANDLE_FDK_QMF_DOMAIN pQmfDomain);
295*e5436536SAndroid Build Coastguard Worker 
296*e5436536SAndroid Build Coastguard Worker /**
297*e5436536SAndroid Build Coastguard Worker  * \brief  Init one instance of the MPEG Surround decoder.
298*e5436536SAndroid Build Coastguard Worker  *
299*e5436536SAndroid Build Coastguard Worker  * Init one instance of the MPEG Surround decoder
300*e5436536SAndroid Build Coastguard Worker  *
301*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder  A pointer to a decoder handle;
302*e5436536SAndroid Build Coastguard Worker  *
303*e5436536SAndroid Build Coastguard Worker  * \return SACDEC_ERROR error code
304*e5436536SAndroid Build Coastguard Worker  */
305*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_Init(
306*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder);
307*e5436536SAndroid Build Coastguard Worker 
308*e5436536SAndroid Build Coastguard Worker /**
309*e5436536SAndroid Build Coastguard Worker  * \brief Read and parse SpatialSpecificConfig.
310*e5436536SAndroid Build Coastguard Worker  *
311*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder  A pointer to a decoder handle.
312*e5436536SAndroid Build Coastguard Worker  * \param hBs bitstream handle config parsing data source.
313*e5436536SAndroid Build Coastguard Worker  *
314*e5436536SAndroid Build Coastguard Worker  * \return SACDEC_ERROR error code
315*e5436536SAndroid Build Coastguard Worker  */
316*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_Config(
317*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder, HANDLE_FDK_BITSTREAM hBs,
318*e5436536SAndroid Build Coastguard Worker     AUDIO_OBJECT_TYPE coreCodec, INT samplingRate, INT frameSize,
319*e5436536SAndroid Build Coastguard Worker     INT numChannels, INT stereoConfigIndex, INT coreSbrFrameLengthIndex,
320*e5436536SAndroid Build Coastguard Worker     INT configBytes, const UCHAR configMode, UCHAR *configChanged);
321*e5436536SAndroid Build Coastguard Worker 
322*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR
323*e5436536SAndroid Build Coastguard Worker mpegSurroundDecoder_ConfigureQmfDomain(
324*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder,
325*e5436536SAndroid Build Coastguard Worker     SAC_INPUT_CONFIG sac_dec_interface, UINT coreSamplingRate,
326*e5436536SAndroid Build Coastguard Worker     AUDIO_OBJECT_TYPE coreCodec);
327*e5436536SAndroid Build Coastguard Worker 
328*e5436536SAndroid Build Coastguard Worker /**
329*e5436536SAndroid Build Coastguard Worker  * \brief Parse MPEG Surround data without header
330*e5436536SAndroid Build Coastguard Worker  *
331*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder A MPEG Surrround decoder handle.
332*e5436536SAndroid Build Coastguard Worker  * \param hBs                  Bit stream handle data input source
333*e5436536SAndroid Build Coastguard Worker  * \param pMpsDataBits         Pointer to number of valid bits in extension
334*e5436536SAndroid Build Coastguard Worker  * payload. Function updates mpsDataBits while parsing bitstream.
335*e5436536SAndroid Build Coastguard Worker  * \param fGlobalIndependencyFlag Global independency flag of current frame.
336*e5436536SAndroid Build Coastguard Worker  *
337*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
338*e5436536SAndroid Build Coastguard Worker  */
339*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_ParseNoHeader(
340*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder, HANDLE_FDK_BITSTREAM hBs,
341*e5436536SAndroid Build Coastguard Worker     int *pMpsDataBits, int fGlobalIndependencyFlag);
342*e5436536SAndroid Build Coastguard Worker 
343*e5436536SAndroid Build Coastguard Worker /* #ifdef SACDEC_MPS_ENABLE */
344*e5436536SAndroid Build Coastguard Worker /**
345*e5436536SAndroid Build Coastguard Worker  * \brief Parse MPEG Surround data with header. Header is ancType, ancStart,
346*e5436536SAndroid Build Coastguard Worker  ancStop (4 bits total). Body is ancDataSegmentByte[i].
347*e5436536SAndroid Build Coastguard Worker  *
348*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder A MPEG Surrround decoder handle.
349*e5436536SAndroid Build Coastguard Worker  * \param hBs                  Bit stream handle data input source
350*e5436536SAndroid Build Coastguard Worker  * \param pMpsDataBits         Pointer to number of valid bits in extension
351*e5436536SAndroid Build Coastguard Worker  payload. Function updates mpsDataBits while parsing bitstream. Needs to be a
352*e5436536SAndroid Build Coastguard Worker  multiple of 8 + 4 (4 bits header).
353*e5436536SAndroid Build Coastguard Worker  * \param coreCodec            The audio object type of the core codec handling
354*e5436536SAndroid Build Coastguard Worker  the downmix input signal.
355*e5436536SAndroid Build Coastguard Worker  * \param sampleRate           Samplerate of input downmix data.
356*e5436536SAndroid Build Coastguard Worker  * \param nChannels            Amount of input channels.
357*e5436536SAndroid Build Coastguard Worker  * \param frameSize            Amount of input samples.
358*e5436536SAndroid Build Coastguard Worker  * \param fGlobalIndependencyFlag Global independency flag of current frame.
359*e5436536SAndroid Build Coastguard Worker  *
360*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
361*e5436536SAndroid Build Coastguard Worker  */
362*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_Parse(CMpegSurroundDecoder *pMpegSurroundDecoder,
363*e5436536SAndroid Build Coastguard Worker                               HANDLE_FDK_BITSTREAM hBs, int *pMpsDataBits,
364*e5436536SAndroid Build Coastguard Worker                               AUDIO_OBJECT_TYPE coreCodec, int sampleRate,
365*e5436536SAndroid Build Coastguard Worker                               int frameSize, int fGlobalIndependencyFlag);
366*e5436536SAndroid Build Coastguard Worker /* #endif */
367*e5436536SAndroid Build Coastguard Worker 
368*e5436536SAndroid Build Coastguard Worker /**
369*e5436536SAndroid Build Coastguard Worker  * \brief Apply MPEG Surround upmix.
370*e5436536SAndroid Build Coastguard Worker  *
371*e5436536SAndroid Build Coastguard Worker  * Process one downmix audio frame and decode one surround frame if it applies.
372*e5436536SAndroid Build Coastguard Worker  * Downmix framing can be different from surround framing, so depending on the
373*e5436536SAndroid Build Coastguard Worker  * frame size of the downmix audio data and the framing being used by the MPEG
374*e5436536SAndroid Build Coastguard Worker  * Surround decoder, it could be that only every second call, for example, of
375*e5436536SAndroid Build Coastguard Worker  * this function actually surround data was decoded. The returned value of
376*e5436536SAndroid Build Coastguard Worker  * frameSize will be zero, if no surround data was decoded.
377*e5436536SAndroid Build Coastguard Worker  *
378*e5436536SAndroid Build Coastguard Worker  * Decoding one MPEG Surround frame. Depending on interface configuration
379*e5436536SAndroid Build Coastguard Worker  * mpegSurroundDecoder_SetParam(self, SACDEC_INTERFACE, value), the QMF or time
380*e5436536SAndroid Build Coastguard Worker  * interface will be applied. External access to QMF buffer interface can be
381*e5436536SAndroid Build Coastguard Worker  * achieved by mpegSurroundDecoder_GetQmfBuffer() call before decode frame.
382*e5436536SAndroid Build Coastguard Worker  * While using time interface, pTimeData buffer will be shared as input and
383*e5436536SAndroid Build Coastguard Worker  * output buffer.
384*e5436536SAndroid Build Coastguard Worker  *
385*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder A MPEG Surrround decoder handle.
386*e5436536SAndroid Build Coastguard Worker  * \param pTimeData            Pointer to time buffer. Depending on interface
387*e5436536SAndroid Build Coastguard Worker  * configuration, the content of pTimeData is ignored, and the internal QMF
388*e5436536SAndroid Build Coastguard Worker  * buffer will be used as input data source.
389*e5436536SAndroid Build Coastguard Worker  * Otherwise, the MPEG Surround processing is applied to the timesignal
390*e5436536SAndroid Build Coastguard Worker  * pTimeData. For both variants, the resulting MPEG
391*e5436536SAndroid Build Coastguard Worker  * Surround signal is written into pTimeData.
392*e5436536SAndroid Build Coastguard Worker  * \param timeDataSize         Size of pTimeData (available buffer size).
393*e5436536SAndroid Build Coastguard Worker  * \param timeDataFrameSize    Frame size of input timedata
394*e5436536SAndroid Build Coastguard Worker  * \param nChannels            Pointer where the amount of input channels is
395*e5436536SAndroid Build Coastguard Worker  * given and amount of output channels is returned.
396*e5436536SAndroid Build Coastguard Worker  * \param frameSize            Pointer where the amount of output samples is
397*e5436536SAndroid Build Coastguard Worker  * returned into.
398*e5436536SAndroid Build Coastguard Worker  * \param channelType          Array were the corresponding channel type for
399*e5436536SAndroid Build Coastguard Worker  * each output audio channel is stored into.
400*e5436536SAndroid Build Coastguard Worker  * \param channelIndices       Array were the corresponding channel type index
401*e5436536SAndroid Build Coastguard Worker  * for each output audio channel is stored into.
402*e5436536SAndroid Build Coastguard Worker  * \param mapDescr             Channep map descriptor for output channel mapping
403*e5436536SAndroid Build Coastguard Worker  * to be used (From MPEG PCE ordering to whatever is required).
404*e5436536SAndroid Build Coastguard Worker  * \param inDataHeadroom       Headroom of SAC input time signal to prevent
405*e5436536SAndroid Build Coastguard Worker  * clipping.
406*e5436536SAndroid Build Coastguard Worker  * \param outDataHeadroom      Pointer to headroom of SAC output time signal to
407*e5436536SAndroid Build Coastguard Worker  * prevent clipping.
408*e5436536SAndroid Build Coastguard Worker  *
409*e5436536SAndroid Build Coastguard Worker  * \return  Error code.
410*e5436536SAndroid Build Coastguard Worker  */
411*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_Apply(CMpegSurroundDecoder *pMpegSurroundDecoder,
412*e5436536SAndroid Build Coastguard Worker                               PCM_MPS *input, PCM_MPS *pTimeData,
413*e5436536SAndroid Build Coastguard Worker                               const int timeDataSize, int timeDataFrameSize,
414*e5436536SAndroid Build Coastguard Worker                               int *nChannels, int *frameSize, int sampleRate,
415*e5436536SAndroid Build Coastguard Worker                               AUDIO_OBJECT_TYPE coreCodec,
416*e5436536SAndroid Build Coastguard Worker                               AUDIO_CHANNEL_TYPE channelType[],
417*e5436536SAndroid Build Coastguard Worker                               UCHAR channelIndices[],
418*e5436536SAndroid Build Coastguard Worker                               const FDK_channelMapDescr *const mapDescr,
419*e5436536SAndroid Build Coastguard Worker                               const INT inDataHeadroom, INT *outDataHeadroom);
420*e5436536SAndroid Build Coastguard Worker 
421*e5436536SAndroid Build Coastguard Worker /**
422*e5436536SAndroid Build Coastguard Worker  * \brief                       Deallocate a MPEG Surround decoder instance.
423*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder  A decoder handle.
424*e5436536SAndroid Build Coastguard Worker  * \return                      No return value.
425*e5436536SAndroid Build Coastguard Worker  */
426*e5436536SAndroid Build Coastguard Worker void mpegSurroundDecoder_Close(CMpegSurroundDecoder *pMpegSurroundDecoder);
427*e5436536SAndroid Build Coastguard Worker 
428*e5436536SAndroid Build Coastguard Worker /**
429*e5436536SAndroid Build Coastguard Worker  * \brief                       Free config dependent MPEG Surround memory.
430*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder  A decoder handle.
431*e5436536SAndroid Build Coastguard Worker  * \return                      error.
432*e5436536SAndroid Build Coastguard Worker  */
433*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_FreeMem(
434*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder);
435*e5436536SAndroid Build Coastguard Worker 
436*e5436536SAndroid Build Coastguard Worker /**
437*e5436536SAndroid Build Coastguard Worker  * \brief  Set one single MPEG Surround decoder parameter.
438*e5436536SAndroid Build Coastguard Worker  *
439*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder  A MPEG Surrround decoder handle. Must not be
440*e5436536SAndroid Build Coastguard Worker  * NULL pointer.
441*e5436536SAndroid Build Coastguard Worker  * \param param                 Parameter to be set. See SACDEC_PARAM.
442*e5436536SAndroid Build Coastguard Worker  * \param value                 Parameter value. See SACDEC_PARAM.
443*e5436536SAndroid Build Coastguard Worker  *
444*e5436536SAndroid Build Coastguard Worker  * \return  0 on sucess, and non-zero on failure.
445*e5436536SAndroid Build Coastguard Worker  */
446*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_SetParam(
447*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder, const SACDEC_PARAM param,
448*e5436536SAndroid Build Coastguard Worker     const INT value);
449*e5436536SAndroid Build Coastguard Worker 
450*e5436536SAndroid Build Coastguard Worker /**
451*e5436536SAndroid Build Coastguard Worker  * \brief          Retrieve MPEG Surround decoder library info and fill info list with all depending library infos.
452*e5436536SAndroid Build Coastguard Worker  * \param libInfo  Pointer to library info list to be filled.
453*e5436536SAndroid Build Coastguard Worker  * \return         0 on sucess, and non-zero on failure.
454*e5436536SAndroid Build Coastguard Worker  **/
455*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_GetLibInfo(LIB_INFO *libInfo);
456*e5436536SAndroid Build Coastguard Worker 
457*e5436536SAndroid Build Coastguard Worker /**
458*e5436536SAndroid Build Coastguard Worker  * \brief  Set one single MPEG Surround decoder parameter.
459*e5436536SAndroid Build Coastguard Worker  *
460*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder  A valid MPEG Surrround decoder handle.
461*e5436536SAndroid Build Coastguard Worker  *
462*e5436536SAndroid Build Coastguard Worker  * \return  The additional signal delay caused by the module.
463*e5436536SAndroid Build Coastguard Worker  */
464*e5436536SAndroid Build Coastguard Worker UINT mpegSurroundDecoder_GetDelay(const CMpegSurroundDecoder *self);
465*e5436536SAndroid Build Coastguard Worker 
466*e5436536SAndroid Build Coastguard Worker /**
467*e5436536SAndroid Build Coastguard Worker  * \brief  Get info on whether the USAC pseudo LR feature is active.
468*e5436536SAndroid Build Coastguard Worker  *
469*e5436536SAndroid Build Coastguard Worker  * \param pMpegSurroundDecoder  A valid MPEG Surrround decoder handle.
470*e5436536SAndroid Build Coastguard Worker  * \param bsPseudoLr            Pointer to return wether pseudo LR USAC feature
471*e5436536SAndroid Build Coastguard Worker  * is used.
472*e5436536SAndroid Build Coastguard Worker  *
473*e5436536SAndroid Build Coastguard Worker  * \return  0 on sucess, and non-zero on failure.
474*e5436536SAndroid Build Coastguard Worker  */
475*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_IsPseudoLR(
476*e5436536SAndroid Build Coastguard Worker     CMpegSurroundDecoder *pMpegSurroundDecoder, int *bsPseudoLr);
477*e5436536SAndroid Build Coastguard Worker 
478*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
479*e5436536SAndroid Build Coastguard Worker }
480*e5436536SAndroid Build Coastguard Worker #endif /* __cplusplus */
481*e5436536SAndroid Build Coastguard Worker 
482*e5436536SAndroid Build Coastguard Worker #endif /* #ifndef SAC_DEC_LIB_H */
483