xref: /aosp_15_r20/external/aac/libSACdec/src/sac_dec.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 /*********************** 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: SAC Decoder Library structures
100*e5436536SAndroid Build Coastguard Worker 
101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
102*e5436536SAndroid Build Coastguard Worker 
103*e5436536SAndroid Build Coastguard Worker #ifndef SAC_DEC_H
104*e5436536SAndroid Build Coastguard Worker #define SAC_DEC_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 "sac_dec_interface.h" /* library interface in ../include */
109*e5436536SAndroid Build Coastguard Worker 
110*e5436536SAndroid Build Coastguard Worker #include "FDK_qmf_domain.h"
111*e5436536SAndroid Build Coastguard Worker #include "sac_qmf.h"
112*e5436536SAndroid Build Coastguard Worker #include "FDK_bitstream.h" /* mp4 bitbuffer */
113*e5436536SAndroid Build Coastguard Worker #include "sac_calcM1andM2.h"
114*e5436536SAndroid Build Coastguard Worker #include "FDK_hybrid.h"
115*e5436536SAndroid Build Coastguard Worker #include "FDK_decorrelate.h"
116*e5436536SAndroid Build Coastguard Worker #include "sac_reshapeBBEnv.h"
117*e5436536SAndroid Build Coastguard Worker 
118*e5436536SAndroid Build Coastguard Worker #include "sac_dec_conceal.h"
119*e5436536SAndroid Build Coastguard Worker 
120*e5436536SAndroid Build Coastguard Worker #include "sac_tsd.h"
121*e5436536SAndroid Build Coastguard Worker 
122*e5436536SAndroid Build Coastguard Worker #ifndef MAX
123*e5436536SAndroid Build Coastguard Worker #define MAX(a, b) ((a) > (b) ? (a) : (b))
124*e5436536SAndroid Build Coastguard Worker #endif
125*e5436536SAndroid Build Coastguard Worker 
126*e5436536SAndroid Build Coastguard Worker #define ICCdefault 0
127*e5436536SAndroid Build Coastguard Worker #define IPDdefault 0
128*e5436536SAndroid Build Coastguard Worker #define arbdmxGainDefault 0
129*e5436536SAndroid Build Coastguard Worker #define CPCdefault 10
130*e5436536SAndroid Build Coastguard Worker #define tttCLD1default 15
131*e5436536SAndroid Build Coastguard Worker #define tttCLD2default 0
132*e5436536SAndroid Build Coastguard Worker 
133*e5436536SAndroid Build Coastguard Worker #define IS_HQ_ONLY(aot)                                                      \
134*e5436536SAndroid Build Coastguard Worker   ((aot) == AOT_ER_AAC_LD || (aot) == AOT_ER_AAC_ELD || (aot) == AOT_USAC || \
135*e5436536SAndroid Build Coastguard Worker    (aot) == AOT_RSVD50)
136*e5436536SAndroid Build Coastguard Worker 
137*e5436536SAndroid Build Coastguard Worker #define SCONST(x) FL2FXCONST_DBL(x)
138*e5436536SAndroid Build Coastguard Worker 
139*e5436536SAndroid Build Coastguard Worker #define PC_NUM_BANDS (8)
140*e5436536SAndroid Build Coastguard Worker #define PC_NUM_HYB_BANDS (PC_NUM_BANDS - 3 + 10)
141*e5436536SAndroid Build Coastguard Worker #define ABS_THR (1e-9f * 32768 * 32768)
142*e5436536SAndroid Build Coastguard Worker 
143*e5436536SAndroid Build Coastguard Worker #define MAX_HYBRID_BANDS (MAX_NUM_QMF_BANDS - 3 + 10)
144*e5436536SAndroid Build Coastguard Worker #define HYBRID_FILTER_DELAY (6)
145*e5436536SAndroid Build Coastguard Worker 
146*e5436536SAndroid Build Coastguard Worker #define MAX_RESIDUAL_FRAMES (4)
147*e5436536SAndroid Build Coastguard Worker #define MAX_RESIDUAL_BISTREAM \
148*e5436536SAndroid Build Coastguard Worker   (836) /*  48000 bps * 3 res / (8 * 44100 / 2048 ) */
149*e5436536SAndroid Build Coastguard Worker #define MAX_MDCT_COEFFS (1024)
150*e5436536SAndroid Build Coastguard Worker #define SACDEC_RESIDUAL_BS_BUF_SIZE \
151*e5436536SAndroid Build Coastguard Worker   (1024) /* used to setup and check residual bitstream buffer */
152*e5436536SAndroid Build Coastguard Worker 
153*e5436536SAndroid Build Coastguard Worker #define MAX_NUM_PARAMS (MAX_NUM_OTT + 4 * MAX_NUM_TTT + MAX_INPUT_CHANNELS)
154*e5436536SAndroid Build Coastguard Worker #define MAX_NUM_PARAMETERS (MAX(MAX_NUM_PARAMS, MAX_NUM_OTT))
155*e5436536SAndroid Build Coastguard Worker 
156*e5436536SAndroid Build Coastguard Worker #define MAX_PARAMETER_SETS (9)
157*e5436536SAndroid Build Coastguard Worker 
158*e5436536SAndroid Build Coastguard Worker #define MAX_M2_INPUT (MAX_OUTPUT_CHANNELS) /* 3 direct + 5 diffuse */
159*e5436536SAndroid Build Coastguard Worker 
160*e5436536SAndroid Build Coastguard Worker #define MAX_QMF_BANDS_TO_HYBRID \
161*e5436536SAndroid Build Coastguard Worker   (3) /* 3 bands are filtered again in "40 bands" case */
162*e5436536SAndroid Build Coastguard Worker #define PROTO_LEN (13)
163*e5436536SAndroid Build Coastguard Worker #define BUFFER_LEN_LF (PROTO_LEN)
164*e5436536SAndroid Build Coastguard Worker #define BUFFER_LEN_HF ((PROTO_LEN - 1) / 2)
165*e5436536SAndroid Build Coastguard Worker 
166*e5436536SAndroid Build Coastguard Worker #define MAX_NO_DECORR_CHANNELS (MAX_OUTPUT_CHANNELS)
167*e5436536SAndroid Build Coastguard Worker #define HRTF_AZIMUTHS (5)
168*e5436536SAndroid Build Coastguard Worker 
169*e5436536SAndroid Build Coastguard Worker #define MAX_NUM_OTT_AT 0
170*e5436536SAndroid Build Coastguard Worker 
171*e5436536SAndroid Build Coastguard Worker /* left out */
172*e5436536SAndroid Build Coastguard Worker 
173*e5436536SAndroid Build Coastguard Worker typedef enum {
174*e5436536SAndroid Build Coastguard Worker   UPMIXTYPE_BYPASS = -1, /*just bypass the input channels without processing*/
175*e5436536SAndroid Build Coastguard Worker   UPMIXTYPE_NORMAL = 0   /*multichannel loudspeaker upmix with spatial data*/
176*e5436536SAndroid Build Coastguard Worker } UPMIXTYPE;
177*e5436536SAndroid Build Coastguard Worker 
isTwoChMode(UPMIXTYPE upmixType)178*e5436536SAndroid Build Coastguard Worker static inline int isTwoChMode(UPMIXTYPE upmixType) {
179*e5436536SAndroid Build Coastguard Worker   int retval = 0;
180*e5436536SAndroid Build Coastguard Worker   return retval;
181*e5436536SAndroid Build Coastguard Worker }
182*e5436536SAndroid Build Coastguard Worker 
183*e5436536SAndroid Build Coastguard Worker   /* left out end */
184*e5436536SAndroid Build Coastguard Worker 
185*e5436536SAndroid Build Coastguard Worker #define MPEGS_BYPASSMODE (0x00000001)
186*e5436536SAndroid Build Coastguard Worker #define MPEGS_CONCEAL (0x00000002)
187*e5436536SAndroid Build Coastguard Worker 
188*e5436536SAndroid Build Coastguard Worker typedef struct STP_DEC *HANDLE_STP_DEC;
189*e5436536SAndroid Build Coastguard Worker 
190*e5436536SAndroid Build Coastguard Worker typedef struct {
191*e5436536SAndroid Build Coastguard Worker   SCHAR bsQuantCoarseXXXprev;
192*e5436536SAndroid Build Coastguard Worker   SCHAR bsQuantCoarseXXXprevParse;
193*e5436536SAndroid Build Coastguard Worker } LOSSLESSSTATE;
194*e5436536SAndroid Build Coastguard Worker 
195*e5436536SAndroid Build Coastguard Worker typedef struct {
196*e5436536SAndroid Build Coastguard Worker   SCHAR bsXXXDataMode[MAX_PARAMETER_SETS];
197*e5436536SAndroid Build Coastguard Worker   SCHAR bsQuantCoarseXXX[MAX_PARAMETER_SETS];
198*e5436536SAndroid Build Coastguard Worker   SCHAR bsFreqResStrideXXX[MAX_PARAMETER_SETS];
199*e5436536SAndroid Build Coastguard Worker   SCHAR nocmpQuantCoarseXXX[MAX_PARAMETER_SETS];
200*e5436536SAndroid Build Coastguard Worker   LOSSLESSSTATE *state; /* Link to persistent state information */
201*e5436536SAndroid Build Coastguard Worker } LOSSLESSDATA;
202*e5436536SAndroid Build Coastguard Worker 
203*e5436536SAndroid Build Coastguard Worker struct SPATIAL_BS_FRAME_struct {
204*e5436536SAndroid Build Coastguard Worker   UCHAR bsIndependencyFlag;
205*e5436536SAndroid Build Coastguard Worker   UCHAR newBsData;
206*e5436536SAndroid Build Coastguard Worker   UCHAR numParameterSets;
207*e5436536SAndroid Build Coastguard Worker 
208*e5436536SAndroid Build Coastguard Worker   /*
209*e5436536SAndroid Build Coastguard Worker   If bsFramingType == 0, then the paramSlot[ps] for 0 <= ps < numParamSets is
210*e5436536SAndroid Build Coastguard Worker   calculated as follows: paramSlot[ps] = ceil(numSlots*(ps+1)/numParamSets) - 1
211*e5436536SAndroid Build Coastguard Worker   Otherwise, it is
212*e5436536SAndroid Build Coastguard Worker     paramSlot[ps] = bsParamSlot[ps]
213*e5436536SAndroid Build Coastguard Worker   */
214*e5436536SAndroid Build Coastguard Worker   INT paramSlot[MAX_PARAMETER_SETS];
215*e5436536SAndroid Build Coastguard Worker 
216*e5436536SAndroid Build Coastguard Worker   /* These arrays contain the compact indices, only one value per pbstride, only
217*e5436536SAndroid Build Coastguard Worker    * paramsets actually containing data. */
218*e5436536SAndroid Build Coastguard Worker   /* These values are written from the parser in ecDataDec() and read during
219*e5436536SAndroid Build Coastguard Worker    * decode in mapIndexData() */
220*e5436536SAndroid Build Coastguard Worker   SCHAR cmpOttCLDidx[MAX_NUM_OTT + MAX_NUM_OTT_AT][MAX_PARAMETER_SETS]
221*e5436536SAndroid Build Coastguard Worker                     [MAX_PARAMETER_BANDS];
222*e5436536SAndroid Build Coastguard Worker   SCHAR cmpOttICCidx[MAX_NUM_OTT][MAX_PARAMETER_SETS][MAX_PARAMETER_BANDS];
223*e5436536SAndroid Build Coastguard Worker 
224*e5436536SAndroid Build Coastguard Worker   /* Smoothing */
225*e5436536SAndroid Build Coastguard Worker   UCHAR bsSmoothMode[MAX_PARAMETER_SETS];
226*e5436536SAndroid Build Coastguard Worker   UCHAR bsSmoothTime[MAX_PARAMETER_SETS];
227*e5436536SAndroid Build Coastguard Worker   UCHAR bsFreqResStrideSmg[MAX_PARAMETER_SETS];
228*e5436536SAndroid Build Coastguard Worker   UCHAR bsSmgData[MAX_PARAMETER_SETS]
229*e5436536SAndroid Build Coastguard Worker                  [MAX_PARAMETER_BANDS]; /* smoothing flags, one if band is
230*e5436536SAndroid Build Coastguard Worker                                            smoothed, otherwise zero */
231*e5436536SAndroid Build Coastguard Worker 
232*e5436536SAndroid Build Coastguard Worker   /* Arbitrary Downmix */
233*e5436536SAndroid Build Coastguard Worker   SCHAR (*cmpArbdmxGainIdx)[MAX_PARAMETER_SETS][MAX_PARAMETER_BANDS];
234*e5436536SAndroid Build Coastguard Worker 
235*e5436536SAndroid Build Coastguard Worker   /* Lossless control */
236*e5436536SAndroid Build Coastguard Worker   LOSSLESSDATA *CLDLosslessData;
237*e5436536SAndroid Build Coastguard Worker   LOSSLESSDATA *ICCLosslessData;
238*e5436536SAndroid Build Coastguard Worker   /* LOSSLESSDATA *ADGLosslessData; -> is stored in CLDLosslessData[offset] */
239*e5436536SAndroid Build Coastguard Worker 
240*e5436536SAndroid Build Coastguard Worker   LOSSLESSDATA *IPDLosslessData;
241*e5436536SAndroid Build Coastguard Worker   SCHAR (*cmpOttIPDidx)[MAX_PARAMETER_SETS][MAX_PARAMETER_BANDS];
242*e5436536SAndroid Build Coastguard Worker   int phaseMode;
243*e5436536SAndroid Build Coastguard Worker   int OpdSmoothingMode;
244*e5436536SAndroid Build Coastguard Worker 
245*e5436536SAndroid Build Coastguard Worker   UCHAR tempShapeEnableChannelGES[MAX_OUTPUT_CHANNELS]; /*!< GES side info. */
246*e5436536SAndroid Build Coastguard Worker   UCHAR bsEnvShapeData[MAX_OUTPUT_CHANNELS]
247*e5436536SAndroid Build Coastguard Worker                       [MAX_TIME_SLOTS]; /*!< GES side info (quantized). */
248*e5436536SAndroid Build Coastguard Worker 
249*e5436536SAndroid Build Coastguard Worker   UCHAR tempShapeEnableChannelSTP[MAX_OUTPUT_CHANNELS]; /*!< STP side info. */
250*e5436536SAndroid Build Coastguard Worker 
251*e5436536SAndroid Build Coastguard Worker   TSD_DATA TsdData[1]; /*!< TSD data structure. */
252*e5436536SAndroid Build Coastguard Worker };
253*e5436536SAndroid Build Coastguard Worker 
254*e5436536SAndroid Build Coastguard Worker typedef struct {
255*e5436536SAndroid Build Coastguard Worker   /* Lossless state */
256*e5436536SAndroid Build Coastguard Worker   LOSSLESSSTATE CLDLosslessState[MAX_NUM_PARAMETERS];
257*e5436536SAndroid Build Coastguard Worker   LOSSLESSSTATE ICCLosslessState[MAX_NUM_PARAMETERS];
258*e5436536SAndroid Build Coastguard Worker   LOSSLESSSTATE IPDLosslessState[MAX_NUM_PARAMETERS];
259*e5436536SAndroid Build Coastguard Worker } BS_LL_STATE;
260*e5436536SAndroid Build Coastguard Worker 
261*e5436536SAndroid Build Coastguard Worker typedef struct {
262*e5436536SAndroid Build Coastguard Worker   int prevParamSlot;
263*e5436536SAndroid Build Coastguard Worker   int prevSmgTime;
264*e5436536SAndroid Build Coastguard Worker   UCHAR prevSmgData[MAX_PARAMETER_BANDS];
265*e5436536SAndroid Build Coastguard Worker 
266*e5436536SAndroid Build Coastguard Worker   FIXP_DBL opdLeftState__FDK[MAX_PARAMETER_BANDS];
267*e5436536SAndroid Build Coastguard Worker   FIXP_DBL opdRightState__FDK[MAX_PARAMETER_BANDS];
268*e5436536SAndroid Build Coastguard Worker 
269*e5436536SAndroid Build Coastguard Worker } SMOOTHING_STATE;
270*e5436536SAndroid Build Coastguard Worker 
271*e5436536SAndroid Build Coastguard Worker typedef struct {
272*e5436536SAndroid Build Coastguard Worker   FIXP_DBL alpha__FDK;
273*e5436536SAndroid Build Coastguard Worker   FIXP_DBL beta__FDK;
274*e5436536SAndroid Build Coastguard Worker   FIXP_DBL partNrgPrev__FDK[2 * MAX_OUTPUT_CHANNELS + MAX_INPUT_CHANNELS]
275*e5436536SAndroid Build Coastguard Worker                            [BB_ENV_SIZE];
276*e5436536SAndroid Build Coastguard Worker   FIXP_DBL normNrgPrev__FDK[2 * MAX_OUTPUT_CHANNELS + MAX_INPUT_CHANNELS];
277*e5436536SAndroid Build Coastguard Worker   FIXP_DBL frameNrgPrev__FDK[2 * MAX_OUTPUT_CHANNELS + MAX_INPUT_CHANNELS];
278*e5436536SAndroid Build Coastguard Worker   INT partNrgPrevSF[2 * MAX_OUTPUT_CHANNELS + MAX_INPUT_CHANNELS];
279*e5436536SAndroid Build Coastguard Worker   INT partNrgPrev2SF[2 * MAX_OUTPUT_CHANNELS + MAX_INPUT_CHANNELS];
280*e5436536SAndroid Build Coastguard Worker   INT normNrgPrevSF[2 * MAX_OUTPUT_CHANNELS + MAX_INPUT_CHANNELS];
281*e5436536SAndroid Build Coastguard Worker   INT frameNrgPrevSF[2 * MAX_OUTPUT_CHANNELS + MAX_INPUT_CHANNELS];
282*e5436536SAndroid Build Coastguard Worker } RESHAPE_BBENV_STATE;
283*e5436536SAndroid Build Coastguard Worker 
284*e5436536SAndroid Build Coastguard Worker typedef struct {
285*e5436536SAndroid Build Coastguard Worker   int maxNumInputChannels;
286*e5436536SAndroid Build Coastguard Worker   int maxNumOutputChannels;
287*e5436536SAndroid Build Coastguard Worker   int maxNumQmfBands;
288*e5436536SAndroid Build Coastguard Worker   int maxNumHybridBands;
289*e5436536SAndroid Build Coastguard Worker   int maxNumXChannels;
290*e5436536SAndroid Build Coastguard Worker   int maxNumVChannels;
291*e5436536SAndroid Build Coastguard Worker   int maxNumDecorChannels;
292*e5436536SAndroid Build Coastguard Worker   int maxNumCmplxQmfBands;
293*e5436536SAndroid Build Coastguard Worker   int maxNumCmplxHybBands;
294*e5436536SAndroid Build Coastguard Worker   int maxNumResChannels;
295*e5436536SAndroid Build Coastguard Worker   int bProcResidual; /* process residual */
296*e5436536SAndroid Build Coastguard Worker   int maxNumResidualChannels;
297*e5436536SAndroid Build Coastguard Worker   int maxNumOttBoxes;
298*e5436536SAndroid Build Coastguard Worker   int maxNumParams;
299*e5436536SAndroid Build Coastguard Worker 
300*e5436536SAndroid Build Coastguard Worker } SACDEC_CREATION_PARAMS;
301*e5436536SAndroid Build Coastguard Worker 
302*e5436536SAndroid Build Coastguard Worker struct spatialDec_struct {
303*e5436536SAndroid Build Coastguard Worker   SACDEC_ERROR
304*e5436536SAndroid Build Coastguard Worker   errInt;             /* Field to store internal errors.
305*e5436536SAndroid Build Coastguard Worker                          Will be clear at the very beginning of each process call. */
306*e5436536SAndroid Build Coastguard Worker   int staticDecScale; /* static scale of decoder */
307*e5436536SAndroid Build Coastguard Worker 
308*e5436536SAndroid Build Coastguard Worker   /* GENERAL */
309*e5436536SAndroid Build Coastguard Worker   int samplingFreq;       /* [Hz] */
310*e5436536SAndroid Build Coastguard Worker   CFG_LEVEL decoderLevel; /* 0..5 */
311*e5436536SAndroid Build Coastguard Worker   CFG_EXTENT decoderMode;
312*e5436536SAndroid Build Coastguard Worker   CFG_BINAURAL binauralMode;
313*e5436536SAndroid Build Coastguard Worker 
314*e5436536SAndroid Build Coastguard Worker   SACDEC_CREATION_PARAMS createParams;
315*e5436536SAndroid Build Coastguard Worker 
316*e5436536SAndroid Build Coastguard Worker   int numComplexProcessingBands;
317*e5436536SAndroid Build Coastguard Worker 
318*e5436536SAndroid Build Coastguard Worker   int treeConfig; /* TREE_5151 = 5151, TREE_5152 = 5152, TREE_525 = 525, defined
319*e5436536SAndroid Build Coastguard Worker                      in sac_bitdec.h */
320*e5436536SAndroid Build Coastguard Worker 
321*e5436536SAndroid Build Coastguard Worker   int numInputChannels;  /* 1 (M) or 2 (L,R) */
322*e5436536SAndroid Build Coastguard Worker   int numOutputChannels; /* 6 for 3/2.1 (FL,FR,FC,LF,BL,BR) */
323*e5436536SAndroid Build Coastguard Worker   int numOttBoxes;       /* number of ott boxes */
324*e5436536SAndroid Build Coastguard Worker   int numM2rows;
325*e5436536SAndroid Build Coastguard Worker 
326*e5436536SAndroid Build Coastguard Worker   int numOutputChannelsAT; /* Number of output channels after arbitrary tree
327*e5436536SAndroid Build Coastguard Worker                               processing */
328*e5436536SAndroid Build Coastguard Worker 
329*e5436536SAndroid Build Coastguard Worker   int quantMode; /* QUANT_FINE, QUANT_EBQ1, QUANT_EBQ2, defined in sac_bitdec.h
330*e5436536SAndroid Build Coastguard Worker                   */
331*e5436536SAndroid Build Coastguard Worker   int arbitraryDownmix; /* (arbitraryDownmix != 0) 1 arbitrary downmix data
332*e5436536SAndroid Build Coastguard Worker                            present, 2 arbitrary downmix residual data present*/
333*e5436536SAndroid Build Coastguard Worker   int residualCoding;   /* (residualCoding != 0) => residual coding data present
334*e5436536SAndroid Build Coastguard Worker                          */
335*e5436536SAndroid Build Coastguard Worker   UCHAR nrResidualFrame;
336*e5436536SAndroid Build Coastguard Worker   UCHAR nrArbDownmixResidualFrame;
337*e5436536SAndroid Build Coastguard Worker   FDK_BITSTREAM **hResidualBitstreams;
338*e5436536SAndroid Build Coastguard Worker   int tempShapeConfig; /* */
339*e5436536SAndroid Build Coastguard Worker   int decorrType;      /* Indicates to use PS or none PS decorrelator. */
340*e5436536SAndroid Build Coastguard Worker   int decorrConfig;    /* chosen decorrelator */
341*e5436536SAndroid Build Coastguard Worker   int envQuantMode;    /* quantization mode of envelope reshaping data */
342*e5436536SAndroid Build Coastguard Worker 
343*e5436536SAndroid Build Coastguard Worker   FIXP_DBL clipProtectGain__FDK; /* global gain for upmix */
344*e5436536SAndroid Build Coastguard Worker   char clipProtectGainSF__FDK;   /* global gain for upmix */
345*e5436536SAndroid Build Coastguard Worker 
346*e5436536SAndroid Build Coastguard Worker   /* Currently ignoring center decorr
347*e5436536SAndroid Build Coastguard Worker      numVChannels = numDirektSignals + numDecorSignals */
348*e5436536SAndroid Build Coastguard Worker   int numDirektSignals;  /* needed for W, Number of direkt signals 515 -> 1 525
349*e5436536SAndroid Build Coastguard Worker                             -> 3 */
350*e5436536SAndroid Build Coastguard Worker   int wStartResidualIdx; /* Where to start read residuals for W, = 0 for 515, =
351*e5436536SAndroid Build Coastguard Worker                             1 for 525 since one residual is used in V */
352*e5436536SAndroid Build Coastguard Worker   int numDecorSignals;   /* needed for W, Number of residual and decorrelated
353*e5436536SAndroid Build Coastguard Worker                             signals, = 2, 3 for center deccorelation*/
354*e5436536SAndroid Build Coastguard Worker   int numVChannels;      /* direct signals + decorelator signals */
355*e5436536SAndroid Build Coastguard Worker   int numXChannels;      /* direct input signals + TTT-residuals */
356*e5436536SAndroid Build Coastguard Worker 
357*e5436536SAndroid Build Coastguard Worker   int timeSlots;    /* length of spatial frame in QMF samples */
358*e5436536SAndroid Build Coastguard Worker   int curTimeSlot;  /* pointer to the current time slot used for hyperframing */
359*e5436536SAndroid Build Coastguard Worker   int prevTimeSlot; /*  */
360*e5436536SAndroid Build Coastguard Worker   int curPs;
361*e5436536SAndroid Build Coastguard Worker   int frameLength; /* number of output waveform samples/channel/frame */
362*e5436536SAndroid Build Coastguard Worker   UPMIXTYPE upmixType;
363*e5436536SAndroid Build Coastguard Worker   int partiallyComplex;
364*e5436536SAndroid Build Coastguard Worker   int useFDreverb;
365*e5436536SAndroid Build Coastguard Worker 
366*e5436536SAndroid Build Coastguard Worker   int bShareDelayWithSBR;
367*e5436536SAndroid Build Coastguard Worker 
368*e5436536SAndroid Build Coastguard Worker   int tp_hybBandBorder; /* Hybrid band indicating the HP filter cut-off. */
369*e5436536SAndroid Build Coastguard Worker 
370*e5436536SAndroid Build Coastguard Worker   /* FREQUENCY MAPPING */
371*e5436536SAndroid Build Coastguard Worker   int qmfBands;
372*e5436536SAndroid Build Coastguard Worker   int hybridBands;
373*e5436536SAndroid Build Coastguard Worker   const SCHAR *kernels; /* Mapping hybrid band to parameter band. */
374*e5436536SAndroid Build Coastguard Worker 
375*e5436536SAndroid Build Coastguard Worker   int TsdTs; /**< TSD QMF slot counter 0<= ts < numSlots */
376*e5436536SAndroid Build Coastguard Worker 
377*e5436536SAndroid Build Coastguard Worker   int *param2hyb; /* Mapping parameter bands to hybrid bands */
378*e5436536SAndroid Build Coastguard Worker   int kernels_width[MAX_PARAMETER_BANDS]; /* Mapping parmeter band to hybrid
379*e5436536SAndroid Build Coastguard Worker                                              band offsets. */
380*e5436536SAndroid Build Coastguard Worker 
381*e5436536SAndroid Build Coastguard Worker   /* Residual coding */
382*e5436536SAndroid Build Coastguard Worker   int residualSamplingFreq;
383*e5436536SAndroid Build Coastguard Worker   UCHAR residualPresent[MAX_NUM_OTT + MAX_NUM_TTT];
384*e5436536SAndroid Build Coastguard Worker   UCHAR residualBands[MAX_NUM_OTT + MAX_NUM_TTT];    /* 0, if no residual data
385*e5436536SAndroid Build Coastguard Worker                                                         present for this box */
386*e5436536SAndroid Build Coastguard Worker   UCHAR residualQMFBands[MAX_NUM_OTT + MAX_NUM_TTT]; /* needed for optimized
387*e5436536SAndroid Build Coastguard Worker                                                         mdct2qmf calculation */
388*e5436536SAndroid Build Coastguard Worker   SPATIAL_SPECIFIC_CONFIG *pConfigCurrent;
389*e5436536SAndroid Build Coastguard Worker 
390*e5436536SAndroid Build Coastguard Worker   int arbdmxFramesPerSpatialFrame;
391*e5436536SAndroid Build Coastguard Worker   int arbdmxUpdQMF;
392*e5436536SAndroid Build Coastguard Worker 
393*e5436536SAndroid Build Coastguard Worker   int numParameterBands; /* Number of parameter bands 40, 28, 20, 14, 10, ...
394*e5436536SAndroid Build Coastguard Worker                             .*/
395*e5436536SAndroid Build Coastguard Worker   int bitstreamParameterBands;
396*e5436536SAndroid Build Coastguard Worker   int *numOttBands; /* number of bands for each ott, is != numParameterBands for
397*e5436536SAndroid Build Coastguard Worker                        LFEs */
398*e5436536SAndroid Build Coastguard Worker 
399*e5436536SAndroid Build Coastguard Worker   /* 1 MAPPING */
400*e5436536SAndroid Build Coastguard Worker   UCHAR extendFrame;
401*e5436536SAndroid Build Coastguard Worker   UCHAR numParameterSetsPrev;
402*e5436536SAndroid Build Coastguard Worker 
403*e5436536SAndroid Build Coastguard Worker   int *smgTime;
404*e5436536SAndroid Build Coastguard Worker   UCHAR **smgData;
405*e5436536SAndroid Build Coastguard Worker 
406*e5436536SAndroid Build Coastguard Worker   /* PARAMETER DATA decoded and dequantized */
407*e5436536SAndroid Build Coastguard Worker 
408*e5436536SAndroid Build Coastguard Worker   /* Last parameters from prev frame required during decode in mapIndexData()
409*e5436536SAndroid Build Coastguard Worker    * and not touched during parse */
410*e5436536SAndroid Build Coastguard Worker   SCHAR **ottCLDidxPrev;
411*e5436536SAndroid Build Coastguard Worker   SCHAR **ottICCidxPrev;
412*e5436536SAndroid Build Coastguard Worker   SCHAR **arbdmxGainIdxPrev;
413*e5436536SAndroid Build Coastguard Worker   SCHAR **ottIPDidxPrev;
414*e5436536SAndroid Build Coastguard Worker   SCHAR ***outIdxData; /* is this really persistent memory ? */
415*e5436536SAndroid Build Coastguard Worker 
416*e5436536SAndroid Build Coastguard Worker   /* State mem required during parse in SpatialDecParseFrameData() */
417*e5436536SAndroid Build Coastguard Worker   SCHAR **cmpOttCLDidxPrev;
418*e5436536SAndroid Build Coastguard Worker   SCHAR **cmpOttICCidxPrev;
419*e5436536SAndroid Build Coastguard Worker   SCHAR ***ottICCdiffidx;
420*e5436536SAndroid Build Coastguard Worker   SCHAR **cmpOttIPDidxPrev;
421*e5436536SAndroid Build Coastguard Worker 
422*e5436536SAndroid Build Coastguard Worker   /* State mem required in parseArbitraryDownmixData */
423*e5436536SAndroid Build Coastguard Worker   SCHAR **cmpArbdmxGainIdxPrev;
424*e5436536SAndroid Build Coastguard Worker 
425*e5436536SAndroid Build Coastguard Worker   SCHAR ***ottCLD__FDK;
426*e5436536SAndroid Build Coastguard Worker   SCHAR ***ottICC__FDK;
427*e5436536SAndroid Build Coastguard Worker 
428*e5436536SAndroid Build Coastguard Worker   SCHAR ***arbdmxGain__FDK; /* Holds the artistic downmix correction index.*/
429*e5436536SAndroid Build Coastguard Worker 
430*e5436536SAndroid Build Coastguard Worker   FIXP_DBL *arbdmxAlpha__FDK;
431*e5436536SAndroid Build Coastguard Worker   FIXP_DBL *arbdmxAlphaPrev__FDK;
432*e5436536SAndroid Build Coastguard Worker 
433*e5436536SAndroid Build Coastguard Worker   UCHAR stereoConfigIndex;
434*e5436536SAndroid Build Coastguard Worker   int highRateMode;
435*e5436536SAndroid Build Coastguard Worker 
436*e5436536SAndroid Build Coastguard Worker   int phaseCoding;
437*e5436536SAndroid Build Coastguard Worker 
438*e5436536SAndroid Build Coastguard Worker   SCHAR ***ottIPD__FDK;
439*e5436536SAndroid Build Coastguard Worker 
440*e5436536SAndroid Build Coastguard Worker   FIXP_DBL PhaseLeft__FDK[MAX_PARAMETER_BANDS];
441*e5436536SAndroid Build Coastguard Worker   FIXP_DBL PhaseRight__FDK[MAX_PARAMETER_BANDS];
442*e5436536SAndroid Build Coastguard Worker   FIXP_DBL PhasePrevLeft__FDK[MAX_PARAMETER_BANDS];
443*e5436536SAndroid Build Coastguard Worker   FIXP_DBL PhasePrevRight__FDK[MAX_PARAMETER_BANDS];
444*e5436536SAndroid Build Coastguard Worker   int numOttBandsIPD;
445*e5436536SAndroid Build Coastguard Worker 
446*e5436536SAndroid Build Coastguard Worker   /* GAIN MATRICIES FOR CURRENT and PREVIOUS PARMATER SET(s)*/
447*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***M2Real__FDK;
448*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***M2Imag__FDK;
449*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***M2RealPrev__FDK;
450*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***M2ImagPrev__FDK;
451*e5436536SAndroid Build Coastguard Worker 
452*e5436536SAndroid Build Coastguard Worker   /* INPUT SIGNALS */
453*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***qmfInputRealDelayBuffer__FDK;
454*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***qmfInputImagDelayBuffer__FDK;
455*e5436536SAndroid Build Coastguard Worker 
456*e5436536SAndroid Build Coastguard Worker   int pc_filterdelay; /* additional delay to align HQ with LP before hybird
457*e5436536SAndroid Build Coastguard Worker                          analysis */
458*e5436536SAndroid Build Coastguard Worker   int qmfInputDelayBufPos;
459*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **qmfInputReal__FDK;
460*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **qmfInputImag__FDK;
461*e5436536SAndroid Build Coastguard Worker 
462*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybInputReal__FDK;
463*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybInputImag__FDK;
464*e5436536SAndroid Build Coastguard Worker 
465*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **binInputReverb;
466*e5436536SAndroid Build Coastguard Worker 
467*e5436536SAndroid Build Coastguard Worker   FIXP_DBL binGain, reverbGain;
468*e5436536SAndroid Build Coastguard Worker   FIXP_DBL binCenterGain, reverbCenterGain;
469*e5436536SAndroid Build Coastguard Worker 
470*e5436536SAndroid Build Coastguard Worker   /* RESIDUAL SIGNALS */
471*e5436536SAndroid Build Coastguard Worker 
472*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***qmfResidualReal__FDK;
473*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***qmfResidualImag__FDK;
474*e5436536SAndroid Build Coastguard Worker 
475*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybResidualReal__FDK;
476*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybResidualImag__FDK;
477*e5436536SAndroid Build Coastguard Worker 
478*e5436536SAndroid Build Coastguard Worker   int qmfOutputRealDryDelayBufPos;
479*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***qmfOutputRealDryDelayBuffer__FDK;
480*e5436536SAndroid Build Coastguard Worker   FIXP_DBL ***qmfOutputImagDryFilterBuffer__FDK;
481*e5436536SAndroid Build Coastguard Worker   FIXP_DBL *qmfOutputImagDryFilterBufferBase__FDK;
482*e5436536SAndroid Build Coastguard Worker 
483*e5436536SAndroid Build Coastguard Worker   /* TEMPORARY SIGNALS */
484*e5436536SAndroid Build Coastguard Worker 
485*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **wReal__FDK;
486*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **wImag__FDK;
487*e5436536SAndroid Build Coastguard Worker 
488*e5436536SAndroid Build Coastguard Worker   /* OUTPUT SIGNALS */
489*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybOutputRealDry__FDK;
490*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybOutputImagDry__FDK;
491*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybOutputRealWet__FDK;
492*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **hybOutputImagWet__FDK;
493*e5436536SAndroid Build Coastguard Worker   PCM_MPS *timeOut__FDK;
494*e5436536SAndroid Build Coastguard Worker 
495*e5436536SAndroid Build Coastguard Worker   HANDLE_FDK_QMF_DOMAIN pQmfDomain;
496*e5436536SAndroid Build Coastguard Worker 
497*e5436536SAndroid Build Coastguard Worker   FDK_ANA_HYB_FILTER
498*e5436536SAndroid Build Coastguard Worker   *hybridAnalysis; /*!< pointer Analysis hybrid filterbank array. */
499*e5436536SAndroid Build Coastguard Worker   FDK_SYN_HYB_FILTER
500*e5436536SAndroid Build Coastguard Worker   *hybridSynthesis; /*!< pointer Synthesis hybrid filterbank array. */
501*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **
502*e5436536SAndroid Build Coastguard Worker       pHybridAnaStatesLFdmx; /*!< pointer to analysis hybrid filter states LF */
503*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **
504*e5436536SAndroid Build Coastguard Worker       pHybridAnaStatesHFdmx; /*!< pointer to analysis hybrid filter states HF */
505*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **
506*e5436536SAndroid Build Coastguard Worker       pHybridAnaStatesLFres; /*!< pointer to analysis hybrid filter states LF */
507*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **
508*e5436536SAndroid Build Coastguard Worker       pHybridAnaStatesHFres; /*!< pointer to analysis hybrid filter states HF */
509*e5436536SAndroid Build Coastguard Worker 
510*e5436536SAndroid Build Coastguard Worker   DECORR_DEC *apDecor; /*!< pointer decorrelator array. */
511*e5436536SAndroid Build Coastguard Worker   FIXP_DBL **pDecorBufferCplx;
512*e5436536SAndroid Build Coastguard Worker 
513*e5436536SAndroid Build Coastguard Worker   SMOOTHING_STATE *smoothState; /*!< Pointer to smoothing states. */
514*e5436536SAndroid Build Coastguard Worker 
515*e5436536SAndroid Build Coastguard Worker   RESHAPE_BBENV_STATE *reshapeBBEnvState; /*!< GES handle. */
516*e5436536SAndroid Build Coastguard Worker   SCHAR row2channelDmxGES[MAX_OUTPUT_CHANNELS];
517*e5436536SAndroid Build Coastguard Worker 
518*e5436536SAndroid Build Coastguard Worker   HANDLE_STP_DEC hStpDec; /*!< STP handle. */
519*e5436536SAndroid Build Coastguard Worker 
520*e5436536SAndroid Build Coastguard Worker   const UCHAR *pActivM2ParamBands;
521*e5436536SAndroid Build Coastguard Worker 
522*e5436536SAndroid Build Coastguard Worker   int bOverwriteM1M2prev; /* Overwrite previous M2/M2 params with first set of
523*e5436536SAndroid Build Coastguard Worker                              new frame after SSC change (aka
524*e5436536SAndroid Build Coastguard Worker                              decodeAfterConfigHasChangedFlag). */
525*e5436536SAndroid Build Coastguard Worker   SpatialDecConcealmentInfo concealInfo;
526*e5436536SAndroid Build Coastguard Worker 
527*e5436536SAndroid Build Coastguard Worker   INT sacInDataHeadroom; /* Headroom of the SAC input time signal to prevent
528*e5436536SAndroid Build Coastguard Worker                             clipping */
529*e5436536SAndroid Build Coastguard Worker };
530*e5436536SAndroid Build Coastguard Worker 
531*e5436536SAndroid Build Coastguard Worker #define SACDEC_SYNTAX_MPS 1
532*e5436536SAndroid Build Coastguard Worker #define SACDEC_SYNTAX_USAC 2
533*e5436536SAndroid Build Coastguard Worker #define SACDEC_SYNTAX_RSVD50 4
534*e5436536SAndroid Build Coastguard Worker #define SACDEC_SYNTAX_L2 8
535*e5436536SAndroid Build Coastguard Worker #define SACDEC_SYNTAX_L3 16
536*e5436536SAndroid Build Coastguard Worker #define SACDEC_SYNTAX_LD 32
537*e5436536SAndroid Build Coastguard Worker 
GetProcBand(spatialDec_struct * self,int qs)538*e5436536SAndroid Build Coastguard Worker static inline int GetProcBand(spatialDec_struct *self, int qs) {
539*e5436536SAndroid Build Coastguard Worker   return self->kernels[qs];
540*e5436536SAndroid Build Coastguard Worker }
541*e5436536SAndroid Build Coastguard Worker 
542*e5436536SAndroid Build Coastguard Worker #endif /* SAC_DEC_H */
543