xref: /aosp_15_r20/external/aac/libSBRenc/src/fram_gen.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 /**************************** SBR encoder library ******************************
96*e5436536SAndroid Build Coastguard Worker 
97*e5436536SAndroid Build Coastguard Worker    Author(s):
98*e5436536SAndroid Build Coastguard Worker 
99*e5436536SAndroid Build Coastguard Worker    Description:
100*e5436536SAndroid Build Coastguard Worker 
101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
102*e5436536SAndroid Build Coastguard Worker 
103*e5436536SAndroid Build Coastguard Worker /*!
104*e5436536SAndroid Build Coastguard Worker   \file
105*e5436536SAndroid Build Coastguard Worker   \brief  Framing generator prototypes and structs $Revision: 92790 $
106*e5436536SAndroid Build Coastguard Worker */
107*e5436536SAndroid Build Coastguard Worker #ifndef FRAM_GEN_H
108*e5436536SAndroid Build Coastguard Worker #define FRAM_GEN_H
109*e5436536SAndroid Build Coastguard Worker 
110*e5436536SAndroid Build Coastguard Worker #include "sbr_def.h" /* for MAX_ENVELOPES and MAX_NOISE_ENVELOPES in struct FRAME_INFO and CODEC_TYPE */
111*e5436536SAndroid Build Coastguard Worker #include "sbr_encoder.h" /* for FREQ_RES */
112*e5436536SAndroid Build Coastguard Worker 
113*e5436536SAndroid Build Coastguard Worker #define MAX_ENVELOPES_VARVAR \
114*e5436536SAndroid Build Coastguard Worker   MAX_ENVELOPES /*!< worst case number of envelopes in a VARVAR frame */
115*e5436536SAndroid Build Coastguard Worker #define MAX_ENVELOPES_FIXVAR_VARFIX \
116*e5436536SAndroid Build Coastguard Worker   4 /*!< worst case number of envelopes in VARFIX and FIXVAR frames */
117*e5436536SAndroid Build Coastguard Worker #define MAX_NUM_REL \
118*e5436536SAndroid Build Coastguard Worker   3 /*!< maximum number of relative borders in any VAR frame */
119*e5436536SAndroid Build Coastguard Worker 
120*e5436536SAndroid Build Coastguard Worker /* SBR frame class definitions */
121*e5436536SAndroid Build Coastguard Worker typedef enum {
122*e5436536SAndroid Build Coastguard Worker   FIXFIX =
123*e5436536SAndroid Build Coastguard Worker       0,  /*!< bs_frame_class: leading and trailing frame borders are fixed */
124*e5436536SAndroid Build Coastguard Worker   FIXVAR, /*!< bs_frame_class: leading frame border is fixed, trailing frame
125*e5436536SAndroid Build Coastguard Worker              border is variable */
126*e5436536SAndroid Build Coastguard Worker   VARFIX, /*!< bs_frame_class: leading frame border is variable, trailing frame
127*e5436536SAndroid Build Coastguard Worker              border is fixed */
128*e5436536SAndroid Build Coastguard Worker   VARVAR /*!< bs_frame_class: leading and trailing frame borders are variable */
129*e5436536SAndroid Build Coastguard Worker   ,
130*e5436536SAndroid Build Coastguard Worker   FIXFIXonly /*!< bs_frame_class: leading border fixed (0), trailing border
131*e5436536SAndroid Build Coastguard Worker                 fixed (nrTimeSlots) and encased borders are dynamically derived
132*e5436536SAndroid Build Coastguard Worker                 from the tranPos */
133*e5436536SAndroid Build Coastguard Worker } FRAME_CLASS;
134*e5436536SAndroid Build Coastguard Worker 
135*e5436536SAndroid Build Coastguard Worker /* helper constants */
136*e5436536SAndroid Build Coastguard Worker #define DC 4711     /*!< helper constant: don't care */
137*e5436536SAndroid Build Coastguard Worker #define EMPTY (-99) /*!< helper constant: empty */
138*e5436536SAndroid Build Coastguard Worker 
139*e5436536SAndroid Build Coastguard Worker /* system constants: AAC+SBR, DRM Frame-Length */
140*e5436536SAndroid Build Coastguard Worker #define FRAME_MIDDLE_SLOT_1920 4
141*e5436536SAndroid Build Coastguard Worker #define NUMBER_TIME_SLOTS_1920 15
142*e5436536SAndroid Build Coastguard Worker 
143*e5436536SAndroid Build Coastguard Worker #define LD_PRETRAN_OFF 3
144*e5436536SAndroid Build Coastguard Worker #define FRAME_MIDDLE_SLOT_512LD 4
145*e5436536SAndroid Build Coastguard Worker #define NUMBER_TIME_SLOTS_512LD 8
146*e5436536SAndroid Build Coastguard Worker #define TRANSIENT_OFFSET_LD 0
147*e5436536SAndroid Build Coastguard Worker 
148*e5436536SAndroid Build Coastguard Worker /*
149*e5436536SAndroid Build Coastguard Worker system constants: AAC+SBR or aacPRO (hybrid format), Standard Frame-Length,
150*e5436536SAndroid Build Coastguard Worker Multi-Rate
151*e5436536SAndroid Build Coastguard Worker ---------------------------------------------------------------------------
152*e5436536SAndroid Build Coastguard Worker Number of slots (numberTimeSlots): 16  (NUMBER_TIME_SLOTS_2048)
153*e5436536SAndroid Build Coastguard Worker Detector-offset (frameMiddleSlot):  4
154*e5436536SAndroid Build Coastguard Worker Overlap                          :  3
155*e5436536SAndroid Build Coastguard Worker Buffer-offset                    :  8  (BUFFER_FRAME_START_2048 = 0)
156*e5436536SAndroid Build Coastguard Worker 
157*e5436536SAndroid Build Coastguard Worker 
158*e5436536SAndroid Build Coastguard Worker                         |<------------tranPos---------->|
159*e5436536SAndroid Build Coastguard Worker                 |c|d|e|f|0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|
160*e5436536SAndroid Build Coastguard Worker         FixFix  |                               |
161*e5436536SAndroid Build Coastguard Worker         FixVar  |                               :<- ->:
162*e5436536SAndroid Build Coastguard Worker         VarFix  :<- ->:                         |
163*e5436536SAndroid Build Coastguard Worker         VarVar  :<- ->:                         :<- ->:
164*e5436536SAndroid Build Coastguard Worker                 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3
165*e5436536SAndroid Build Coastguard Worker ................................................................................
166*e5436536SAndroid Build Coastguard Worker 
167*e5436536SAndroid Build Coastguard Worker |-|-|-|-|-|-|-|-B-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-B-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
168*e5436536SAndroid Build Coastguard Worker 
169*e5436536SAndroid Build Coastguard Worker frame-generator:0                               16              24 32
170*e5436536SAndroid Build Coastguard Worker analysis-buffer:8                               24              32 40
171*e5436536SAndroid Build Coastguard Worker */
172*e5436536SAndroid Build Coastguard Worker #define FRAME_MIDDLE_SLOT_2048 4
173*e5436536SAndroid Build Coastguard Worker #define NUMBER_TIME_SLOTS_2048 16
174*e5436536SAndroid Build Coastguard Worker 
175*e5436536SAndroid Build Coastguard Worker /*
176*e5436536SAndroid Build Coastguard Worker system constants: mp3PRO, Multi-Rate & Single-Rate
177*e5436536SAndroid Build Coastguard Worker --------------------------------------------------
178*e5436536SAndroid Build Coastguard Worker Number of slots (numberTimeSlots):  9    (NUMBER_TIME_SLOTS_1152)
179*e5436536SAndroid Build Coastguard Worker Detector-offset (frameMiddleSlot):  4    (FRAME_MIDDLE_SLOT_1152)
180*e5436536SAndroid Build Coastguard Worker Overlap                          :  3
181*e5436536SAndroid Build Coastguard Worker Buffer-offset                    :  4.5  (BUFFER_FRAME_START_1152 = 0)
182*e5436536SAndroid Build Coastguard Worker 
183*e5436536SAndroid Build Coastguard Worker 
184*e5436536SAndroid Build Coastguard Worker                          |<----tranPos---->|
185*e5436536SAndroid Build Coastguard Worker                  |5|6|7|8|0|1|2|3|4|5|6|7|8|
186*e5436536SAndroid Build Coastguard Worker          FixFix  |                 |
187*e5436536SAndroid Build Coastguard Worker          FixVar  |                 :<- ->:
188*e5436536SAndroid Build Coastguard Worker          VarFix  :<- ->:           |
189*e5436536SAndroid Build Coastguard Worker          VarVar  :<- ->:           :<- ->:
190*e5436536SAndroid Build Coastguard Worker                  0 1 2 3 4 5 6 7 8 0 1 2 3
191*e5436536SAndroid Build Coastguard Worker         .............................................
192*e5436536SAndroid Build Coastguard Worker 
193*e5436536SAndroid Build Coastguard Worker         -|-|-|-|-B-|-|-|-|-|-|-|-|-B-|-|-|-|-|-|-|-|-|
194*e5436536SAndroid Build Coastguard Worker 
195*e5436536SAndroid Build Coastguard Worker frame-generator: 0                 9       13        18
196*e5436536SAndroid Build Coastguard Worker analysis-buffer: 4.5               13.5              22.5
197*e5436536SAndroid Build Coastguard Worker */
198*e5436536SAndroid Build Coastguard Worker #define FRAME_MIDDLE_SLOT_1152 4
199*e5436536SAndroid Build Coastguard Worker #define NUMBER_TIME_SLOTS_1152 9
200*e5436536SAndroid Build Coastguard Worker 
201*e5436536SAndroid Build Coastguard Worker /* system constants: Layer2+SBR */
202*e5436536SAndroid Build Coastguard Worker #define FRAME_MIDDLE_SLOT_2304 8
203*e5436536SAndroid Build Coastguard Worker #define NUMBER_TIME_SLOTS_2304 18
204*e5436536SAndroid Build Coastguard Worker 
205*e5436536SAndroid Build Coastguard Worker /*!
206*e5436536SAndroid Build Coastguard Worker   \struct SBR_GRID
207*e5436536SAndroid Build Coastguard Worker   \brief  sbr_grid() signals to be converted to bitstream elements
208*e5436536SAndroid Build Coastguard Worker 
209*e5436536SAndroid Build Coastguard Worker   The variables hold the signals (e.g. lengths and numbers) in "clear text"
210*e5436536SAndroid Build Coastguard Worker */
211*e5436536SAndroid Build Coastguard Worker 
212*e5436536SAndroid Build Coastguard Worker typedef struct {
213*e5436536SAndroid Build Coastguard Worker   /* system constants */
214*e5436536SAndroid Build Coastguard Worker   INT bufferFrameStart; /*!< frame generator vs analysis buffer time alignment
215*e5436536SAndroid Build Coastguard Worker                            (currently set to 0, offset added elsewhere) */
216*e5436536SAndroid Build Coastguard Worker   INT numberTimeSlots;  /*!< number of SBR timeslots per frame */
217*e5436536SAndroid Build Coastguard Worker 
218*e5436536SAndroid Build Coastguard Worker   /* will be adjusted for every frame */
219*e5436536SAndroid Build Coastguard Worker   FRAME_CLASS frameClass; /*!< SBR frame class  */
220*e5436536SAndroid Build Coastguard Worker   INT bs_num_env;         /*!< bs_num_env, number of envelopes for FIXFIX */
221*e5436536SAndroid Build Coastguard Worker   INT bs_abs_bord; /*!< bs_abs_bord, absolute border for VARFIX and FIXVAR */
222*e5436536SAndroid Build Coastguard Worker   INT n;           /*!< number of relative borders for VARFIX and FIXVAR   */
223*e5436536SAndroid Build Coastguard Worker   INT p;           /*!< pointer-to-transient-border  */
224*e5436536SAndroid Build Coastguard Worker   INT bs_rel_bord[MAX_NUM_REL]; /*!< bs_rel_bord, relative borders for all VAR
225*e5436536SAndroid Build Coastguard Worker                                  */
226*e5436536SAndroid Build Coastguard Worker   INT v_f[MAX_ENVELOPES_FIXVAR_VARFIX]; /*!< envelope frequency resolutions for
227*e5436536SAndroid Build Coastguard Worker                                            FIXVAR and VARFIX  */
228*e5436536SAndroid Build Coastguard Worker 
229*e5436536SAndroid Build Coastguard Worker   INT bs_abs_bord_0; /*!< bs_abs_bord_0, leading absolute border for VARVAR */
230*e5436536SAndroid Build Coastguard Worker   INT bs_abs_bord_1; /*!< bs_abs_bord_1, trailing absolute border for VARVAR */
231*e5436536SAndroid Build Coastguard Worker   INT bs_num_rel_0;  /*!< bs_num_rel_0, number of relative borders associated
232*e5436536SAndroid Build Coastguard Worker                         with leading absolute border for VARVAR */
233*e5436536SAndroid Build Coastguard Worker   INT bs_num_rel_1;  /*!< bs_num_rel_1, number of relative borders associated
234*e5436536SAndroid Build Coastguard Worker                         with trailing absolute border for VARVAR */
235*e5436536SAndroid Build Coastguard Worker   INT bs_rel_bord_0[MAX_NUM_REL];  /*!< bs_rel_bord_0, relative borders
236*e5436536SAndroid Build Coastguard Worker                                       associated with  leading absolute border
237*e5436536SAndroid Build Coastguard Worker                                       for  VARVAR */
238*e5436536SAndroid Build Coastguard Worker   INT bs_rel_bord_1[MAX_NUM_REL];  /*!< bs_rel_bord_1, relative borders
239*e5436536SAndroid Build Coastguard Worker                                       associated with trailing absolute border
240*e5436536SAndroid Build Coastguard Worker                                       for VARVAR */
241*e5436536SAndroid Build Coastguard Worker   INT v_fLR[MAX_ENVELOPES_VARVAR]; /*!< envelope frequency resolutions for
242*e5436536SAndroid Build Coastguard Worker                                       VARVAR  */
243*e5436536SAndroid Build Coastguard Worker 
244*e5436536SAndroid Build Coastguard Worker } SBR_GRID;
245*e5436536SAndroid Build Coastguard Worker typedef SBR_GRID *HANDLE_SBR_GRID;
246*e5436536SAndroid Build Coastguard Worker 
247*e5436536SAndroid Build Coastguard Worker /*!
248*e5436536SAndroid Build Coastguard Worker   \struct SBR_FRAME_INFO
249*e5436536SAndroid Build Coastguard Worker   \brief  time/frequency grid description for one frame
250*e5436536SAndroid Build Coastguard Worker */
251*e5436536SAndroid Build Coastguard Worker typedef struct {
252*e5436536SAndroid Build Coastguard Worker   INT nEnvelopes;                  /*!< number of envelopes */
253*e5436536SAndroid Build Coastguard Worker   INT borders[MAX_ENVELOPES + 1];  /*!< envelope borders in SBR timeslots */
254*e5436536SAndroid Build Coastguard Worker   FREQ_RES freqRes[MAX_ENVELOPES]; /*!< frequency resolution of each envelope */
255*e5436536SAndroid Build Coastguard Worker   INT shortEnv; /*!< number of an envelope to be shortened (starting at 1) or 0
256*e5436536SAndroid Build Coastguard Worker                    for no shortened envelope */
257*e5436536SAndroid Build Coastguard Worker   INT nNoiseEnvelopes; /*!< number of noise floors */
258*e5436536SAndroid Build Coastguard Worker   INT bordersNoise[MAX_NOISE_ENVELOPES +
259*e5436536SAndroid Build Coastguard Worker                    1]; /*!< noise floor borders in SBR timeslots */
260*e5436536SAndroid Build Coastguard Worker } SBR_FRAME_INFO;
261*e5436536SAndroid Build Coastguard Worker /* WARNING: When rearranging the elements of this struct keep in mind that the
262*e5436536SAndroid Build Coastguard Worker  * static initializations in the corresponding C-file have to be rearranged as
263*e5436536SAndroid Build Coastguard Worker  * well! snd 2002/01/23
264*e5436536SAndroid Build Coastguard Worker  */
265*e5436536SAndroid Build Coastguard Worker typedef SBR_FRAME_INFO *HANDLE_SBR_FRAME_INFO;
266*e5436536SAndroid Build Coastguard Worker 
267*e5436536SAndroid Build Coastguard Worker /*!
268*e5436536SAndroid Build Coastguard Worker   \struct SBR_ENVELOPE_FRAME
269*e5436536SAndroid Build Coastguard Worker   \brief  frame generator main struct
270*e5436536SAndroid Build Coastguard Worker 
271*e5436536SAndroid Build Coastguard Worker   Contains tuning parameters, time/frequency grid description, sbr_grid()
272*e5436536SAndroid Build Coastguard Worker   bitstream elements, and generator internal signals
273*e5436536SAndroid Build Coastguard Worker */
274*e5436536SAndroid Build Coastguard Worker typedef struct {
275*e5436536SAndroid Build Coastguard Worker   /* system constants */
276*e5436536SAndroid Build Coastguard Worker   INT frameMiddleSlot; /*!< transient detector offset in SBR timeslots */
277*e5436536SAndroid Build Coastguard Worker 
278*e5436536SAndroid Build Coastguard Worker   /* basic tuning parameters */
279*e5436536SAndroid Build Coastguard Worker   INT staticFraming; /*!< 1: run static framing in time, i.e. exclusive use of
280*e5436536SAndroid Build Coastguard Worker                         bs_frame_class = FIXFIX */
281*e5436536SAndroid Build Coastguard Worker   INT numEnvStatic;  /*!< number of envelopes per frame for static framing */
282*e5436536SAndroid Build Coastguard Worker   FREQ_RES
283*e5436536SAndroid Build Coastguard Worker   freq_res_fixfix[2]; /*!< envelope frequency resolution to use for
284*e5436536SAndroid Build Coastguard Worker                          bs_frame_class = FIXFIX; single env and split */
285*e5436536SAndroid Build Coastguard Worker   UCHAR
286*e5436536SAndroid Build Coastguard Worker   fResTransIsLow; /*!< frequency resolution for transient frames - always
287*e5436536SAndroid Build Coastguard Worker                      low (0) or according to table (1) */
288*e5436536SAndroid Build Coastguard Worker 
289*e5436536SAndroid Build Coastguard Worker   /* expert tuning parameters */
290*e5436536SAndroid Build Coastguard Worker   const int *v_tuningSegm; /*!< segment lengths to use around transient */
291*e5436536SAndroid Build Coastguard Worker   const int *v_tuningFreq; /*!< frequency resolutions to use around transient */
292*e5436536SAndroid Build Coastguard Worker   INT dmin;                /*!< minimum length of dependent segments */
293*e5436536SAndroid Build Coastguard Worker   INT dmax;                /*!< maximum length of dependent segments */
294*e5436536SAndroid Build Coastguard Worker   INT allowSpread; /*!< 1: allow isolated transient to influence grid of 3
295*e5436536SAndroid Build Coastguard Worker                       consecutive frames */
296*e5436536SAndroid Build Coastguard Worker 
297*e5436536SAndroid Build Coastguard Worker   /* internally used signals */
298*e5436536SAndroid Build Coastguard Worker   FRAME_CLASS frameClassOld; /*!< frame class used for previous frame */
299*e5436536SAndroid Build Coastguard Worker   INT spreadFlag; /*!< 1: use VARVAR instead of VARFIX to follow up old
300*e5436536SAndroid Build Coastguard Worker                      transient */
301*e5436536SAndroid Build Coastguard Worker 
302*e5436536SAndroid Build Coastguard Worker   INT v_bord[2 * MAX_ENVELOPES_VARVAR + 1]; /*!< borders for current frame and
303*e5436536SAndroid Build Coastguard Worker                                                preliminary borders for next
304*e5436536SAndroid Build Coastguard Worker                                                frame (fixed borders excluded) */
305*e5436536SAndroid Build Coastguard Worker   INT length_v_bord; /*!< helper variable: length of v_bord */
306*e5436536SAndroid Build Coastguard Worker   INT v_freq[2 * MAX_ENVELOPES_VARVAR + 1]; /*!< frequency resolutions for
307*e5436536SAndroid Build Coastguard Worker                                                current frame and preliminary
308*e5436536SAndroid Build Coastguard Worker                                                resolutions for next frame */
309*e5436536SAndroid Build Coastguard Worker   INT length_v_freq; /*!< helper variable: length of v_freq */
310*e5436536SAndroid Build Coastguard Worker 
311*e5436536SAndroid Build Coastguard Worker   INT v_bordFollow[MAX_ENVELOPES_VARVAR]; /*!< preliminary borders for current
312*e5436536SAndroid Build Coastguard Worker                                              frame (calculated during previous
313*e5436536SAndroid Build Coastguard Worker                                              frame) */
314*e5436536SAndroid Build Coastguard Worker   INT length_v_bordFollow; /*!< helper variable: length of v_bordFollow */
315*e5436536SAndroid Build Coastguard Worker   INT i_tranFollow; /*!< points to transient border in v_bordFollow (may be
316*e5436536SAndroid Build Coastguard Worker                        negative, see keepForFollowUp()) */
317*e5436536SAndroid Build Coastguard Worker   INT i_fillFollow; /*!< points to first fill border in v_bordFollow */
318*e5436536SAndroid Build Coastguard Worker   INT v_freqFollow[MAX_ENVELOPES_VARVAR]; /*!< preliminary frequency resolutions
319*e5436536SAndroid Build Coastguard Worker                                              for current frame (calculated
320*e5436536SAndroid Build Coastguard Worker                                              during previous frame) */
321*e5436536SAndroid Build Coastguard Worker   INT length_v_freqFollow; /*!< helper variable: length of v_freqFollow */
322*e5436536SAndroid Build Coastguard Worker 
323*e5436536SAndroid Build Coastguard Worker   /* externally needed signals */
324*e5436536SAndroid Build Coastguard Worker   SBR_GRID
325*e5436536SAndroid Build Coastguard Worker   SbrGrid; /*!< sbr_grid() signals to be converted to bitstream elements */
326*e5436536SAndroid Build Coastguard Worker   SBR_FRAME_INFO
327*e5436536SAndroid Build Coastguard Worker   SbrFrameInfo; /*!< time/frequency grid description for one frame */
328*e5436536SAndroid Build Coastguard Worker } SBR_ENVELOPE_FRAME;
329*e5436536SAndroid Build Coastguard Worker typedef SBR_ENVELOPE_FRAME *HANDLE_SBR_ENVELOPE_FRAME;
330*e5436536SAndroid Build Coastguard Worker 
331*e5436536SAndroid Build Coastguard Worker void FDKsbrEnc_initFrameInfoGenerator(HANDLE_SBR_ENVELOPE_FRAME hSbrEnvFrame,
332*e5436536SAndroid Build Coastguard Worker                                       INT allowSpread, INT numEnvStatic,
333*e5436536SAndroid Build Coastguard Worker                                       INT staticFraming, INT timeSlots,
334*e5436536SAndroid Build Coastguard Worker                                       const FREQ_RES *freq_res_fixfix,
335*e5436536SAndroid Build Coastguard Worker                                       UCHAR fResTransIsLow, INT ldGrid);
336*e5436536SAndroid Build Coastguard Worker 
337*e5436536SAndroid Build Coastguard Worker HANDLE_SBR_FRAME_INFO
338*e5436536SAndroid Build Coastguard Worker FDKsbrEnc_frameInfoGenerator(HANDLE_SBR_ENVELOPE_FRAME hSbrEnvFrame,
339*e5436536SAndroid Build Coastguard Worker                              UCHAR *v_transient_info, const INT rightBorderFIX,
340*e5436536SAndroid Build Coastguard Worker                              UCHAR *v_transient_info_pre, int ldGrid,
341*e5436536SAndroid Build Coastguard Worker                              const int *v_tuning);
342*e5436536SAndroid Build Coastguard Worker 
343*e5436536SAndroid Build Coastguard Worker #endif
344