xref: /aosp_15_r20/external/aac/libAACdec/src/channelinfo.h (revision e54365361535b070c2db7374cec45c159c7d0e7a)
1*e5436536SAndroid Build Coastguard Worker /* -----------------------------------------------------------------------------
2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android
3*e5436536SAndroid Build Coastguard Worker 
4*e5436536SAndroid Build Coastguard Worker © Copyright  1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten
5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved.
6*e5436536SAndroid Build Coastguard Worker 
7*e5436536SAndroid Build Coastguard Worker  1.    INTRODUCTION
8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software
9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on
11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices.
12*e5436536SAndroid Build Coastguard Worker 
13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing
15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely
16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG
17*e5436536SAndroid Build Coastguard Worker specifications.
18*e5436536SAndroid Build Coastguard Worker 
19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including
20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing
21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for
22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant
23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of
24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or
25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may
26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those
27*e5436536SAndroid Build Coastguard Worker licensed purposes only.
28*e5436536SAndroid Build Coastguard Worker 
29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions
30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are
31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications
32*e5436536SAndroid Build Coastguard Worker information and documentation.
33*e5436536SAndroid Build Coastguard Worker 
34*e5436536SAndroid Build Coastguard Worker 2.    COPYRIGHT LICENSE
35*e5436536SAndroid Build Coastguard Worker 
36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification,
37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you
38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions:
39*e5436536SAndroid Build Coastguard Worker 
40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of
41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form.
42*e5436536SAndroid Build Coastguard Worker 
43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation
44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or
45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of
46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your
47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form.
48*e5436536SAndroid Build Coastguard Worker 
49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived
50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission.
51*e5436536SAndroid Build Coastguard Worker 
52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute
53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto.
54*e5436536SAndroid Build Coastguard Worker 
55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating
56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions
57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android"
58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android."
60*e5436536SAndroid Build Coastguard Worker 
61*e5436536SAndroid Build Coastguard Worker 3.    NO PATENT LICENSE
62*e5436536SAndroid Build Coastguard Worker 
63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without
64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE.
65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this
66*e5436536SAndroid Build Coastguard Worker software.
67*e5436536SAndroid Build Coastguard Worker 
68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for
69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses.
70*e5436536SAndroid Build Coastguard Worker 
71*e5436536SAndroid Build Coastguard Worker 4.    DISCLAIMER
72*e5436536SAndroid Build Coastguard Worker 
73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright
74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and
76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary,
78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute
79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption,
80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict
81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of
82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage.
83*e5436536SAndroid Build Coastguard Worker 
84*e5436536SAndroid Build Coastguard Worker 5.    CONTACT INFORMATION
85*e5436536SAndroid Build Coastguard Worker 
86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS
87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL
88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33
89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany
90*e5436536SAndroid Build Coastguard Worker 
91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm
92*e5436536SAndroid Build Coastguard Worker [email protected]
93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */
94*e5436536SAndroid Build Coastguard Worker 
95*e5436536SAndroid Build Coastguard Worker /**************************** AAC decoder library ******************************
96*e5436536SAndroid Build Coastguard Worker 
97*e5436536SAndroid Build Coastguard Worker    Author(s):   Josef Hoepfl
98*e5436536SAndroid Build Coastguard Worker 
99*e5436536SAndroid Build Coastguard Worker    Description: individual channel stream info
100*e5436536SAndroid Build Coastguard Worker 
101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
102*e5436536SAndroid Build Coastguard Worker 
103*e5436536SAndroid Build Coastguard Worker #ifndef CHANNELINFO_H
104*e5436536SAndroid Build Coastguard Worker #define CHANNELINFO_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 "aac_rom.h"
109*e5436536SAndroid Build Coastguard Worker #include "aacdecoder_lib.h"
110*e5436536SAndroid Build Coastguard Worker #include "FDK_bitstream.h"
111*e5436536SAndroid Build Coastguard Worker #include "overlapadd.h"
112*e5436536SAndroid Build Coastguard Worker 
113*e5436536SAndroid Build Coastguard Worker #include "mdct.h"
114*e5436536SAndroid Build Coastguard Worker #include "stereo.h"
115*e5436536SAndroid Build Coastguard Worker #include "pulsedata.h"
116*e5436536SAndroid Build Coastguard Worker #include "aacdec_tns.h"
117*e5436536SAndroid Build Coastguard Worker 
118*e5436536SAndroid Build Coastguard Worker #include "aacdec_pns.h"
119*e5436536SAndroid Build Coastguard Worker 
120*e5436536SAndroid Build Coastguard Worker #include "aacdec_hcr_types.h"
121*e5436536SAndroid Build Coastguard Worker #include "rvlc_info.h"
122*e5436536SAndroid Build Coastguard Worker 
123*e5436536SAndroid Build Coastguard Worker #include "usacdec_acelp.h"
124*e5436536SAndroid Build Coastguard Worker #include "usacdec_const.h"
125*e5436536SAndroid Build Coastguard Worker #include "usacdec_rom.h"
126*e5436536SAndroid Build Coastguard Worker 
127*e5436536SAndroid Build Coastguard Worker #include "ac_arith_coder.h"
128*e5436536SAndroid Build Coastguard Worker 
129*e5436536SAndroid Build Coastguard Worker #include "conceal_types.h"
130*e5436536SAndroid Build Coastguard Worker 
131*e5436536SAndroid Build Coastguard Worker #include "aacdec_drc_types.h"
132*e5436536SAndroid Build Coastguard Worker 
133*e5436536SAndroid Build Coastguard Worker #define WB_SECTION_SIZE (1024 * 2)
134*e5436536SAndroid Build Coastguard Worker 
135*e5436536SAndroid Build Coastguard Worker #define DRM_BS_BUFFER_SIZE                                                 \
136*e5436536SAndroid Build Coastguard Worker   (512) /* size of the dynamic buffer which is used to reverse the bits of \
137*e5436536SAndroid Build Coastguard Worker            the DRM SBR payload */
138*e5436536SAndroid Build Coastguard Worker 
139*e5436536SAndroid Build Coastguard Worker /* Output rendering mode */
140*e5436536SAndroid Build Coastguard Worker typedef enum {
141*e5436536SAndroid Build Coastguard Worker   AACDEC_RENDER_INVALID = 0,
142*e5436536SAndroid Build Coastguard Worker   AACDEC_RENDER_IMDCT,
143*e5436536SAndroid Build Coastguard Worker   AACDEC_RENDER_ELDFB,
144*e5436536SAndroid Build Coastguard Worker   AACDEC_RENDER_LPD,
145*e5436536SAndroid Build Coastguard Worker   AACDEC_RENDER_INTIMDCT
146*e5436536SAndroid Build Coastguard Worker } AACDEC_RENDER_MODE;
147*e5436536SAndroid Build Coastguard Worker 
148*e5436536SAndroid Build Coastguard Worker enum { MAX_QUANTIZED_VALUE = 8191 };
149*e5436536SAndroid Build Coastguard Worker 
150*e5436536SAndroid Build Coastguard Worker typedef enum { FD_LONG, FD_SHORT, LPD } USAC_COREMODE;
151*e5436536SAndroid Build Coastguard Worker 
152*e5436536SAndroid Build Coastguard Worker typedef struct {
153*e5436536SAndroid Build Coastguard Worker   const SHORT *ScaleFactorBands_Long;
154*e5436536SAndroid Build Coastguard Worker   const SHORT *ScaleFactorBands_Short;
155*e5436536SAndroid Build Coastguard Worker   UCHAR NumberOfScaleFactorBands_Long;
156*e5436536SAndroid Build Coastguard Worker   UCHAR NumberOfScaleFactorBands_Short;
157*e5436536SAndroid Build Coastguard Worker   UINT samplingRateIndex;
158*e5436536SAndroid Build Coastguard Worker   UINT samplingRate;
159*e5436536SAndroid Build Coastguard Worker } SamplingRateInfo;
160*e5436536SAndroid Build Coastguard Worker 
161*e5436536SAndroid Build Coastguard Worker typedef struct {
162*e5436536SAndroid Build Coastguard Worker   UCHAR CommonWindow;
163*e5436536SAndroid Build Coastguard Worker   UCHAR GlobalGain;
164*e5436536SAndroid Build Coastguard Worker 
165*e5436536SAndroid Build Coastguard Worker } CRawDataInfo;
166*e5436536SAndroid Build Coastguard Worker 
167*e5436536SAndroid Build Coastguard Worker typedef struct {
168*e5436536SAndroid Build Coastguard Worker   UCHAR WindowGroupLength[8];
169*e5436536SAndroid Build Coastguard Worker   UCHAR WindowGroups;
170*e5436536SAndroid Build Coastguard Worker   UCHAR Valid;
171*e5436536SAndroid Build Coastguard Worker 
172*e5436536SAndroid Build Coastguard Worker   UCHAR WindowShape;         /* 0: sine window, 1: KBD, 2: low overlap */
173*e5436536SAndroid Build Coastguard Worker   BLOCK_TYPE WindowSequence; /* mdct.h; 0: long, 1: start, 2: short, 3: stop */
174*e5436536SAndroid Build Coastguard Worker   UCHAR MaxSfBands;
175*e5436536SAndroid Build Coastguard Worker   UCHAR max_sfb_ste;
176*e5436536SAndroid Build Coastguard Worker   UCHAR ScaleFactorGrouping;
177*e5436536SAndroid Build Coastguard Worker 
178*e5436536SAndroid Build Coastguard Worker   UCHAR TotalSfBands;
179*e5436536SAndroid Build Coastguard Worker 
180*e5436536SAndroid Build Coastguard Worker } CIcsInfo;
181*e5436536SAndroid Build Coastguard Worker 
182*e5436536SAndroid Build Coastguard Worker enum {
183*e5436536SAndroid Build Coastguard Worker   ZERO_HCB = 0,
184*e5436536SAndroid Build Coastguard Worker   ESCBOOK = 11,
185*e5436536SAndroid Build Coastguard Worker   NSPECBOOKS = ESCBOOK + 1,
186*e5436536SAndroid Build Coastguard Worker   BOOKSCL = NSPECBOOKS,
187*e5436536SAndroid Build Coastguard Worker   NOISE_HCB = 13,
188*e5436536SAndroid Build Coastguard Worker   INTENSITY_HCB2 = 14,
189*e5436536SAndroid Build Coastguard Worker   INTENSITY_HCB = 15,
190*e5436536SAndroid Build Coastguard Worker   LAST_HCB
191*e5436536SAndroid Build Coastguard Worker };
192*e5436536SAndroid Build Coastguard Worker 
193*e5436536SAndroid Build Coastguard Worker /* This struct holds the persistent data shared by both channels of a CPE.
194*e5436536SAndroid Build Coastguard Worker    It needs to be allocated for each CPE. */
195*e5436536SAndroid Build Coastguard Worker typedef struct {
196*e5436536SAndroid Build Coastguard Worker   CJointStereoPersistentData jointStereoPersistentData;
197*e5436536SAndroid Build Coastguard Worker } CpePersistentData;
198*e5436536SAndroid Build Coastguard Worker 
199*e5436536SAndroid Build Coastguard Worker /*
200*e5436536SAndroid Build Coastguard Worker  * This struct must be allocated one for every channel and must be persistent.
201*e5436536SAndroid Build Coastguard Worker  */
202*e5436536SAndroid Build Coastguard Worker typedef struct {
203*e5436536SAndroid Build Coastguard Worker   FIXP_DBL *pOverlapBuffer;
204*e5436536SAndroid Build Coastguard Worker   mdct_t IMdct;
205*e5436536SAndroid Build Coastguard Worker 
206*e5436536SAndroid Build Coastguard Worker   CArcoData *hArCo;
207*e5436536SAndroid Build Coastguard Worker 
208*e5436536SAndroid Build Coastguard Worker   INT pnsCurrentSeed;
209*e5436536SAndroid Build Coastguard Worker 
210*e5436536SAndroid Build Coastguard Worker   /* LPD memory */
211*e5436536SAndroid Build Coastguard Worker   FIXP_DBL old_synth[PIT_MAX_MAX - L_SUBFR];
212*e5436536SAndroid Build Coastguard Worker   INT old_T_pf[SYN_SFD];
213*e5436536SAndroid Build Coastguard Worker   FIXP_DBL old_gain_pf[SYN_SFD];
214*e5436536SAndroid Build Coastguard Worker   FIXP_DBL mem_bpf[L_FILT + L_SUBFR];
215*e5436536SAndroid Build Coastguard Worker   UCHAR
216*e5436536SAndroid Build Coastguard Worker   old_bpf_control_info; /* (1: enable, 0: disable) bpf for past superframe
217*e5436536SAndroid Build Coastguard Worker                          */
218*e5436536SAndroid Build Coastguard Worker 
219*e5436536SAndroid Build Coastguard Worker   USAC_COREMODE last_core_mode; /* core mode used by the decoder in previous
220*e5436536SAndroid Build Coastguard Worker                                    frame. (not signalled by the bitstream, see
221*e5436536SAndroid Build Coastguard Worker                                    CAacDecoderChannelInfo::core_mode_last !! )
222*e5436536SAndroid Build Coastguard Worker                                  */
223*e5436536SAndroid Build Coastguard Worker   UCHAR last_lpd_mode;      /* LPD mode used by the decoder in last LPD subframe
224*e5436536SAndroid Build Coastguard Worker                                 (not signalled by the bitstream, see
225*e5436536SAndroid Build Coastguard Worker                                CAacDecoderChannelInfo::lpd_mode_last !! ) */
226*e5436536SAndroid Build Coastguard Worker   UCHAR last_last_lpd_mode; /* LPD mode used in second last LPD subframe
227*e5436536SAndroid Build Coastguard Worker                                 (not signalled by the bitstream) */
228*e5436536SAndroid Build Coastguard Worker   UCHAR last_lpc_lost;      /* Flag indicating that the previous LPC is lost */
229*e5436536SAndroid Build Coastguard Worker 
230*e5436536SAndroid Build Coastguard Worker   FIXP_LPC
231*e5436536SAndroid Build Coastguard Worker   lpc4_lsf[M_LP_FILTER_ORDER]; /* Last LPC4 coefficients in LSF domain. */
232*e5436536SAndroid Build Coastguard Worker   FIXP_LPC lsf_adaptive_mean[M_LP_FILTER_ORDER]; /* Adaptive mean of LPC
233*e5436536SAndroid Build Coastguard Worker                                                     coefficients in LSF domain
234*e5436536SAndroid Build Coastguard Worker                                                     for concealment. */
235*e5436536SAndroid Build Coastguard Worker   FIXP_LPC lp_coeff_old[2][M_LP_FILTER_ORDER];   /* Last LPC coefficients in LP
236*e5436536SAndroid Build Coastguard Worker                                     domain. lp_coeff_old[0] is lpc4 (coeffs for
237*e5436536SAndroid Build Coastguard Worker                                     right folding point of last tcx frame),
238*e5436536SAndroid Build Coastguard Worker                                     lp_coeff_old[1] are coeffs for left folding
239*e5436536SAndroid Build Coastguard Worker                                     point of last tcx frame */
240*e5436536SAndroid Build Coastguard Worker   INT lp_coeff_old_exp[2];
241*e5436536SAndroid Build Coastguard Worker 
242*e5436536SAndroid Build Coastguard Worker   FIXP_SGL
243*e5436536SAndroid Build Coastguard Worker   oldStability; /* LPC coeff stability value from last frame (required for
244*e5436536SAndroid Build Coastguard Worker                    TCX concealment). */
245*e5436536SAndroid Build Coastguard Worker   UINT numLostLpdFrames; /* Number of consecutive lost subframes. */
246*e5436536SAndroid Build Coastguard Worker 
247*e5436536SAndroid Build Coastguard Worker   /* TCX memory */
248*e5436536SAndroid Build Coastguard Worker   FIXP_DBL last_tcx_gain;
249*e5436536SAndroid Build Coastguard Worker   INT last_tcx_gain_e;
250*e5436536SAndroid Build Coastguard Worker   FIXP_DBL last_alfd_gains[32]; /* Scaled by one bit. */
251*e5436536SAndroid Build Coastguard Worker   SHORT last_tcx_pitch;
252*e5436536SAndroid Build Coastguard Worker   UCHAR last_tcx_noise_factor;
253*e5436536SAndroid Build Coastguard Worker 
254*e5436536SAndroid Build Coastguard Worker   /* ACELP memory */
255*e5436536SAndroid Build Coastguard Worker   CAcelpStaticMem acelp;
256*e5436536SAndroid Build Coastguard Worker 
257*e5436536SAndroid Build Coastguard Worker   ULONG nfRandomSeed; /* seed value for USAC noise filling random generator */
258*e5436536SAndroid Build Coastguard Worker 
259*e5436536SAndroid Build Coastguard Worker   CDrcChannelData drcData;
260*e5436536SAndroid Build Coastguard Worker   CConcealmentInfo concealmentInfo;
261*e5436536SAndroid Build Coastguard Worker 
262*e5436536SAndroid Build Coastguard Worker   CpePersistentData *pCpeStaticData;
263*e5436536SAndroid Build Coastguard Worker 
264*e5436536SAndroid Build Coastguard Worker } CAacDecoderStaticChannelInfo;
265*e5436536SAndroid Build Coastguard Worker 
266*e5436536SAndroid Build Coastguard Worker /*
267*e5436536SAndroid Build Coastguard Worker  * This union must be allocated for every element (up to 2 channels).
268*e5436536SAndroid Build Coastguard Worker  */
269*e5436536SAndroid Build Coastguard Worker typedef struct {
270*e5436536SAndroid Build Coastguard Worker   /* Common bit stream data */
271*e5436536SAndroid Build Coastguard Worker   SHORT aScaleFactor[(
272*e5436536SAndroid Build Coastguard Worker       8 * 16)]; /* Spectral scale factors for each sfb in each window. */
273*e5436536SAndroid Build Coastguard Worker   SHORT aSfbScale[(8 * 16)]; /* could be free after ApplyTools() */
274*e5436536SAndroid Build Coastguard Worker   UCHAR
275*e5436536SAndroid Build Coastguard Worker   aCodeBook[(8 * 16)]; /* section data: codebook for each window and sfb. */
276*e5436536SAndroid Build Coastguard Worker   UCHAR band_is_noise[(8 * 16)];
277*e5436536SAndroid Build Coastguard Worker   CTnsData TnsData;
278*e5436536SAndroid Build Coastguard Worker   CRawDataInfo RawDataInfo;
279*e5436536SAndroid Build Coastguard Worker 
280*e5436536SAndroid Build Coastguard Worker   shouldBeUnion {
281*e5436536SAndroid Build Coastguard Worker     struct {
282*e5436536SAndroid Build Coastguard Worker       CPulseData PulseData;
283*e5436536SAndroid Build Coastguard Worker       SHORT aNumLineInSec4Hcr[MAX_SFB_HCR]; /* needed once for all channels
284*e5436536SAndroid Build Coastguard Worker                                                except for Drm syntax */
285*e5436536SAndroid Build Coastguard Worker       UCHAR
286*e5436536SAndroid Build Coastguard Worker       aCodeBooks4Hcr[MAX_SFB_HCR]; /* needed once for all channels except for
287*e5436536SAndroid Build Coastguard Worker                                       Drm syntax. Same as "aCodeBook" ? */
288*e5436536SAndroid Build Coastguard Worker       SHORT lenOfReorderedSpectralData;
289*e5436536SAndroid Build Coastguard Worker       SCHAR lenOfLongestCodeword;
290*e5436536SAndroid Build Coastguard Worker       SCHAR numberSection;
291*e5436536SAndroid Build Coastguard Worker       SCHAR rvlcCurrentScaleFactorOK;
292*e5436536SAndroid Build Coastguard Worker       SCHAR rvlcIntensityUsed;
293*e5436536SAndroid Build Coastguard Worker     } aac;
294*e5436536SAndroid Build Coastguard Worker     struct {
295*e5436536SAndroid Build Coastguard Worker       UCHAR fd_noise_level_and_offset;
296*e5436536SAndroid Build Coastguard Worker       UCHAR tns_active;
297*e5436536SAndroid Build Coastguard Worker       UCHAR tns_on_lr;
298*e5436536SAndroid Build Coastguard Worker       UCHAR tcx_noise_factor[4];
299*e5436536SAndroid Build Coastguard Worker       UCHAR tcx_global_gain[4];
300*e5436536SAndroid Build Coastguard Worker     } usac;
301*e5436536SAndroid Build Coastguard Worker   }
302*e5436536SAndroid Build Coastguard Worker   specificTo;
303*e5436536SAndroid Build Coastguard Worker 
304*e5436536SAndroid Build Coastguard Worker } CAacDecoderDynamicData;
305*e5436536SAndroid Build Coastguard Worker 
306*e5436536SAndroid Build Coastguard Worker typedef shouldBeUnion {
307*e5436536SAndroid Build Coastguard Worker   UCHAR DrmBsBuffer[DRM_BS_BUFFER_SIZE];
308*e5436536SAndroid Build Coastguard Worker 
309*e5436536SAndroid Build Coastguard Worker   /* Common signal data, can be used once the bit stream data from above is not
310*e5436536SAndroid Build Coastguard Worker    * used anymore. */
311*e5436536SAndroid Build Coastguard Worker   FIXP_DBL mdctOutTemp[1024];
312*e5436536SAndroid Build Coastguard Worker 
313*e5436536SAndroid Build Coastguard Worker   FIXP_DBL synth_buf[(PIT_MAX_MAX + SYN_DELAY + L_FRAME_PLUS)];
314*e5436536SAndroid Build Coastguard Worker 
315*e5436536SAndroid Build Coastguard Worker   FIXP_DBL workBuffer[WB_SECTION_SIZE];
316*e5436536SAndroid Build Coastguard Worker }
317*e5436536SAndroid Build Coastguard Worker CWorkBufferCore1;
318*e5436536SAndroid Build Coastguard Worker 
319*e5436536SAndroid Build Coastguard Worker /* Common data referenced by all channels */
320*e5436536SAndroid Build Coastguard Worker typedef struct {
321*e5436536SAndroid Build Coastguard Worker   CAacDecoderDynamicData pAacDecoderDynamicData[2];
322*e5436536SAndroid Build Coastguard Worker 
323*e5436536SAndroid Build Coastguard Worker   CPnsInterChannelData pnsInterChannelData;
324*e5436536SAndroid Build Coastguard Worker   INT pnsRandomSeed[(8 * 16)];
325*e5436536SAndroid Build Coastguard Worker 
326*e5436536SAndroid Build Coastguard Worker   CJointStereoData jointStereoData; /* One for one element */
327*e5436536SAndroid Build Coastguard Worker 
328*e5436536SAndroid Build Coastguard Worker   shouldBeUnion {
329*e5436536SAndroid Build Coastguard Worker     struct {
330*e5436536SAndroid Build Coastguard Worker       CErHcrInfo erHcrInfo;
331*e5436536SAndroid Build Coastguard Worker       CErRvlcInfo erRvlcInfo;
332*e5436536SAndroid Build Coastguard Worker       SHORT aRvlcScfEsc[RVLC_MAX_SFB]; /* needed once for all channels */
333*e5436536SAndroid Build Coastguard Worker       SHORT aRvlcScfFwd[RVLC_MAX_SFB]; /* needed once for all channels */
334*e5436536SAndroid Build Coastguard Worker       SHORT aRvlcScfBwd[RVLC_MAX_SFB]; /* needed once for all channels */
335*e5436536SAndroid Build Coastguard Worker     } aac;
336*e5436536SAndroid Build Coastguard Worker   }
337*e5436536SAndroid Build Coastguard Worker   overlay;
338*e5436536SAndroid Build Coastguard Worker 
339*e5436536SAndroid Build Coastguard Worker } CAacDecoderCommonData;
340*e5436536SAndroid Build Coastguard Worker 
341*e5436536SAndroid Build Coastguard Worker typedef struct {
342*e5436536SAndroid Build Coastguard Worker   CWorkBufferCore1 *pWorkBufferCore1;
343*e5436536SAndroid Build Coastguard Worker   CCplxPredictionData *cplxPredictionData;
344*e5436536SAndroid Build Coastguard Worker } CAacDecoderCommonStaticData;
345*e5436536SAndroid Build Coastguard Worker 
346*e5436536SAndroid Build Coastguard Worker /*
347*e5436536SAndroid Build Coastguard Worker  * This struct must be allocated one for every channel of every element and must
348*e5436536SAndroid Build Coastguard Worker  * be persistent. Among its members, the following memory areas can be
349*e5436536SAndroid Build Coastguard Worker  * overwritten under the given conditions:
350*e5436536SAndroid Build Coastguard Worker  *  - pSpectralCoefficient The memory pointed to can be overwritten after time
351*e5436536SAndroid Build Coastguard Worker  * signal rendering.
352*e5436536SAndroid Build Coastguard Worker  *  - data can be overwritten after time signal rendering.
353*e5436536SAndroid Build Coastguard Worker  *  - pDynData memory pointed to can be overwritten after each
354*e5436536SAndroid Build Coastguard Worker  * CChannelElement_Decode() call.
355*e5436536SAndroid Build Coastguard Worker  *  - pComData->overlay memory pointed to can be overwritten after each
356*e5436536SAndroid Build Coastguard Worker  * CChannelElement_Decode() call..
357*e5436536SAndroid Build Coastguard Worker  */
358*e5436536SAndroid Build Coastguard Worker typedef struct {
359*e5436536SAndroid Build Coastguard Worker   shouldBeUnion {
360*e5436536SAndroid Build Coastguard Worker     struct {
361*e5436536SAndroid Build Coastguard Worker       FIXP_DBL fac_data0[LFAC];
362*e5436536SAndroid Build Coastguard Worker       SCHAR fac_data_e[4];
363*e5436536SAndroid Build Coastguard Worker       FIXP_DBL
364*e5436536SAndroid Build Coastguard Worker       *fac_data[4]; /* Pointers to unused parts of pSpectralCoefficient */
365*e5436536SAndroid Build Coastguard Worker 
366*e5436536SAndroid Build Coastguard Worker       UCHAR core_mode; /* current core mode */
367*e5436536SAndroid Build Coastguard Worker       USAC_COREMODE
368*e5436536SAndroid Build Coastguard Worker       core_mode_last;      /* previous core mode, signalled in the bitstream
369*e5436536SAndroid Build Coastguard Worker                               (not done by the decoder, see
370*e5436536SAndroid Build Coastguard Worker                               CAacDecoderStaticChannelInfo::last_core_mode !!)*/
371*e5436536SAndroid Build Coastguard Worker       UCHAR lpd_mode_last; /* previous LPD mode, signalled in the bitstream
372*e5436536SAndroid Build Coastguard Worker                               (not done by the decoder, see
373*e5436536SAndroid Build Coastguard Worker                               CAacDecoderStaticChannelInfo::last_core_mode !!)*/
374*e5436536SAndroid Build Coastguard Worker       UCHAR mod[4];
375*e5436536SAndroid Build Coastguard Worker       UCHAR bpf_control_info; /* (1: enable, 0: disable) bpf for current
376*e5436536SAndroid Build Coastguard Worker                                  superframe */
377*e5436536SAndroid Build Coastguard Worker 
378*e5436536SAndroid Build Coastguard Worker       FIXP_LPC lsp_coeff[5][M_LP_FILTER_ORDER]; /* linear prediction
379*e5436536SAndroid Build Coastguard Worker                                                    coefficients in LSP domain */
380*e5436536SAndroid Build Coastguard Worker       FIXP_LPC
381*e5436536SAndroid Build Coastguard Worker       lp_coeff[5][M_LP_FILTER_ORDER]; /* linear prediction coefficients in
382*e5436536SAndroid Build Coastguard Worker                                          LP domain */
383*e5436536SAndroid Build Coastguard Worker       INT lp_coeff_exp[5];
384*e5436536SAndroid Build Coastguard Worker       FIXP_LPC lsf_adaptive_mean_cand
385*e5436536SAndroid Build Coastguard Worker           [M_LP_FILTER_ORDER]; /* concealment: is copied to
386*e5436536SAndroid Build Coastguard Worker                   CAacDecoderStaticChannelInfo->lsf_adaptive_mean once frame is
387*e5436536SAndroid Build Coastguard Worker                   assumed to be correct*/
388*e5436536SAndroid Build Coastguard Worker       FIXP_SGL aStability[4];  /* LPC coeff stability values required for ACELP
389*e5436536SAndroid Build Coastguard Worker                                   and TCX (concealment) */
390*e5436536SAndroid Build Coastguard Worker 
391*e5436536SAndroid Build Coastguard Worker       CAcelpChannelData acelp[4];
392*e5436536SAndroid Build Coastguard Worker 
393*e5436536SAndroid Build Coastguard Worker       FIXP_DBL tcx_gain[4];
394*e5436536SAndroid Build Coastguard Worker       SCHAR tcx_gain_e[4];
395*e5436536SAndroid Build Coastguard Worker     } usac;
396*e5436536SAndroid Build Coastguard Worker 
397*e5436536SAndroid Build Coastguard Worker     struct {
398*e5436536SAndroid Build Coastguard Worker       CPnsData PnsData; /* Not required for USAC */
399*e5436536SAndroid Build Coastguard Worker     } aac;
400*e5436536SAndroid Build Coastguard Worker   }
401*e5436536SAndroid Build Coastguard Worker   data;
402*e5436536SAndroid Build Coastguard Worker 
403*e5436536SAndroid Build Coastguard Worker   SPECTRAL_PTR pSpectralCoefficient; /* Spectral coefficients of each window */
404*e5436536SAndroid Build Coastguard Worker   SHORT specScale[8]; /* Scale shift values of each spectrum window */
405*e5436536SAndroid Build Coastguard Worker   CIcsInfo icsInfo;
406*e5436536SAndroid Build Coastguard Worker   INT granuleLength; /* Size of smallest spectrum piece */
407*e5436536SAndroid Build Coastguard Worker   UCHAR ElementInstanceTag;
408*e5436536SAndroid Build Coastguard Worker 
409*e5436536SAndroid Build Coastguard Worker   AACDEC_RENDER_MODE renderMode; /* Output signal rendering mode */
410*e5436536SAndroid Build Coastguard Worker 
411*e5436536SAndroid Build Coastguard Worker   CAacDecoderDynamicData *
412*e5436536SAndroid Build Coastguard Worker       pDynData; /* Data required for one element and discarded after decoding */
413*e5436536SAndroid Build Coastguard Worker   CAacDecoderCommonData
414*e5436536SAndroid Build Coastguard Worker       *pComData; /* Data required for one channel at a time during decode */
415*e5436536SAndroid Build Coastguard Worker   CAacDecoderCommonStaticData *pComStaticData; /* Persistent data required for
416*e5436536SAndroid Build Coastguard Worker                                                   one channel at a time during
417*e5436536SAndroid Build Coastguard Worker                                                   decode */
418*e5436536SAndroid Build Coastguard Worker 
419*e5436536SAndroid Build Coastguard Worker   int currAliasingSymmetry; /* required for RSVD60 MCT */
420*e5436536SAndroid Build Coastguard Worker 
421*e5436536SAndroid Build Coastguard Worker } CAacDecoderChannelInfo;
422*e5436536SAndroid Build Coastguard Worker 
423*e5436536SAndroid Build Coastguard Worker /* channelinfo.cpp */
424*e5436536SAndroid Build Coastguard Worker 
425*e5436536SAndroid Build Coastguard Worker AAC_DECODER_ERROR getSamplingRateInfo(SamplingRateInfo *t, UINT samplesPerFrame,
426*e5436536SAndroid Build Coastguard Worker                                       UINT samplingRateIndex,
427*e5436536SAndroid Build Coastguard Worker                                       UINT samplingRate);
428*e5436536SAndroid Build Coastguard Worker 
429*e5436536SAndroid Build Coastguard Worker /**
430*e5436536SAndroid Build Coastguard Worker  * \brief Read max SFB from bit stream and assign TotalSfBands according
431*e5436536SAndroid Build Coastguard Worker  *        to the window sequence and sample rate.
432*e5436536SAndroid Build Coastguard Worker  * \param hBs bit stream handle as data source
433*e5436536SAndroid Build Coastguard Worker  * \param pIcsInfo IcsInfo structure to read the window sequence and store
434*e5436536SAndroid Build Coastguard Worker  * MaxSfBands and TotalSfBands
435*e5436536SAndroid Build Coastguard Worker  * \param pSamplingRateInfo read only
436*e5436536SAndroid Build Coastguard Worker  */
437*e5436536SAndroid Build Coastguard Worker AAC_DECODER_ERROR IcsReadMaxSfb(HANDLE_FDK_BITSTREAM hBs, CIcsInfo *pIcsInfo,
438*e5436536SAndroid Build Coastguard Worker                                 const SamplingRateInfo *pSamplingRateInfo);
439*e5436536SAndroid Build Coastguard Worker 
440*e5436536SAndroid Build Coastguard Worker AAC_DECODER_ERROR IcsRead(HANDLE_FDK_BITSTREAM bs, CIcsInfo *pIcsInfo,
441*e5436536SAndroid Build Coastguard Worker                           const SamplingRateInfo *SamplingRateInfoTable,
442*e5436536SAndroid Build Coastguard Worker                           const UINT flags);
443*e5436536SAndroid Build Coastguard Worker 
444*e5436536SAndroid Build Coastguard Worker /* stereo.cpp, only called from this file */
445*e5436536SAndroid Build Coastguard Worker 
446*e5436536SAndroid Build Coastguard Worker /*!
447*e5436536SAndroid Build Coastguard Worker   \brief Applies MS stereo.
448*e5436536SAndroid Build Coastguard Worker 
449*e5436536SAndroid Build Coastguard Worker   The function applies MS stereo.
450*e5436536SAndroid Build Coastguard Worker 
451*e5436536SAndroid Build Coastguard Worker   \param pAacDecoderChannelInfo aac channel info.
452*e5436536SAndroid Build Coastguard Worker   \param pScaleFactorBandOffsets pointer to scalefactor band offsets.
453*e5436536SAndroid Build Coastguard Worker   \param pWindowGroupLength pointer to window group length array.
454*e5436536SAndroid Build Coastguard Worker   \param windowGroups number of window groups.
455*e5436536SAndroid Build Coastguard Worker   \param scaleFactorBandsTransmittedL number of transmitted scalefactor bands in
456*e5436536SAndroid Build Coastguard Worker   left channel. \param scaleFactorBandsTransmittedR number of transmitted
457*e5436536SAndroid Build Coastguard Worker   scalefactor bands in right channel. May differ from
458*e5436536SAndroid Build Coastguard Worker   scaleFactorBandsTransmittedL only for USAC. \return  none
459*e5436536SAndroid Build Coastguard Worker */
460*e5436536SAndroid Build Coastguard Worker void CJointStereo_ApplyMS(
461*e5436536SAndroid Build Coastguard Worker     CAacDecoderChannelInfo *pAacDecoderChannelInfo[2],
462*e5436536SAndroid Build Coastguard Worker     CAacDecoderStaticChannelInfo *pAacDecoderStaticChannelInfo[2],
463*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *spectrumL, FIXP_DBL *spectrumR, SHORT *SFBleftScale,
464*e5436536SAndroid Build Coastguard Worker     SHORT *SFBrightScale, SHORT *specScaleL, SHORT *specScaleR,
465*e5436536SAndroid Build Coastguard Worker     const SHORT *pScaleFactorBandOffsets, const UCHAR *pWindowGroupLength,
466*e5436536SAndroid Build Coastguard Worker     const int windowGroups, const int max_sfb_ste_outside,
467*e5436536SAndroid Build Coastguard Worker     const int scaleFactorBandsTransmittedL,
468*e5436536SAndroid Build Coastguard Worker     const int scaleFactorBandsTransmittedR, FIXP_DBL *store_dmx_re_prev,
469*e5436536SAndroid Build Coastguard Worker     SHORT *store_dmx_re_prev_e, const int mainband_flag);
470*e5436536SAndroid Build Coastguard Worker 
471*e5436536SAndroid Build Coastguard Worker /*!
472*e5436536SAndroid Build Coastguard Worker   \brief Applies intensity stereo
473*e5436536SAndroid Build Coastguard Worker 
474*e5436536SAndroid Build Coastguard Worker   The function applies intensity stereo.
475*e5436536SAndroid Build Coastguard Worker 
476*e5436536SAndroid Build Coastguard Worker   \param pAacDecoderChannelInfo aac channel info.
477*e5436536SAndroid Build Coastguard Worker   \param pScaleFactorBandOffsets pointer to scalefactor band offsets.
478*e5436536SAndroid Build Coastguard Worker   \param pWindowGroupLength pointer to window group length array.
479*e5436536SAndroid Build Coastguard Worker   \param windowGroups number of window groups.
480*e5436536SAndroid Build Coastguard Worker   \param scaleFactorBandsTransmitted number of transmitted scalefactor bands.
481*e5436536SAndroid Build Coastguard Worker   \return  none
482*e5436536SAndroid Build Coastguard Worker */
483*e5436536SAndroid Build Coastguard Worker void CJointStereo_ApplyIS(CAacDecoderChannelInfo *pAacDecoderChannelInfo[2],
484*e5436536SAndroid Build Coastguard Worker                           const short *pScaleFactorBandOffsets,
485*e5436536SAndroid Build Coastguard Worker                           const UCHAR *pWindowGroupLength,
486*e5436536SAndroid Build Coastguard Worker                           const int windowGroups,
487*e5436536SAndroid Build Coastguard Worker                           const int scaleFactorBandsTransmitted);
488*e5436536SAndroid Build Coastguard Worker 
489*e5436536SAndroid Build Coastguard Worker /* aacdec_pns.cpp */
490*e5436536SAndroid Build Coastguard Worker int CPns_IsPnsUsed(const CPnsData *pPnsData, const int group, const int band);
491*e5436536SAndroid Build Coastguard Worker 
492*e5436536SAndroid Build Coastguard Worker void CPns_SetCorrelation(CPnsData *pPnsData, const int group, const int band,
493*e5436536SAndroid Build Coastguard Worker                          const int outofphase);
494*e5436536SAndroid Build Coastguard Worker 
495*e5436536SAndroid Build Coastguard Worker /****************** inline functions ******************/
496*e5436536SAndroid Build Coastguard Worker 
IsValid(const CIcsInfo * pIcsInfo)497*e5436536SAndroid Build Coastguard Worker inline UCHAR IsValid(const CIcsInfo *pIcsInfo) { return pIcsInfo->Valid; }
498*e5436536SAndroid Build Coastguard Worker 
IsLongBlock(const CIcsInfo * pIcsInfo)499*e5436536SAndroid Build Coastguard Worker inline UCHAR IsLongBlock(const CIcsInfo *pIcsInfo) {
500*e5436536SAndroid Build Coastguard Worker   return (pIcsInfo->WindowSequence != BLOCK_SHORT);
501*e5436536SAndroid Build Coastguard Worker }
502*e5436536SAndroid Build Coastguard Worker 
GetWindowShape(const CIcsInfo * pIcsInfo)503*e5436536SAndroid Build Coastguard Worker inline UCHAR GetWindowShape(const CIcsInfo *pIcsInfo) {
504*e5436536SAndroid Build Coastguard Worker   return pIcsInfo->WindowShape;
505*e5436536SAndroid Build Coastguard Worker }
506*e5436536SAndroid Build Coastguard Worker 
GetWindowSequence(const CIcsInfo * pIcsInfo)507*e5436536SAndroid Build Coastguard Worker inline BLOCK_TYPE GetWindowSequence(const CIcsInfo *pIcsInfo) {
508*e5436536SAndroid Build Coastguard Worker   return pIcsInfo->WindowSequence;
509*e5436536SAndroid Build Coastguard Worker }
510*e5436536SAndroid Build Coastguard Worker 
GetScaleFactorBandOffsets(const CIcsInfo * pIcsInfo,const SamplingRateInfo * samplingRateInfo)511*e5436536SAndroid Build Coastguard Worker inline const SHORT *GetScaleFactorBandOffsets(
512*e5436536SAndroid Build Coastguard Worker     const CIcsInfo *pIcsInfo, const SamplingRateInfo *samplingRateInfo) {
513*e5436536SAndroid Build Coastguard Worker   if (IsLongBlock(pIcsInfo)) {
514*e5436536SAndroid Build Coastguard Worker     return samplingRateInfo->ScaleFactorBands_Long;
515*e5436536SAndroid Build Coastguard Worker   } else {
516*e5436536SAndroid Build Coastguard Worker     return samplingRateInfo->ScaleFactorBands_Short;
517*e5436536SAndroid Build Coastguard Worker   }
518*e5436536SAndroid Build Coastguard Worker }
519*e5436536SAndroid Build Coastguard Worker 
GetNumberOfScaleFactorBands(const CIcsInfo * pIcsInfo,const SamplingRateInfo * samplingRateInfo)520*e5436536SAndroid Build Coastguard Worker inline UCHAR GetNumberOfScaleFactorBands(
521*e5436536SAndroid Build Coastguard Worker     const CIcsInfo *pIcsInfo, const SamplingRateInfo *samplingRateInfo) {
522*e5436536SAndroid Build Coastguard Worker   if (IsLongBlock(pIcsInfo)) {
523*e5436536SAndroid Build Coastguard Worker     return samplingRateInfo->NumberOfScaleFactorBands_Long;
524*e5436536SAndroid Build Coastguard Worker   } else {
525*e5436536SAndroid Build Coastguard Worker     return samplingRateInfo->NumberOfScaleFactorBands_Short;
526*e5436536SAndroid Build Coastguard Worker   }
527*e5436536SAndroid Build Coastguard Worker }
528*e5436536SAndroid Build Coastguard Worker 
GetWindowsPerFrame(const CIcsInfo * pIcsInfo)529*e5436536SAndroid Build Coastguard Worker inline int GetWindowsPerFrame(const CIcsInfo *pIcsInfo) {
530*e5436536SAndroid Build Coastguard Worker   return (pIcsInfo->WindowSequence == BLOCK_SHORT) ? 8 : 1;
531*e5436536SAndroid Build Coastguard Worker }
532*e5436536SAndroid Build Coastguard Worker 
GetWindowGroups(const CIcsInfo * pIcsInfo)533*e5436536SAndroid Build Coastguard Worker inline UCHAR GetWindowGroups(const CIcsInfo *pIcsInfo) {
534*e5436536SAndroid Build Coastguard Worker   return pIcsInfo->WindowGroups;
535*e5436536SAndroid Build Coastguard Worker }
536*e5436536SAndroid Build Coastguard Worker 
GetWindowGroupLength(const CIcsInfo * pIcsInfo,const INT index)537*e5436536SAndroid Build Coastguard Worker inline UCHAR GetWindowGroupLength(const CIcsInfo *pIcsInfo, const INT index) {
538*e5436536SAndroid Build Coastguard Worker   return pIcsInfo->WindowGroupLength[index];
539*e5436536SAndroid Build Coastguard Worker }
540*e5436536SAndroid Build Coastguard Worker 
GetWindowGroupLengthTable(const CIcsInfo * pIcsInfo)541*e5436536SAndroid Build Coastguard Worker inline const UCHAR *GetWindowGroupLengthTable(const CIcsInfo *pIcsInfo) {
542*e5436536SAndroid Build Coastguard Worker   return pIcsInfo->WindowGroupLength;
543*e5436536SAndroid Build Coastguard Worker }
544*e5436536SAndroid Build Coastguard Worker 
GetScaleFactorBandsTransmitted(const CIcsInfo * pIcsInfo)545*e5436536SAndroid Build Coastguard Worker inline UCHAR GetScaleFactorBandsTransmitted(const CIcsInfo *pIcsInfo) {
546*e5436536SAndroid Build Coastguard Worker   return pIcsInfo->MaxSfBands;
547*e5436536SAndroid Build Coastguard Worker }
548*e5436536SAndroid Build Coastguard Worker 
GetScaleMaxFactorBandsTransmitted(const CIcsInfo * pIcsInfo0,const CIcsInfo * pIcsInfo1)549*e5436536SAndroid Build Coastguard Worker inline UCHAR GetScaleMaxFactorBandsTransmitted(const CIcsInfo *pIcsInfo0,
550*e5436536SAndroid Build Coastguard Worker                                                const CIcsInfo *pIcsInfo1) {
551*e5436536SAndroid Build Coastguard Worker   return fMax(pIcsInfo0->MaxSfBands, pIcsInfo1->MaxSfBands);
552*e5436536SAndroid Build Coastguard Worker }
553*e5436536SAndroid Build Coastguard Worker 
GetScaleFactorBandsTotal(const CIcsInfo * pIcsInfo)554*e5436536SAndroid Build Coastguard Worker inline UCHAR GetScaleFactorBandsTotal(const CIcsInfo *pIcsInfo) {
555*e5436536SAndroid Build Coastguard Worker   return pIcsInfo->TotalSfBands;
556*e5436536SAndroid Build Coastguard Worker }
557*e5436536SAndroid Build Coastguard Worker 
558*e5436536SAndroid Build Coastguard Worker /* Note: This function applies to AAC-LC only ! */
GetMaximumTnsBands(const CIcsInfo * pIcsInfo,const int samplingRateIndex)559*e5436536SAndroid Build Coastguard Worker inline UCHAR GetMaximumTnsBands(const CIcsInfo *pIcsInfo,
560*e5436536SAndroid Build Coastguard Worker                                 const int samplingRateIndex) {
561*e5436536SAndroid Build Coastguard Worker   return tns_max_bands_tbl[samplingRateIndex][!IsLongBlock(pIcsInfo)];
562*e5436536SAndroid Build Coastguard Worker }
563*e5436536SAndroid Build Coastguard Worker 
564*e5436536SAndroid Build Coastguard Worker #endif /* #ifndef CHANNELINFO_H */
565