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