xref: /aosp_15_r20/external/aac/libFDK/include/qmf.h (revision e54365361535b070c2db7374cec45c159c7d0e7a)
1*e5436536SAndroid Build Coastguard Worker /* -----------------------------------------------------------------------------
2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android
3*e5436536SAndroid Build Coastguard Worker 
4*e5436536SAndroid Build Coastguard Worker © Copyright  1995 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten
5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved.
6*e5436536SAndroid Build Coastguard Worker 
7*e5436536SAndroid Build Coastguard Worker  1.    INTRODUCTION
8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software
9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on
11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices.
12*e5436536SAndroid Build Coastguard Worker 
13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing
15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely
16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG
17*e5436536SAndroid Build Coastguard Worker specifications.
18*e5436536SAndroid Build Coastguard Worker 
19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including
20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing
21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for
22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant
23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of
24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or
25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may
26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those
27*e5436536SAndroid Build Coastguard Worker licensed purposes only.
28*e5436536SAndroid Build Coastguard Worker 
29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions
30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are
31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications
32*e5436536SAndroid Build Coastguard Worker information and documentation.
33*e5436536SAndroid Build Coastguard Worker 
34*e5436536SAndroid Build Coastguard Worker 2.    COPYRIGHT LICENSE
35*e5436536SAndroid Build Coastguard Worker 
36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification,
37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you
38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions:
39*e5436536SAndroid Build Coastguard Worker 
40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of
41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form.
42*e5436536SAndroid Build Coastguard Worker 
43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation
44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or
45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of
46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your
47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form.
48*e5436536SAndroid Build Coastguard Worker 
49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived
50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission.
51*e5436536SAndroid Build Coastguard Worker 
52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute
53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto.
54*e5436536SAndroid Build Coastguard Worker 
55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating
56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions
57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android"
58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android."
60*e5436536SAndroid Build Coastguard Worker 
61*e5436536SAndroid Build Coastguard Worker 3.    NO PATENT LICENSE
62*e5436536SAndroid Build Coastguard Worker 
63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without
64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE.
65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this
66*e5436536SAndroid Build Coastguard Worker software.
67*e5436536SAndroid Build Coastguard Worker 
68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for
69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses.
70*e5436536SAndroid Build Coastguard Worker 
71*e5436536SAndroid Build Coastguard Worker 4.    DISCLAIMER
72*e5436536SAndroid Build Coastguard Worker 
73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright
74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and
76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary,
78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute
79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption,
80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict
81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of
82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage.
83*e5436536SAndroid Build Coastguard Worker 
84*e5436536SAndroid Build Coastguard Worker 5.    CONTACT INFORMATION
85*e5436536SAndroid Build Coastguard Worker 
86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS
87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL
88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33
89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany
90*e5436536SAndroid Build Coastguard Worker 
91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm
92*e5436536SAndroid Build Coastguard Worker [email protected]
93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */
94*e5436536SAndroid Build Coastguard Worker 
95*e5436536SAndroid Build Coastguard Worker /******************* Library for basic calculation routines ********************
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   qmf.h
105*e5436536SAndroid Build Coastguard Worker   \brief  Complex qmf analysis/synthesis
106*e5436536SAndroid Build Coastguard Worker   \author Markus Werner
107*e5436536SAndroid Build Coastguard Worker 
108*e5436536SAndroid Build Coastguard Worker */
109*e5436536SAndroid Build Coastguard Worker 
110*e5436536SAndroid Build Coastguard Worker #ifndef QMF_H
111*e5436536SAndroid Build Coastguard Worker #define QMF_H
112*e5436536SAndroid Build Coastguard Worker 
113*e5436536SAndroid Build Coastguard Worker #include "common_fix.h"
114*e5436536SAndroid Build Coastguard Worker #include "FDK_tools_rom.h"
115*e5436536SAndroid Build Coastguard Worker #include "dct.h"
116*e5436536SAndroid Build Coastguard Worker 
117*e5436536SAndroid Build Coastguard Worker #define FIXP_QAS FIXP_PCM
118*e5436536SAndroid Build Coastguard Worker #define QAS_BITS SAMPLE_BITS
119*e5436536SAndroid Build Coastguard Worker #define INT_PCM_QMFIN INT_PCM
120*e5436536SAndroid Build Coastguard Worker 
121*e5436536SAndroid Build Coastguard Worker #define FIXP_QSS FIXP_DBL
122*e5436536SAndroid Build Coastguard Worker #define QSS_BITS DFRACT_BITS
123*e5436536SAndroid Build Coastguard Worker 
124*e5436536SAndroid Build Coastguard Worker /* Flags for QMF intialization */
125*e5436536SAndroid Build Coastguard Worker /* Low Power mode flag */
126*e5436536SAndroid Build Coastguard Worker #define QMF_FLAG_LP 1
127*e5436536SAndroid Build Coastguard Worker /* Filter is not symmetric. This flag is set internally in the QMF
128*e5436536SAndroid Build Coastguard Worker  * initialization as required. */
129*e5436536SAndroid Build Coastguard Worker /* DO NOT PASS THIS FLAG TO qmfInitAnalysisFilterBank or
130*e5436536SAndroid Build Coastguard Worker  * qmfInitSynthesisFilterBank */
131*e5436536SAndroid Build Coastguard Worker #define QMF_FLAG_NONSYMMETRIC 2
132*e5436536SAndroid Build Coastguard Worker /* Complex Low Delay Filter Bank (or std symmetric filter bank) */
133*e5436536SAndroid Build Coastguard Worker #define QMF_FLAG_CLDFB 4
134*e5436536SAndroid Build Coastguard Worker /* Flag indicating that the states should be kept. */
135*e5436536SAndroid Build Coastguard Worker #define QMF_FLAG_KEEP_STATES 8
136*e5436536SAndroid Build Coastguard Worker /* Complex Low Delay Filter Bank used in MPEG Surround Encoder */
137*e5436536SAndroid Build Coastguard Worker #define QMF_FLAG_MPSLDFB 16
138*e5436536SAndroid Build Coastguard Worker /* Complex Low Delay Filter Bank used in MPEG Surround Encoder allows a
139*e5436536SAndroid Build Coastguard Worker  * optimized calculation of the modulation in qmfForwardModulationHQ() */
140*e5436536SAndroid Build Coastguard Worker #define QMF_FLAG_MPSLDFB_OPTIMIZE_MODULATION 32
141*e5436536SAndroid Build Coastguard Worker /* Flag to indicate HE-AAC down-sampled SBR mode (decoder) -> adapt analysis
142*e5436536SAndroid Build Coastguard Worker  * post twiddling */
143*e5436536SAndroid Build Coastguard Worker #define QMF_FLAG_DOWNSAMPLED 64
144*e5436536SAndroid Build Coastguard Worker 
145*e5436536SAndroid Build Coastguard Worker #define QMF_MAX_SYNTHESIS_BANDS (64)
146*e5436536SAndroid Build Coastguard Worker 
147*e5436536SAndroid Build Coastguard Worker /*!
148*e5436536SAndroid Build Coastguard Worker  * \brief Algorithmic scaling in sbrForwardModulation()
149*e5436536SAndroid Build Coastguard Worker  *
150*e5436536SAndroid Build Coastguard Worker  * The scaling in sbrForwardModulation() is caused by:
151*e5436536SAndroid Build Coastguard Worker  *
152*e5436536SAndroid Build Coastguard Worker  *   \li 1 R_SHIFT in sbrForwardModulation()
153*e5436536SAndroid Build Coastguard Worker  *   \li 5/6 R_SHIFT in dct3() if using 32/64 Bands
154*e5436536SAndroid Build Coastguard Worker  *   \li 1 omitted gain of 2.0 in qmfForwardModulation()
155*e5436536SAndroid Build Coastguard Worker  */
156*e5436536SAndroid Build Coastguard Worker #define ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK 7
157*e5436536SAndroid Build Coastguard Worker 
158*e5436536SAndroid Build Coastguard Worker /*!
159*e5436536SAndroid Build Coastguard Worker  * \brief Algorithmic scaling in cplxSynthesisQmfFiltering()
160*e5436536SAndroid Build Coastguard Worker  *
161*e5436536SAndroid Build Coastguard Worker  * The scaling in cplxSynthesisQmfFiltering() is caused by:
162*e5436536SAndroid Build Coastguard Worker  *
163*e5436536SAndroid Build Coastguard Worker  *   \li  5/6 R_SHIFT in dct2() if using 32/64 Bands
164*e5436536SAndroid Build Coastguard Worker  *   \li  1 omitted gain of 2.0 in qmfInverseModulation()
165*e5436536SAndroid Build Coastguard Worker  *   \li -6 division by 64 in synthesis filterbank
166*e5436536SAndroid Build Coastguard Worker  *   \li x bits external influence
167*e5436536SAndroid Build Coastguard Worker  */
168*e5436536SAndroid Build Coastguard Worker #define ALGORITHMIC_SCALING_IN_SYNTHESIS_FILTERBANK 1
169*e5436536SAndroid Build Coastguard Worker 
170*e5436536SAndroid Build Coastguard Worker typedef struct {
171*e5436536SAndroid Build Coastguard Worker   int lb_scale;    /*!< Scale of low band area                   */
172*e5436536SAndroid Build Coastguard Worker   int ov_lb_scale; /*!< Scale of adjusted overlap low band area  */
173*e5436536SAndroid Build Coastguard Worker   int hb_scale;    /*!< Scale of high band area                  */
174*e5436536SAndroid Build Coastguard Worker   int ov_hb_scale; /*!< Scale of adjusted overlap high band area */
175*e5436536SAndroid Build Coastguard Worker } QMF_SCALE_FACTOR;
176*e5436536SAndroid Build Coastguard Worker 
177*e5436536SAndroid Build Coastguard Worker struct QMF_FILTER_BANK {
178*e5436536SAndroid Build Coastguard Worker   const FIXP_PFT *p_filter; /*!< Pointer to filter coefficients */
179*e5436536SAndroid Build Coastguard Worker 
180*e5436536SAndroid Build Coastguard Worker   void *FilterStates;    /*!< Pointer to buffer of filter states
181*e5436536SAndroid Build Coastguard Worker                               FIXP_PCM in analyse and
182*e5436536SAndroid Build Coastguard Worker                               FIXP_DBL in synthesis filter */
183*e5436536SAndroid Build Coastguard Worker   int FilterSize;        /*!< Size of prototype filter. */
184*e5436536SAndroid Build Coastguard Worker   const FIXP_QTW *t_cos; /*!< Modulation tables. */
185*e5436536SAndroid Build Coastguard Worker   const FIXP_QTW *t_sin;
186*e5436536SAndroid Build Coastguard Worker   int filterScale; /*!< filter scale */
187*e5436536SAndroid Build Coastguard Worker 
188*e5436536SAndroid Build Coastguard Worker   int no_channels; /*!< Total number of channels (subbands) */
189*e5436536SAndroid Build Coastguard Worker   int no_col;      /*!< Number of time slots       */
190*e5436536SAndroid Build Coastguard Worker   int lsb;         /*!< Top of low subbands */
191*e5436536SAndroid Build Coastguard Worker   int usb;         /*!< Top of high subbands */
192*e5436536SAndroid Build Coastguard Worker 
193*e5436536SAndroid Build Coastguard Worker   int synScalefactor; /*!< Scale factor of synthesis qmf (syn only) */
194*e5436536SAndroid Build Coastguard Worker   int outScalefactor; /*!< Scale factor of output data (syn only) */
195*e5436536SAndroid Build Coastguard Worker   FIXP_DBL outGain_m; /*!< Mantissa of gain output data (syn only) (init with
196*e5436536SAndroid Build Coastguard Worker                          0x80000000 to ignore) */
197*e5436536SAndroid Build Coastguard Worker   int outGain_e;      /*!< Exponent of gain output data (syn only) */
198*e5436536SAndroid Build Coastguard Worker 
199*e5436536SAndroid Build Coastguard Worker   UINT flags;     /*!< flags */
200*e5436536SAndroid Build Coastguard Worker   UCHAR p_stride; /*!< Stride Factor of polyphase filters */
201*e5436536SAndroid Build Coastguard Worker };
202*e5436536SAndroid Build Coastguard Worker 
203*e5436536SAndroid Build Coastguard Worker typedef struct QMF_FILTER_BANK *HANDLE_QMF_FILTER_BANK;
204*e5436536SAndroid Build Coastguard Worker 
205*e5436536SAndroid Build Coastguard Worker int qmfInitAnalysisFilterBank(
206*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK h_Qmf, /*!< QMF Handle */
207*e5436536SAndroid Build Coastguard Worker     FIXP_QAS *pFilterStates,      /*!< Pointer to filter state buffer */
208*e5436536SAndroid Build Coastguard Worker     int noCols,                   /*!< Number of time slots  */
209*e5436536SAndroid Build Coastguard Worker     int lsb,                      /*!< Number of lower bands */
210*e5436536SAndroid Build Coastguard Worker     int usb,                      /*!< Number of upper bands */
211*e5436536SAndroid Build Coastguard Worker     int no_channels,              /*!< Number of critically sampled bands */
212*e5436536SAndroid Build Coastguard Worker     int flags);                   /*!< Flags */
213*e5436536SAndroid Build Coastguard Worker #if SAMPLE_BITS == 16
214*e5436536SAndroid Build Coastguard Worker 
215*e5436536SAndroid Build Coastguard Worker int qmfInitAnalysisFilterBank(
216*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK h_Qmf, /*!< QMF Handle */
217*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *pFilterStates,      /*!< Pointer to filter state buffer */
218*e5436536SAndroid Build Coastguard Worker     int noCols,                   /*!< Number of time slots  */
219*e5436536SAndroid Build Coastguard Worker     int lsb,                      /*!< Number of lower bands */
220*e5436536SAndroid Build Coastguard Worker     int usb,                      /*!< Number of upper bands */
221*e5436536SAndroid Build Coastguard Worker     int no_channels,              /*!< Number of critically sampled bands */
222*e5436536SAndroid Build Coastguard Worker     int flags);                   /*!< Flags */
223*e5436536SAndroid Build Coastguard Worker #endif
224*e5436536SAndroid Build Coastguard Worker 
225*e5436536SAndroid Build Coastguard Worker void qmfAnalysisFiltering(
226*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Analysis Bank   */
227*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **qmfReal,            /*!< Pointer to real subband slots */
228*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **qmfImag,            /*!< Pointer to imag subband slots */
229*e5436536SAndroid Build Coastguard Worker     QMF_SCALE_FACTOR *scaleFactor, /*!< Scale factors of QMF data     */
230*e5436536SAndroid Build Coastguard Worker     const INT_PCM *timeIn,         /*!< Time signal */
231*e5436536SAndroid Build Coastguard Worker     const int timeIn_e,            /*!< Exponent of audio data        */
232*e5436536SAndroid Build Coastguard Worker     const int stride,              /*!< Stride factor of audio data   */
233*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *pWorkBuffer          /*!< pointer to temporal working buffer */
234*e5436536SAndroid Build Coastguard Worker );
235*e5436536SAndroid Build Coastguard Worker #if SAMPLE_BITS == 16
236*e5436536SAndroid Build Coastguard Worker 
237*e5436536SAndroid Build Coastguard Worker void qmfAnalysisFiltering(
238*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Analysis Bank   */
239*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **qmfReal,            /*!< Pointer to real subband slots */
240*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **qmfImag,            /*!< Pointer to imag subband slots */
241*e5436536SAndroid Build Coastguard Worker     QMF_SCALE_FACTOR *scaleFactor, /*!< Scale factors of QMF data     */
242*e5436536SAndroid Build Coastguard Worker     const LONG *timeIn,            /*!< Time signal */
243*e5436536SAndroid Build Coastguard Worker     const int timeIn_e,            /*!< Exponent of audio data        */
244*e5436536SAndroid Build Coastguard Worker     const int stride,              /*!< Stride factor of audio data   */
245*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *pWorkBuffer          /*!< pointer to temporary working buffer */
246*e5436536SAndroid Build Coastguard Worker );
247*e5436536SAndroid Build Coastguard Worker #endif
248*e5436536SAndroid Build Coastguard Worker 
249*e5436536SAndroid Build Coastguard Worker void qmfAnalysisFilteringSlot(
250*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Synthesis Bank  */
251*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *qmfReal,             /*!< Low and High band, real */
252*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *qmfImag,             /*!< Low and High band, imag */
253*e5436536SAndroid Build Coastguard Worker     const INT_PCM *timeIn,         /*!< Pointer to input */
254*e5436536SAndroid Build Coastguard Worker     const int stride,              /*!< stride factor of input */
255*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *pWorkBuffer          /*!< pointer to temporal working buffer */
256*e5436536SAndroid Build Coastguard Worker );
257*e5436536SAndroid Build Coastguard Worker #if SAMPLE_BITS == 16
258*e5436536SAndroid Build Coastguard Worker 
259*e5436536SAndroid Build Coastguard Worker void qmfAnalysisFilteringSlot(
260*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Synthesis Bank  */
261*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *qmfReal,             /*!< Low and High band, real */
262*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *qmfImag,             /*!< Low and High band, imag */
263*e5436536SAndroid Build Coastguard Worker     const LONG *timeIn,            /*!< Pointer to input */
264*e5436536SAndroid Build Coastguard Worker     const int stride,              /*!< stride factor of input */
265*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *pWorkBuffer          /*!< pointer to temporary working buffer */
266*e5436536SAndroid Build Coastguard Worker );
267*e5436536SAndroid Build Coastguard Worker #endif
268*e5436536SAndroid Build Coastguard Worker 
269*e5436536SAndroid Build Coastguard Worker int qmfInitSynthesisFilterBank(
270*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK h_Qmf, /*!< QMF Handle */
271*e5436536SAndroid Build Coastguard Worker     FIXP_QSS *pFilterStates,      /*!< Pointer to filter state buffer */
272*e5436536SAndroid Build Coastguard Worker     int noCols,                   /*!< Number of time slots  */
273*e5436536SAndroid Build Coastguard Worker     int lsb,                      /*!< Number of lower bands */
274*e5436536SAndroid Build Coastguard Worker     int usb,                      /*!< Number of upper bands */
275*e5436536SAndroid Build Coastguard Worker     int no_channels,              /*!< Number of critically sampled bands */
276*e5436536SAndroid Build Coastguard Worker     int flags);                   /*!< Flags */
277*e5436536SAndroid Build Coastguard Worker 
278*e5436536SAndroid Build Coastguard Worker void qmfSynthesisFiltering(
279*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK synQmf,       /*!< Handle of Qmf Synthesis Bank  */
280*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **QmfBufferReal,            /*!< Pointer to real subband slots */
281*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **QmfBufferImag,            /*!< Pointer to imag subband slots */
282*e5436536SAndroid Build Coastguard Worker     const QMF_SCALE_FACTOR *scaleFactor, /*!< Scale factors of QMF data     */
283*e5436536SAndroid Build Coastguard Worker     const int ov_len,                    /*!< Length of band overlap        */
284*e5436536SAndroid Build Coastguard Worker     INT_PCM *timeOut,                    /*!< Time signal */
285*e5436536SAndroid Build Coastguard Worker     const INT stride,                    /*!< Stride factor of audio data   */
286*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *pWorkBuffer /*!< pointer to temporary working buffer. It must be
287*e5436536SAndroid Build Coastguard Worker                              aligned */
288*e5436536SAndroid Build Coastguard Worker );
289*e5436536SAndroid Build Coastguard Worker #if SAMPLE_BITS == 16
290*e5436536SAndroid Build Coastguard Worker 
291*e5436536SAndroid Build Coastguard Worker void qmfSynthesisFiltering(
292*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK synQmf,       /*!< Handle of Qmf Synthesis Bank  */
293*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **QmfBufferReal,            /*!< Pointer to real subband slots */
294*e5436536SAndroid Build Coastguard Worker     FIXP_DBL **QmfBufferImag,            /*!< Pointer to imag subband slots */
295*e5436536SAndroid Build Coastguard Worker     const QMF_SCALE_FACTOR *scaleFactor, /*!< Scale factors of QMF data     */
296*e5436536SAndroid Build Coastguard Worker     const int ov_len,                    /*!< Length of band overlap        */
297*e5436536SAndroid Build Coastguard Worker     LONG *timeOut,                       /*!< Time signal */
298*e5436536SAndroid Build Coastguard Worker     const int timeOut_e,                 /*!< Target exponent for timeOut  */
299*e5436536SAndroid Build Coastguard Worker     FIXP_DBL *pWorkBuffer /*!< pointer to temporary working buffer */
300*e5436536SAndroid Build Coastguard Worker );
301*e5436536SAndroid Build Coastguard Worker #endif
302*e5436536SAndroid Build Coastguard Worker 
303*e5436536SAndroid Build Coastguard Worker void qmfSynthesisFilteringSlot(HANDLE_QMF_FILTER_BANK synQmf,
304*e5436536SAndroid Build Coastguard Worker                                const FIXP_DBL *realSlot,
305*e5436536SAndroid Build Coastguard Worker                                const FIXP_DBL *imagSlot,
306*e5436536SAndroid Build Coastguard Worker                                const int scaleFactorLowBand,
307*e5436536SAndroid Build Coastguard Worker                                const int scaleFactorHighBand, INT_PCM *timeOut,
308*e5436536SAndroid Build Coastguard Worker                                const int timeOut_e, FIXP_DBL *pWorkBuffer);
309*e5436536SAndroid Build Coastguard Worker #if SAMPLE_BITS == 16
310*e5436536SAndroid Build Coastguard Worker 
311*e5436536SAndroid Build Coastguard Worker void qmfSynthesisFilteringSlot(HANDLE_QMF_FILTER_BANK synQmf,
312*e5436536SAndroid Build Coastguard Worker                                const FIXP_DBL *realSlot,
313*e5436536SAndroid Build Coastguard Worker                                const FIXP_DBL *imagSlot,
314*e5436536SAndroid Build Coastguard Worker                                const int scaleFactorLowBand,
315*e5436536SAndroid Build Coastguard Worker                                const int scaleFactorHighBand, LONG *timeOut,
316*e5436536SAndroid Build Coastguard Worker                                const int timeOut_e, FIXP_DBL *pWorkBuffer);
317*e5436536SAndroid Build Coastguard Worker #endif
318*e5436536SAndroid Build Coastguard Worker 
319*e5436536SAndroid Build Coastguard Worker void qmfChangeOutScalefactor(
320*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */
321*e5436536SAndroid Build Coastguard Worker     int outScalefactor             /*!< New scaling factor for output data */
322*e5436536SAndroid Build Coastguard Worker );
323*e5436536SAndroid Build Coastguard Worker 
324*e5436536SAndroid Build Coastguard Worker int qmfGetOutScalefactor(
325*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK synQmf /*!< Handle of Qmf Synthesis Bank */
326*e5436536SAndroid Build Coastguard Worker );
327*e5436536SAndroid Build Coastguard Worker 
328*e5436536SAndroid Build Coastguard Worker void qmfChangeOutGain(
329*e5436536SAndroid Build Coastguard Worker     HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */
330*e5436536SAndroid Build Coastguard Worker     FIXP_DBL outputGain,           /*!< New gain for output data (mantissa) */
331*e5436536SAndroid Build Coastguard Worker     int outputGainScale            /*!< New gain for output data (exponent) */
332*e5436536SAndroid Build Coastguard Worker );
333*e5436536SAndroid Build Coastguard Worker 
334*e5436536SAndroid Build Coastguard Worker #endif /*ifndef QMF_H       */
335