xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_sbrdec_initfuncs.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker  *
5*15dc779aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker  *
9*15dc779aSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker  *
11*15dc779aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker  * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker  *
17*15dc779aSAndroid Build Coastguard Worker  *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker */
20*15dc779aSAndroid Build Coastguard Worker #include <string.h>
21*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_common.h"
22*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
23*15dc779aSAndroid Build Coastguard Worker 
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops16.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_defines.h"
30*15dc779aSAndroid Build Coastguard Worker 
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_intrinsics.h"
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_sbr_const.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_op.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_defines.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_bitbuffer.h"
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pns.h"
37*15dc779aSAndroid Build Coastguard Worker 
38*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aac_rom.h"
39*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pulsedata.h"
40*15dc779aSAndroid Build Coastguard Worker 
41*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_data_struct.h"
42*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lt_predict.h"
43*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_cnst.h"
44*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_defines.h"
45*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_struct_def.h"
46*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_channelinfo.h"
47*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_dec.h"
48*15dc779aSAndroid Build Coastguard Worker 
49*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecoder.h"
50*15dc779aSAndroid Build Coastguard Worker 
51*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecsettings.h"
52*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_scale.h"
53*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lpp_tran.h"
54*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr_part.h"
55*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_rom.h"
56*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_hybrid.h"
57*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_dec.h"
58*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_bitdec.h"
59*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr.h"
60*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_common_rom.h"
61*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_freq_sca.h"
62*15dc779aSAndroid Build Coastguard Worker 
63*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_qmf_dec.h"
64*15dc779aSAndroid Build Coastguard Worker 
65*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_calc.h"
66*15dc779aSAndroid Build Coastguard Worker 
67*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pvc_dec.h"
68*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_dec.h"
69*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_dec.h"
70*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_basic_funcs.h"
71*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_crc.h"
72*15dc779aSAndroid Build Coastguard Worker 
73*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrqmftrans.h"
74*15dc779aSAndroid Build Coastguard Worker 
75*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_audioobjtypes.h"
76*15dc779aSAndroid Build Coastguard Worker 
77*15dc779aSAndroid Build Coastguard Worker extern const WORD32 ixheaacd_ldmps_polyphase_filter_coeff_fix[1280];
78*15dc779aSAndroid Build Coastguard Worker 
79*15dc779aSAndroid Build Coastguard Worker #define ALIGN_SIZE64(x) ((((x) + 7) >> 3) << 3)
80*15dc779aSAndroid Build Coastguard Worker 
81*15dc779aSAndroid Build Coastguard Worker #define FD_OVERSAMPLING_FAC (1.5f)
82*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_getsize_sbr_persistent()83*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_getsize_sbr_persistent() {
84*15dc779aSAndroid Build Coastguard Worker   return (IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_sbr_pers_struct), BYTE_ALIGN_8));
85*15dc779aSAndroid Build Coastguard Worker }
86*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_esbr_hbe_data_init(ia_esbr_hbe_txposer_struct * pstr_esbr_hbe_txposer,const WORD32 num_aac_samples,WORD32 samp_fac_4_flag,const WORD32 num_out_samples,VOID * persistent_hbe_mem,WORD32 * total_persistant)87*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_esbr_hbe_data_init(
88*15dc779aSAndroid Build Coastguard Worker     ia_esbr_hbe_txposer_struct *pstr_esbr_hbe_txposer,
89*15dc779aSAndroid Build Coastguard Worker     const WORD32 num_aac_samples, WORD32 samp_fac_4_flag,
90*15dc779aSAndroid Build Coastguard Worker     const WORD32 num_out_samples, VOID *persistent_hbe_mem,
91*15dc779aSAndroid Build Coastguard Worker     WORD32 *total_persistant) {
92*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
93*15dc779aSAndroid Build Coastguard Worker   WORD32 used_persistent = 0;
94*15dc779aSAndroid Build Coastguard Worker 
95*15dc779aSAndroid Build Coastguard Worker   if (pstr_esbr_hbe_txposer) {
96*15dc779aSAndroid Build Coastguard Worker     memset(pstr_esbr_hbe_txposer, 0,
97*15dc779aSAndroid Build Coastguard Worker            IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_esbr_hbe_txposer_struct), BYTE_ALIGN_8));
98*15dc779aSAndroid Build Coastguard Worker 
99*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->core_frame_length = num_aac_samples;
100*15dc779aSAndroid Build Coastguard Worker 
101*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->no_bins = num_out_samples / NO_QMF_SYNTH_CHANNELS;
102*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->hbe_qmf_in_len =
103*15dc779aSAndroid Build Coastguard Worker         pstr_esbr_hbe_txposer->no_bins;
104*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->hbe_qmf_out_len =
105*15dc779aSAndroid Build Coastguard Worker         2 * pstr_esbr_hbe_txposer->hbe_qmf_in_len;
106*15dc779aSAndroid Build Coastguard Worker 
107*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->ptr_input_buf =
108*15dc779aSAndroid Build Coastguard Worker         (FLOAT32 *)((WORD8 *)persistent_hbe_mem);
109*15dc779aSAndroid Build Coastguard Worker     used_persistent +=
110*15dc779aSAndroid Build Coastguard Worker         (num_aac_samples + NO_QMF_SYNTH_CHANNELS) * sizeof(FLOAT32);
111*15dc779aSAndroid Build Coastguard Worker 
112*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->qmf_in_buf =
113*15dc779aSAndroid Build Coastguard Worker         (FLOAT32 **)((WORD8 *)persistent_hbe_mem + used_persistent);
114*15dc779aSAndroid Build Coastguard Worker     used_persistent +=
115*15dc779aSAndroid Build Coastguard Worker         pstr_esbr_hbe_txposer->hbe_qmf_in_len * sizeof(FLOAT32 *);
116*15dc779aSAndroid Build Coastguard Worker 
117*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < pstr_esbr_hbe_txposer->hbe_qmf_in_len; i++) {
118*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->qmf_in_buf[i] =
119*15dc779aSAndroid Build Coastguard Worker           (FLOAT32 *)((WORD8 *)persistent_hbe_mem + used_persistent);
120*15dc779aSAndroid Build Coastguard Worker 
121*15dc779aSAndroid Build Coastguard Worker       used_persistent += (TWICE_QMF_SYNTH_CHANNELS_NUM * sizeof(FLOAT32));
122*15dc779aSAndroid Build Coastguard Worker     }
123*15dc779aSAndroid Build Coastguard Worker 
124*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->qmf_out_buf =
125*15dc779aSAndroid Build Coastguard Worker         (FLOAT32 **)((WORD8 *)persistent_hbe_mem + used_persistent);
126*15dc779aSAndroid Build Coastguard Worker     used_persistent +=
127*15dc779aSAndroid Build Coastguard Worker         (pstr_esbr_hbe_txposer->hbe_qmf_out_len * sizeof(FLOAT32 *));
128*15dc779aSAndroid Build Coastguard Worker 
129*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < pstr_esbr_hbe_txposer->hbe_qmf_out_len; i++) {
130*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->qmf_out_buf[i] =
131*15dc779aSAndroid Build Coastguard Worker           (FLOAT32 *)((WORD8 *)persistent_hbe_mem + used_persistent);
132*15dc779aSAndroid Build Coastguard Worker       used_persistent += (TWICE_QMF_SYNTH_CHANNELS_NUM * sizeof(FLOAT32));
133*15dc779aSAndroid Build Coastguard Worker     }
134*15dc779aSAndroid Build Coastguard Worker     pstr_esbr_hbe_txposer->upsamp_4_flag = samp_fac_4_flag;
135*15dc779aSAndroid Build Coastguard Worker     if (pstr_esbr_hbe_txposer) {
136*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->fft_size[0] = num_aac_samples;
137*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->fft_size[1] = (WORD32)(FD_OVERSAMPLING_FAC * num_aac_samples);
138*15dc779aSAndroid Build Coastguard Worker 
139*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->ptr_spectrum = &pstr_esbr_hbe_txposer->spectrum_buf[0];
140*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->ptr_spectrum_tx =
141*15dc779aSAndroid Build Coastguard Worker           &pstr_esbr_hbe_txposer->spectrum_transposed_buf[0];
142*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->mag = &pstr_esbr_hbe_txposer->mag_buf[0];
143*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->phase = &pstr_esbr_hbe_txposer->phase_buf[0];
144*15dc779aSAndroid Build Coastguard Worker       pstr_esbr_hbe_txposer->ptr_output_buf = &pstr_esbr_hbe_txposer->output_buf[0];
145*15dc779aSAndroid Build Coastguard Worker     }
146*15dc779aSAndroid Build Coastguard Worker   }
147*15dc779aSAndroid Build Coastguard Worker   *total_persistant = used_persistent;
148*15dc779aSAndroid Build Coastguard Worker   return;
149*15dc779aSAndroid Build Coastguard Worker }
150*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_set_sbr_persistent_table_pointer(VOID * sbr_persistent_mem_v,ia_sbr_tables_struct * sbr_tables_ptr,ixheaacd_misc_tables * pstr_common_tables)151*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_set_sbr_persistent_table_pointer(
152*15dc779aSAndroid Build Coastguard Worker     VOID *sbr_persistent_mem_v, ia_sbr_tables_struct *sbr_tables_ptr,
153*15dc779aSAndroid Build Coastguard Worker     ixheaacd_misc_tables *pstr_common_tables) {
154*15dc779aSAndroid Build Coastguard Worker   ia_sbr_pers_struct *sbr_persistent_mem =
155*15dc779aSAndroid Build Coastguard Worker       (ia_sbr_pers_struct *)sbr_persistent_mem_v;
156*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_tables = sbr_tables_ptr;
157*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->str_sbr_dec_inst.pstr_common_tables = pstr_common_tables;
158*15dc779aSAndroid Build Coastguard Worker }
159*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_set_sbr_persistent_buffers(VOID * sbr_persistent_mem_v,WORD32 * persistent_used,WORD32 num_channel,WORD ps_enable)160*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_set_sbr_persistent_buffers(VOID *sbr_persistent_mem_v,
161*15dc779aSAndroid Build Coastguard Worker                                          WORD32 *persistent_used,
162*15dc779aSAndroid Build Coastguard Worker                                          WORD32 num_channel, WORD ps_enable) {
163*15dc779aSAndroid Build Coastguard Worker   WORD32 i = 0;
164*15dc779aSAndroid Build Coastguard Worker   WORD32 used_persistent = *persistent_used;
165*15dc779aSAndroid Build Coastguard Worker   WORD32 temp, temp1, temp2, temp3;
166*15dc779aSAndroid Build Coastguard Worker   struct ia_sbr_pers_struct *sbr_persistent_mem =
167*15dc779aSAndroid Build Coastguard Worker       (struct ia_sbr_pers_struct *)sbr_persistent_mem_v;
168*15dc779aSAndroid Build Coastguard Worker 
169*15dc779aSAndroid Build Coastguard Worker   struct ia_sbr_dec_inst_struct *p_str_sbr_dec_inst =
170*15dc779aSAndroid Build Coastguard Worker       &sbr_persistent_mem->str_sbr_dec_inst;
171*15dc779aSAndroid Build Coastguard Worker 
172*15dc779aSAndroid Build Coastguard Worker   num_channel = max(2, num_channel);
173*15dc779aSAndroid Build Coastguard Worker   memset(sbr_persistent_mem, 0,
174*15dc779aSAndroid Build Coastguard Worker          IXHEAAC_GET_SIZE_ALIGNED(sizeof(struct ia_sbr_pers_struct), BYTE_ALIGN_8));
175*15dc779aSAndroid Build Coastguard Worker 
176*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->sbr_qmf_analy_states =
177*15dc779aSAndroid Build Coastguard Worker       (WORD16 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
178*15dc779aSAndroid Build Coastguard Worker   temp = num_channel *
179*15dc779aSAndroid Build Coastguard Worker          IXHEAAC_GET_SIZE_ALIGNED((QMF_FILTER_STATE_ANA_SIZE + 2 * NO_ANALYSIS_CHANNELS) *
180*15dc779aSAndroid Build Coastguard Worker                                       sizeof(sbr_persistent_mem->sbr_qmf_analy_states[0]),
181*15dc779aSAndroid Build Coastguard Worker                                   BYTE_ALIGN_8);
182*15dc779aSAndroid Build Coastguard Worker   used_persistent += temp;
183*15dc779aSAndroid Build Coastguard Worker 
184*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->sbr_qmf_analy_states_32 =
185*15dc779aSAndroid Build Coastguard Worker       (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
186*15dc779aSAndroid Build Coastguard Worker   temp1 = num_channel *
187*15dc779aSAndroid Build Coastguard Worker           IXHEAAC_GET_SIZE_ALIGNED((QMF_FILTER_STATE_ANA_SIZE + 2 * NO_ANALYSIS_CHANNELS) *
188*15dc779aSAndroid Build Coastguard Worker                                        sizeof(sbr_persistent_mem->sbr_qmf_analy_states_32[0]),
189*15dc779aSAndroid Build Coastguard Worker                                    BYTE_ALIGN_8);
190*15dc779aSAndroid Build Coastguard Worker   used_persistent += temp1;
191*15dc779aSAndroid Build Coastguard Worker 
192*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->sbr_qmf_synth_states =
193*15dc779aSAndroid Build Coastguard Worker       (WORD16 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
194*15dc779aSAndroid Build Coastguard Worker 
195*15dc779aSAndroid Build Coastguard Worker   temp2 = (num_channel *
196*15dc779aSAndroid Build Coastguard Worker            IXHEAAC_GET_SIZE_ALIGNED((QMF_FILTER_STATE_SYN_SIZE + 2 * NO_SYNTHESIS_CHANNELS) *
197*15dc779aSAndroid Build Coastguard Worker                                         sizeof(sbr_persistent_mem->sbr_qmf_synth_states[0]),
198*15dc779aSAndroid Build Coastguard Worker                                     BYTE_ALIGN_8));
199*15dc779aSAndroid Build Coastguard Worker   used_persistent += temp2;
200*15dc779aSAndroid Build Coastguard Worker 
201*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->sbr_qmf_synth_states_32 =
202*15dc779aSAndroid Build Coastguard Worker       (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
203*15dc779aSAndroid Build Coastguard Worker 
204*15dc779aSAndroid Build Coastguard Worker   temp3 = (num_channel *
205*15dc779aSAndroid Build Coastguard Worker            IXHEAAC_GET_SIZE_ALIGNED((QMF_FILTER_STATE_SYN_SIZE + 2 * NO_SYNTHESIS_CHANNELS) *
206*15dc779aSAndroid Build Coastguard Worker                                         sizeof(sbr_persistent_mem->sbr_qmf_synth_states_32[0]),
207*15dc779aSAndroid Build Coastguard Worker                                     BYTE_ALIGN_8));
208*15dc779aSAndroid Build Coastguard Worker   used_persistent += temp3;
209*15dc779aSAndroid Build Coastguard Worker 
210*15dc779aSAndroid Build Coastguard Worker   memset(sbr_persistent_mem->sbr_qmf_analy_states, 0,
211*15dc779aSAndroid Build Coastguard Worker          (temp + temp1 + temp2 + temp3));
212*15dc779aSAndroid Build Coastguard Worker 
213*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < num_channel; i++) {
214*15dc779aSAndroid Build Coastguard Worker     sbr_persistent_mem->ptr_sbr_overlap_buf[i] =
215*15dc779aSAndroid Build Coastguard Worker         (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
216*15dc779aSAndroid Build Coastguard Worker 
217*15dc779aSAndroid Build Coastguard Worker     if (ps_enable) {
218*15dc779aSAndroid Build Coastguard Worker       memset(
219*15dc779aSAndroid Build Coastguard Worker           sbr_persistent_mem->ptr_sbr_overlap_buf[i], 0,
220*15dc779aSAndroid Build Coastguard Worker           2 * IXHEAAC_GET_SIZE_ALIGNED(MAX_OV_COLS * NO_SYNTHESIS_CHANNELS *
221*15dc779aSAndroid Build Coastguard Worker                                            sizeof(sbr_persistent_mem->ptr_sbr_overlap_buf[i][0]),
222*15dc779aSAndroid Build Coastguard Worker                                        BYTE_ALIGN_8));
223*15dc779aSAndroid Build Coastguard Worker       used_persistent +=
224*15dc779aSAndroid Build Coastguard Worker           2 * IXHEAAC_GET_SIZE_ALIGNED(MAX_OV_COLS * NO_SYNTHESIS_CHANNELS *
225*15dc779aSAndroid Build Coastguard Worker                                            sizeof(sbr_persistent_mem->ptr_sbr_overlap_buf[i][0]),
226*15dc779aSAndroid Build Coastguard Worker                                        BYTE_ALIGN_8);
227*15dc779aSAndroid Build Coastguard Worker     } else {
228*15dc779aSAndroid Build Coastguard Worker       memset(sbr_persistent_mem->ptr_sbr_overlap_buf[i], 0,
229*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(MAX_OV_COLS * NO_SYNTHESIS_CHANNELS *
230*15dc779aSAndroid Build Coastguard Worker                                           sizeof(sbr_persistent_mem->ptr_sbr_overlap_buf[i][0]),
231*15dc779aSAndroid Build Coastguard Worker                                       BYTE_ALIGN_8));
232*15dc779aSAndroid Build Coastguard Worker       used_persistent +=
233*15dc779aSAndroid Build Coastguard Worker           IXHEAAC_GET_SIZE_ALIGNED(MAX_OV_COLS * NO_SYNTHESIS_CHANNELS *
234*15dc779aSAndroid Build Coastguard Worker                                        sizeof(sbr_persistent_mem->ptr_sbr_overlap_buf[i][0]),
235*15dc779aSAndroid Build Coastguard Worker                                    BYTE_ALIGN_8);
236*15dc779aSAndroid Build Coastguard Worker     }
237*15dc779aSAndroid Build Coastguard Worker   }
238*15dc779aSAndroid Build Coastguard Worker 
239*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < num_channel; i++) {
240*15dc779aSAndroid Build Coastguard Worker     WORD32 j;
241*15dc779aSAndroid Build Coastguard Worker     sbr_persistent_mem->sbr_lpc_filter_states_real[i] =
242*15dc779aSAndroid Build Coastguard Worker         (WORD32 **)((WORD8 *)sbr_persistent_mem_v + used_persistent);
243*15dc779aSAndroid Build Coastguard Worker     used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
244*15dc779aSAndroid Build Coastguard Worker         LPC_ORDER * sizeof(sbr_persistent_mem->sbr_lpc_filter_states_real[i][0]), BYTE_ALIGN_8);
245*15dc779aSAndroid Build Coastguard Worker     for (j = 0; j < LPC_ORDER; j++) {
246*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->sbr_lpc_filter_states_real[i][j] =
247*15dc779aSAndroid Build Coastguard Worker           (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
248*15dc779aSAndroid Build Coastguard Worker 
249*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
250*15dc779aSAndroid Build Coastguard Worker           NO_ANALYSIS_CHANNELS * sizeof(sbr_persistent_mem->sbr_lpc_filter_states_real[i][j][0]),
251*15dc779aSAndroid Build Coastguard Worker           BYTE_ALIGN_8);
252*15dc779aSAndroid Build Coastguard Worker 
253*15dc779aSAndroid Build Coastguard Worker       memset(sbr_persistent_mem->sbr_lpc_filter_states_real[i][j], 0,
254*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(
255*15dc779aSAndroid Build Coastguard Worker                  NO_ANALYSIS_CHANNELS *
256*15dc779aSAndroid Build Coastguard Worker                      sizeof(sbr_persistent_mem->sbr_lpc_filter_states_real[i][j][0]),
257*15dc779aSAndroid Build Coastguard Worker                  BYTE_ALIGN_8));
258*15dc779aSAndroid Build Coastguard Worker     }
259*15dc779aSAndroid Build Coastguard Worker   }
260*15dc779aSAndroid Build Coastguard Worker 
261*15dc779aSAndroid Build Coastguard Worker   if (ps_enable) {
262*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < num_channel; i++) {
263*15dc779aSAndroid Build Coastguard Worker       WORD32 j;
264*15dc779aSAndroid Build Coastguard Worker 
265*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->sbr_lpc_filter_states_imag[i] =
266*15dc779aSAndroid Build Coastguard Worker           (WORD32 **)((WORD8 *)sbr_persistent_mem_v + used_persistent);
267*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
268*15dc779aSAndroid Build Coastguard Worker           LPC_ORDER * sizeof(sbr_persistent_mem->sbr_lpc_filter_states_imag[i][0]), BYTE_ALIGN_8);
269*15dc779aSAndroid Build Coastguard Worker       for (j = 0; j < LPC_ORDER; j++) {
270*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->sbr_lpc_filter_states_imag[i][j] =
271*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
272*15dc779aSAndroid Build Coastguard Worker 
273*15dc779aSAndroid Build Coastguard Worker         used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
274*15dc779aSAndroid Build Coastguard Worker             NO_ANALYSIS_CHANNELS *
275*15dc779aSAndroid Build Coastguard Worker                 sizeof(sbr_persistent_mem->sbr_lpc_filter_states_imag[i][j][0]),
276*15dc779aSAndroid Build Coastguard Worker             BYTE_ALIGN_8);
277*15dc779aSAndroid Build Coastguard Worker 
278*15dc779aSAndroid Build Coastguard Worker         memset(sbr_persistent_mem->sbr_lpc_filter_states_imag[i][j], 0,
279*15dc779aSAndroid Build Coastguard Worker                IXHEAAC_GET_SIZE_ALIGNED(
280*15dc779aSAndroid Build Coastguard Worker                    NO_ANALYSIS_CHANNELS *
281*15dc779aSAndroid Build Coastguard Worker                        sizeof(sbr_persistent_mem->sbr_lpc_filter_states_imag[i][j][0]),
282*15dc779aSAndroid Build Coastguard Worker                    BYTE_ALIGN_8));
283*15dc779aSAndroid Build Coastguard Worker       }
284*15dc779aSAndroid Build Coastguard Worker     }
285*15dc779aSAndroid Build Coastguard Worker   }
286*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < num_channel; i++) {
287*15dc779aSAndroid Build Coastguard Worker     WORD32 initial_used = used_persistent;
288*15dc779aSAndroid Build Coastguard Worker     WORD32 temp_used = used_persistent;
289*15dc779aSAndroid Build Coastguard Worker 
290*15dc779aSAndroid Build Coastguard Worker     sbr_persistent_mem->sbr_smooth_gain_buf[i] =
291*15dc779aSAndroid Build Coastguard Worker         (WORD16 *)((WORD8 *)sbr_persistent_mem_v + temp_used);
292*15dc779aSAndroid Build Coastguard Worker     temp_used += 2 * IXHEAAC_GET_SIZE_ALIGNED(
293*15dc779aSAndroid Build Coastguard Worker                          MAX_FREQ_COEFFS * sizeof(sbr_persistent_mem->sbr_smooth_gain_buf[i][0]),
294*15dc779aSAndroid Build Coastguard Worker                          BYTE_ALIGN_8);
295*15dc779aSAndroid Build Coastguard Worker 
296*15dc779aSAndroid Build Coastguard Worker     sbr_persistent_mem->sbr_smooth_noise_buf[i] =
297*15dc779aSAndroid Build Coastguard Worker         (WORD16 *)((WORD8 *)sbr_persistent_mem_v + temp_used);
298*15dc779aSAndroid Build Coastguard Worker 
299*15dc779aSAndroid Build Coastguard Worker     temp_used += IXHEAAC_GET_SIZE_ALIGNED(
300*15dc779aSAndroid Build Coastguard Worker         MAX_FREQ_COEFFS * sizeof(sbr_persistent_mem->sbr_smooth_noise_buf[i][0]), BYTE_ALIGN_8);
301*15dc779aSAndroid Build Coastguard Worker 
302*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_freq_band_data[i] =
303*15dc779aSAndroid Build Coastguard Worker         (VOID *)((WORD8 *)sbr_persistent_mem_v + temp_used);
304*15dc779aSAndroid Build Coastguard Worker 
305*15dc779aSAndroid Build Coastguard Worker     temp_used += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_freq_band_data_struct), BYTE_ALIGN_8);
306*15dc779aSAndroid Build Coastguard Worker 
307*15dc779aSAndroid Build Coastguard Worker     sbr_persistent_mem->pstr_prev_frame_data[i] =
308*15dc779aSAndroid Build Coastguard Worker         (VOID *)((WORD8 *)sbr_persistent_mem_v + temp_used);
309*15dc779aSAndroid Build Coastguard Worker 
310*15dc779aSAndroid Build Coastguard Worker     temp_used += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_sbr_prev_frame_data_struct), BYTE_ALIGN_8);
311*15dc779aSAndroid Build Coastguard Worker 
312*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_sbr_channel[i] =
313*15dc779aSAndroid Build Coastguard Worker         (VOID *)((WORD8 *)sbr_persistent_mem_v + temp_used);
314*15dc779aSAndroid Build Coastguard Worker 
315*15dc779aSAndroid Build Coastguard Worker     temp_used += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_sbr_channel_struct), BYTE_ALIGN_8);
316*15dc779aSAndroid Build Coastguard Worker 
317*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_sbr_header[i] =
318*15dc779aSAndroid Build Coastguard Worker         (VOID *)((WORD8 *)sbr_persistent_mem_v + temp_used);
319*15dc779aSAndroid Build Coastguard Worker 
320*15dc779aSAndroid Build Coastguard Worker     temp_used += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_sbr_header_data_struct), BYTE_ALIGN_8);
321*15dc779aSAndroid Build Coastguard Worker 
322*15dc779aSAndroid Build Coastguard Worker     memset(sbr_persistent_mem->sbr_smooth_gain_buf[i], 0,
323*15dc779aSAndroid Build Coastguard Worker            temp_used - initial_used);
324*15dc779aSAndroid Build Coastguard Worker 
325*15dc779aSAndroid Build Coastguard Worker     used_persistent = temp_used;
326*15dc779aSAndroid Build Coastguard Worker   }
327*15dc779aSAndroid Build Coastguard Worker 
328*15dc779aSAndroid Build Coastguard Worker   if (ps_enable) {
329*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_ps_stereo_dec =
330*15dc779aSAndroid Build Coastguard Worker         (ia_ps_dec_struct *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
331*15dc779aSAndroid Build Coastguard Worker 
332*15dc779aSAndroid Build Coastguard Worker     memset(p_str_sbr_dec_inst->pstr_ps_stereo_dec, 0,
333*15dc779aSAndroid Build Coastguard Worker            IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_ps_dec_struct), BYTE_ALIGN_8));
334*15dc779aSAndroid Build Coastguard Worker 
335*15dc779aSAndroid Build Coastguard Worker     used_persistent += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_ps_dec_struct), BYTE_ALIGN_8);
336*15dc779aSAndroid Build Coastguard Worker   }
337*15dc779aSAndroid Build Coastguard Worker 
338*15dc779aSAndroid Build Coastguard Worker   p_str_sbr_dec_inst->frame_buffer[0] =
339*15dc779aSAndroid Build Coastguard Worker       (VOID *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
340*15dc779aSAndroid Build Coastguard Worker   memset(p_str_sbr_dec_inst->frame_buffer[0], 0,
341*15dc779aSAndroid Build Coastguard Worker          IXHEAAC_GET_SIZE_ALIGNED(
342*15dc779aSAndroid Build Coastguard Worker              sizeof(ia_sbr_frame_info_data_struct) + MAX_FREQ_COEFFS * sizeof(WORD32) * 2 + 8,
343*15dc779aSAndroid Build Coastguard Worker              BYTE_ALIGN_8));
344*15dc779aSAndroid Build Coastguard Worker   used_persistent =
345*15dc779aSAndroid Build Coastguard Worker       used_persistent + IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_sbr_frame_info_data_struct) +
346*15dc779aSAndroid Build Coastguard Worker                                                      MAX_FREQ_COEFFS * sizeof(WORD32) + 8,
347*15dc779aSAndroid Build Coastguard Worker                                                  BYTE_ALIGN_8);
348*15dc779aSAndroid Build Coastguard Worker 
349*15dc779aSAndroid Build Coastguard Worker   p_str_sbr_dec_inst->frame_buffer[1] =
350*15dc779aSAndroid Build Coastguard Worker       (VOID *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
351*15dc779aSAndroid Build Coastguard Worker   memset(p_str_sbr_dec_inst->frame_buffer[1], 0,
352*15dc779aSAndroid Build Coastguard Worker          IXHEAAC_GET_SIZE_ALIGNED(
353*15dc779aSAndroid Build Coastguard Worker              sizeof(ia_sbr_frame_info_data_struct) + MAX_FREQ_COEFFS * sizeof(WORD32) * 2 + 8,
354*15dc779aSAndroid Build Coastguard Worker              BYTE_ALIGN_8));
355*15dc779aSAndroid Build Coastguard Worker   used_persistent =
356*15dc779aSAndroid Build Coastguard Worker       used_persistent + IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_sbr_frame_info_data_struct) +
357*15dc779aSAndroid Build Coastguard Worker                                                      MAX_FREQ_COEFFS * sizeof(WORD32) + 8,
358*15dc779aSAndroid Build Coastguard Worker                                                  BYTE_ALIGN_8);
359*15dc779aSAndroid Build Coastguard Worker 
360*15dc779aSAndroid Build Coastguard Worker   {
361*15dc779aSAndroid Build Coastguard Worker     WORD32 index = 0;
362*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->ptr_pvc_data_str =
363*15dc779aSAndroid Build Coastguard Worker         (ia_pvc_data_struct *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
364*15dc779aSAndroid Build Coastguard Worker     memset(p_str_sbr_dec_inst->ptr_pvc_data_str, 0,
365*15dc779aSAndroid Build Coastguard Worker            IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_pvc_data_struct), BYTE_ALIGN_8));
366*15dc779aSAndroid Build Coastguard Worker     used_persistent += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_pvc_data_struct), BYTE_ALIGN_8);
367*15dc779aSAndroid Build Coastguard Worker 
368*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_hbe_txposer =
369*15dc779aSAndroid Build Coastguard Worker         (ia_esbr_hbe_txposer_struct *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
370*15dc779aSAndroid Build Coastguard Worker     memset(p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_hbe_txposer, 0,
371*15dc779aSAndroid Build Coastguard Worker            IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_esbr_hbe_txposer_struct), BYTE_ALIGN_8));
372*15dc779aSAndroid Build Coastguard Worker     used_persistent += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_esbr_hbe_txposer_struct), BYTE_ALIGN_8);
373*15dc779aSAndroid Build Coastguard Worker 
374*15dc779aSAndroid Build Coastguard Worker     if (num_channel == 2) {
375*15dc779aSAndroid Build Coastguard Worker       p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.p_hbe_txposer =
376*15dc779aSAndroid Build Coastguard Worker           (ia_esbr_hbe_txposer_struct *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
377*15dc779aSAndroid Build Coastguard Worker       memset(p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.p_hbe_txposer, 0,
378*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_esbr_hbe_txposer_struct), BYTE_ALIGN_8));
379*15dc779aSAndroid Build Coastguard Worker       used_persistent +=
380*15dc779aSAndroid Build Coastguard Worker           IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_esbr_hbe_txposer_struct), BYTE_ALIGN_8);
381*15dc779aSAndroid Build Coastguard Worker     }
382*15dc779aSAndroid Build Coastguard Worker 
383*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->hbe_txposer_buffers =
384*15dc779aSAndroid Build Coastguard Worker         (VOID *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
385*15dc779aSAndroid Build Coastguard Worker     memset(p_str_sbr_dec_inst->hbe_txposer_buffers, 0,
386*15dc779aSAndroid Build Coastguard Worker            num_channel * IXHEAAC_GET_SIZE_ALIGNED(MAX_HBE_PERSISTENT_SIZE, BYTE_ALIGN_8));
387*15dc779aSAndroid Build Coastguard Worker     used_persistent +=
388*15dc779aSAndroid Build Coastguard Worker         num_channel * IXHEAAC_GET_SIZE_ALIGNED(MAX_HBE_PERSISTENT_SIZE, BYTE_ALIGN_8);
389*15dc779aSAndroid Build Coastguard Worker 
390*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_real =
391*15dc779aSAndroid Build Coastguard Worker         (FLOAT32 **)((WORD8 *)sbr_persistent_mem_v + used_persistent);
392*15dc779aSAndroid Build Coastguard Worker     memset(
393*15dc779aSAndroid Build Coastguard Worker         p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_real, 0,
394*15dc779aSAndroid Build Coastguard Worker         IXHEAAC_GET_SIZE_ALIGNED(
395*15dc779aSAndroid Build Coastguard Worker             MAX_QMF_BUF_LEN *
396*15dc779aSAndroid Build Coastguard Worker                 sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_real[0]),
397*15dc779aSAndroid Build Coastguard Worker             BYTE_ALIGN_8));
398*15dc779aSAndroid Build Coastguard Worker     used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
399*15dc779aSAndroid Build Coastguard Worker         MAX_QMF_BUF_LEN *
400*15dc779aSAndroid Build Coastguard Worker             sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_real[0]),
401*15dc779aSAndroid Build Coastguard Worker         BYTE_ALIGN_8);
402*15dc779aSAndroid Build Coastguard Worker 
403*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_imag =
404*15dc779aSAndroid Build Coastguard Worker         (FLOAT32 **)((WORD8 *)sbr_persistent_mem_v + used_persistent);
405*15dc779aSAndroid Build Coastguard Worker     memset(
406*15dc779aSAndroid Build Coastguard Worker         p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_imag, 0,
407*15dc779aSAndroid Build Coastguard Worker         IXHEAAC_GET_SIZE_ALIGNED(
408*15dc779aSAndroid Build Coastguard Worker             MAX_QMF_BUF_LEN *
409*15dc779aSAndroid Build Coastguard Worker                 sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_imag[0]),
410*15dc779aSAndroid Build Coastguard Worker             BYTE_ALIGN_8));
411*15dc779aSAndroid Build Coastguard Worker     used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
412*15dc779aSAndroid Build Coastguard Worker         MAX_QMF_BUF_LEN *
413*15dc779aSAndroid Build Coastguard Worker             sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_imag[0]),
414*15dc779aSAndroid Build Coastguard Worker         BYTE_ALIGN_8);
415*15dc779aSAndroid Build Coastguard Worker 
416*15dc779aSAndroid Build Coastguard Worker     if (num_channel == 2) {
417*15dc779aSAndroid Build Coastguard Worker       p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_real =
418*15dc779aSAndroid Build Coastguard Worker           (FLOAT32 **)((WORD8 *)sbr_persistent_mem_v + used_persistent);
419*15dc779aSAndroid Build Coastguard Worker       memset(
420*15dc779aSAndroid Build Coastguard Worker           p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_real, 0,
421*15dc779aSAndroid Build Coastguard Worker           IXHEAAC_GET_SIZE_ALIGNED(
422*15dc779aSAndroid Build Coastguard Worker               MAX_QMF_BUF_LEN *
423*15dc779aSAndroid Build Coastguard Worker                   sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_real[0]),
424*15dc779aSAndroid Build Coastguard Worker               BYTE_ALIGN_8));
425*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
426*15dc779aSAndroid Build Coastguard Worker           MAX_QMF_BUF_LEN *
427*15dc779aSAndroid Build Coastguard Worker               sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_real[0]),
428*15dc779aSAndroid Build Coastguard Worker           BYTE_ALIGN_8);
429*15dc779aSAndroid Build Coastguard Worker 
430*15dc779aSAndroid Build Coastguard Worker       p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_imag =
431*15dc779aSAndroid Build Coastguard Worker           (FLOAT32 **)((WORD8 *)sbr_persistent_mem_v + used_persistent);
432*15dc779aSAndroid Build Coastguard Worker       memset(
433*15dc779aSAndroid Build Coastguard Worker           p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_imag, 0,
434*15dc779aSAndroid Build Coastguard Worker           IXHEAAC_GET_SIZE_ALIGNED(
435*15dc779aSAndroid Build Coastguard Worker               MAX_QMF_BUF_LEN *
436*15dc779aSAndroid Build Coastguard Worker                   sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_imag[0]),
437*15dc779aSAndroid Build Coastguard Worker               BYTE_ALIGN_8));
438*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
439*15dc779aSAndroid Build Coastguard Worker           MAX_QMF_BUF_LEN *
440*15dc779aSAndroid Build Coastguard Worker               sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.pp_qmf_buf_imag[0]),
441*15dc779aSAndroid Build Coastguard Worker           BYTE_ALIGN_8);
442*15dc779aSAndroid Build Coastguard Worker     }
443*15dc779aSAndroid Build Coastguard Worker 
444*15dc779aSAndroid Build Coastguard Worker     for (index = 0; index < MAX_QMF_BUF_LEN; index++) {
445*15dc779aSAndroid Build Coastguard Worker       p_str_sbr_dec_inst->pstr_sbr_channel[0]
446*15dc779aSAndroid Build Coastguard Worker           ->str_sbr_dec.pp_qmf_buf_real[index] =
447*15dc779aSAndroid Build Coastguard Worker           (FLOAT32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
448*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
449*15dc779aSAndroid Build Coastguard Worker           MAX_QMF_BUF_LEN *
450*15dc779aSAndroid Build Coastguard Worker               sizeof(
451*15dc779aSAndroid Build Coastguard Worker                   p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_real[index][0]),
452*15dc779aSAndroid Build Coastguard Worker           BYTE_ALIGN_8);
453*15dc779aSAndroid Build Coastguard Worker     }
454*15dc779aSAndroid Build Coastguard Worker 
455*15dc779aSAndroid Build Coastguard Worker     for (index = 0; index < MAX_QMF_BUF_LEN; index++) {
456*15dc779aSAndroid Build Coastguard Worker       p_str_sbr_dec_inst->pstr_sbr_channel[0]
457*15dc779aSAndroid Build Coastguard Worker           ->str_sbr_dec.pp_qmf_buf_imag[index] =
458*15dc779aSAndroid Build Coastguard Worker           (FLOAT32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
459*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
460*15dc779aSAndroid Build Coastguard Worker           MAX_QMF_BUF_LEN *
461*15dc779aSAndroid Build Coastguard Worker               sizeof(
462*15dc779aSAndroid Build Coastguard Worker                   p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.pp_qmf_buf_imag[index][0]),
463*15dc779aSAndroid Build Coastguard Worker           BYTE_ALIGN_8);
464*15dc779aSAndroid Build Coastguard Worker     }
465*15dc779aSAndroid Build Coastguard Worker 
466*15dc779aSAndroid Build Coastguard Worker     if (num_channel == 2) {
467*15dc779aSAndroid Build Coastguard Worker       for (index = 0; index < MAX_QMF_BUF_LEN; index++) {
468*15dc779aSAndroid Build Coastguard Worker         p_str_sbr_dec_inst->pstr_sbr_channel[1]
469*15dc779aSAndroid Build Coastguard Worker             ->str_sbr_dec.pp_qmf_buf_real[index] =
470*15dc779aSAndroid Build Coastguard Worker             (FLOAT32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
471*15dc779aSAndroid Build Coastguard Worker         used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
472*15dc779aSAndroid Build Coastguard Worker             MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]
473*15dc779aSAndroid Build Coastguard Worker                                          ->str_sbr_dec.pp_qmf_buf_real[index][0]),
474*15dc779aSAndroid Build Coastguard Worker             BYTE_ALIGN_8);
475*15dc779aSAndroid Build Coastguard Worker       }
476*15dc779aSAndroid Build Coastguard Worker 
477*15dc779aSAndroid Build Coastguard Worker       for (index = 0; index < MAX_QMF_BUF_LEN; index++) {
478*15dc779aSAndroid Build Coastguard Worker         p_str_sbr_dec_inst->pstr_sbr_channel[1]
479*15dc779aSAndroid Build Coastguard Worker             ->str_sbr_dec.pp_qmf_buf_imag[index] =
480*15dc779aSAndroid Build Coastguard Worker             (FLOAT32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
481*15dc779aSAndroid Build Coastguard Worker         used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
482*15dc779aSAndroid Build Coastguard Worker             MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]
483*15dc779aSAndroid Build Coastguard Worker                                          ->str_sbr_dec.pp_qmf_buf_imag[index][0]),
484*15dc779aSAndroid Build Coastguard Worker             BYTE_ALIGN_8);
485*15dc779aSAndroid Build Coastguard Worker       }
486*15dc779aSAndroid Build Coastguard Worker     }
487*15dc779aSAndroid Build Coastguard Worker 
488*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < MAX_ENV_COLS; i++) {
489*15dc779aSAndroid Build Coastguard Worker       p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_arr_qmf_buf_real[i] =
490*15dc779aSAndroid Build Coastguard Worker           (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
491*15dc779aSAndroid Build Coastguard Worker       memset(p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_arr_qmf_buf_real[i], 0,
492*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(
493*15dc779aSAndroid Build Coastguard Worker                  MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[0]
494*15dc779aSAndroid Build Coastguard Worker                                               ->str_sbr_dec.p_arr_qmf_buf_real[i][0]),
495*15dc779aSAndroid Build Coastguard Worker                  BYTE_ALIGN_8));
496*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
497*15dc779aSAndroid Build Coastguard Worker           MAX_QMF_BUF_LEN *
498*15dc779aSAndroid Build Coastguard Worker               sizeof(
499*15dc779aSAndroid Build Coastguard Worker                   p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_arr_qmf_buf_real[i][0]),
500*15dc779aSAndroid Build Coastguard Worker           BYTE_ALIGN_8);
501*15dc779aSAndroid Build Coastguard Worker 
502*15dc779aSAndroid Build Coastguard Worker       p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_arr_qmf_buf_imag[i] =
503*15dc779aSAndroid Build Coastguard Worker           (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
504*15dc779aSAndroid Build Coastguard Worker       memset(p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_arr_qmf_buf_imag[i], 0,
505*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(
506*15dc779aSAndroid Build Coastguard Worker                  MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[0]
507*15dc779aSAndroid Build Coastguard Worker                                               ->str_sbr_dec.p_arr_qmf_buf_imag[i][0]),
508*15dc779aSAndroid Build Coastguard Worker                  BYTE_ALIGN_8));
509*15dc779aSAndroid Build Coastguard Worker       used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
510*15dc779aSAndroid Build Coastguard Worker           MAX_QMF_BUF_LEN *
511*15dc779aSAndroid Build Coastguard Worker               sizeof(
512*15dc779aSAndroid Build Coastguard Worker                   p_str_sbr_dec_inst->pstr_sbr_channel[0]->str_sbr_dec.p_arr_qmf_buf_imag[i][0]),
513*15dc779aSAndroid Build Coastguard Worker           BYTE_ALIGN_8);
514*15dc779aSAndroid Build Coastguard Worker     }
515*15dc779aSAndroid Build Coastguard Worker 
516*15dc779aSAndroid Build Coastguard Worker     if (num_channel == 2) {
517*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < MAX_ENV_COLS; i++) {
518*15dc779aSAndroid Build Coastguard Worker         p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.p_arr_qmf_buf_real[i] =
519*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
520*15dc779aSAndroid Build Coastguard Worker         memset(p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.p_arr_qmf_buf_real[i], 0,
521*15dc779aSAndroid Build Coastguard Worker                IXHEAAC_GET_SIZE_ALIGNED(
522*15dc779aSAndroid Build Coastguard Worker                    MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]
523*15dc779aSAndroid Build Coastguard Worker                                                 ->str_sbr_dec.p_arr_qmf_buf_real[i][0]),
524*15dc779aSAndroid Build Coastguard Worker                    BYTE_ALIGN_8));
525*15dc779aSAndroid Build Coastguard Worker         used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
526*15dc779aSAndroid Build Coastguard Worker             MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]
527*15dc779aSAndroid Build Coastguard Worker                                          ->str_sbr_dec.p_arr_qmf_buf_real[i][0]),
528*15dc779aSAndroid Build Coastguard Worker             BYTE_ALIGN_8);
529*15dc779aSAndroid Build Coastguard Worker 
530*15dc779aSAndroid Build Coastguard Worker         p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.p_arr_qmf_buf_imag[i] =
531*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)((WORD8 *)sbr_persistent_mem_v + used_persistent);
532*15dc779aSAndroid Build Coastguard Worker         memset(p_str_sbr_dec_inst->pstr_sbr_channel[1]->str_sbr_dec.p_arr_qmf_buf_imag[i], 0,
533*15dc779aSAndroid Build Coastguard Worker                IXHEAAC_GET_SIZE_ALIGNED(
534*15dc779aSAndroid Build Coastguard Worker                    MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]
535*15dc779aSAndroid Build Coastguard Worker                                                 ->str_sbr_dec.p_arr_qmf_buf_imag[i][0]),
536*15dc779aSAndroid Build Coastguard Worker                    BYTE_ALIGN_8));
537*15dc779aSAndroid Build Coastguard Worker         used_persistent += IXHEAAC_GET_SIZE_ALIGNED(
538*15dc779aSAndroid Build Coastguard Worker             MAX_QMF_BUF_LEN * sizeof(p_str_sbr_dec_inst->pstr_sbr_channel[1]
539*15dc779aSAndroid Build Coastguard Worker                                          ->str_sbr_dec.p_arr_qmf_buf_imag[i][0]),
540*15dc779aSAndroid Build Coastguard Worker             BYTE_ALIGN_8);
541*15dc779aSAndroid Build Coastguard Worker       }
542*15dc779aSAndroid Build Coastguard Worker     }
543*15dc779aSAndroid Build Coastguard Worker   }
544*15dc779aSAndroid Build Coastguard Worker 
545*15dc779aSAndroid Build Coastguard Worker   *persistent_used = used_persistent;
546*15dc779aSAndroid Build Coastguard Worker }
547*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_init_headerdata(ia_sbr_header_data_struct * ptr_header_data,WORD32 sample_rate_dec,WORD32 samp_per_frame,ia_freq_band_data_struct * freq_band_data,ia_sbr_tables_struct * sbr_tables,WORD audio_obj_type)548*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE VOID ixheaacd_init_headerdata(
549*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_header_data, WORD32 sample_rate_dec,
550*15dc779aSAndroid Build Coastguard Worker     WORD32 samp_per_frame, ia_freq_band_data_struct *freq_band_data,
551*15dc779aSAndroid Build Coastguard Worker     ia_sbr_tables_struct *sbr_tables, WORD audio_obj_type) {
552*15dc779aSAndroid Build Coastguard Worker   ia_freq_band_data_struct *pstr_freq_band_data = freq_band_data;
553*15dc779aSAndroid Build Coastguard Worker   WORD32 tmp;
554*15dc779aSAndroid Build Coastguard Worker 
555*15dc779aSAndroid Build Coastguard Worker   if (audio_obj_type != AOT_ER_AAC_ELD) {
556*15dc779aSAndroid Build Coastguard Worker     memcpy(ptr_header_data,
557*15dc779aSAndroid Build Coastguard Worker            &sbr_tables->env_extr_tables_ptr->str_sbr_default_header,
558*15dc779aSAndroid Build Coastguard Worker            sizeof(ia_sbr_header_data_struct));
559*15dc779aSAndroid Build Coastguard Worker   }
560*15dc779aSAndroid Build Coastguard Worker 
561*15dc779aSAndroid Build Coastguard Worker   if (audio_obj_type == AOT_ER_AAC_ELD) ptr_header_data->time_step -= 1;
562*15dc779aSAndroid Build Coastguard Worker 
563*15dc779aSAndroid Build Coastguard Worker   pstr_freq_band_data->freq_band_table[LOW] =
564*15dc779aSAndroid Build Coastguard Worker       pstr_freq_band_data->freq_band_tbl_lo;
565*15dc779aSAndroid Build Coastguard Worker   pstr_freq_band_data->freq_band_table[HIGH] =
566*15dc779aSAndroid Build Coastguard Worker       pstr_freq_band_data->freq_band_tbl_hi;
567*15dc779aSAndroid Build Coastguard Worker   ptr_header_data->pstr_freq_band_data = pstr_freq_band_data;
568*15dc779aSAndroid Build Coastguard Worker 
569*15dc779aSAndroid Build Coastguard Worker   ptr_header_data->core_frame_size = samp_per_frame;
570*15dc779aSAndroid Build Coastguard Worker   ptr_header_data->out_sampling_freq = sample_rate_dec << 1;
571*15dc779aSAndroid Build Coastguard Worker 
572*15dc779aSAndroid Build Coastguard Worker   if (audio_obj_type != AOT_ER_AAC_ELD) {
573*15dc779aSAndroid Build Coastguard Worker     tmp = ptr_header_data->time_step + 4;
574*15dc779aSAndroid Build Coastguard Worker 
575*15dc779aSAndroid Build Coastguard Worker     if (tmp < 0)
576*15dc779aSAndroid Build Coastguard Worker       ptr_header_data->num_time_slots =
577*15dc779aSAndroid Build Coastguard Worker           ixheaac_extract16l(samp_per_frame << (-tmp));
578*15dc779aSAndroid Build Coastguard Worker     else
579*15dc779aSAndroid Build Coastguard Worker       ptr_header_data->num_time_slots =
580*15dc779aSAndroid Build Coastguard Worker           ixheaac_extract16l(samp_per_frame >> tmp);
581*15dc779aSAndroid Build Coastguard Worker   } else {
582*15dc779aSAndroid Build Coastguard Worker     ptr_header_data->time_step = 1;
583*15dc779aSAndroid Build Coastguard Worker 
584*15dc779aSAndroid Build Coastguard Worker     ptr_header_data->num_time_slots =
585*15dc779aSAndroid Build Coastguard Worker         (samp_per_frame / 32 >> (ptr_header_data->time_step - 1));
586*15dc779aSAndroid Build Coastguard Worker   }
587*15dc779aSAndroid Build Coastguard Worker }
588*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_setesbr_flags(VOID * sbr_persistent_mem_v,FLAG pvc_flag,FLAG hbe_flag,FLAG inter_tes_flag)589*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_setesbr_flags(VOID *sbr_persistent_mem_v, FLAG pvc_flag,
590*15dc779aSAndroid Build Coastguard Worker                             FLAG hbe_flag, FLAG inter_tes_flag) {
591*15dc779aSAndroid Build Coastguard Worker   ia_sbr_pers_struct *sbr_persistent_mem;
592*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem = (ia_sbr_pers_struct *)sbr_persistent_mem_v;
593*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->str_sbr_dec_inst.hbe_flag = hbe_flag;
594*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->str_sbr_dec_inst.pvc_flag = pvc_flag;
595*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem->str_sbr_dec_inst.inter_tes_flag = inter_tes_flag;
596*15dc779aSAndroid Build Coastguard Worker   return;
597*15dc779aSAndroid Build Coastguard Worker }
598*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_init_sbr(WORD32 sample_rate_dec,WORD32 samp_per_frame,FLAG * down_sample_flag,VOID * sbr_persistent_mem_v,WORD32 * ptr_overlap_buf,WORD32 channel,WORD32 ps_enable,WORD32 sbr_ratio_idx,WORD32 output_frame_size,WORD32 * use_hbe,VOID * p_usac_dflt_header,ia_sbr_header_data_struct str_sbr_config,WORD32 audio_object_type,WORD32 ldmps_present,WORD32 ldsbr_present)599*15dc779aSAndroid Build Coastguard Worker ia_handle_sbr_dec_inst_struct ixheaacd_init_sbr(
600*15dc779aSAndroid Build Coastguard Worker     WORD32 sample_rate_dec, WORD32 samp_per_frame, FLAG *down_sample_flag,
601*15dc779aSAndroid Build Coastguard Worker     VOID *sbr_persistent_mem_v, WORD32 *ptr_overlap_buf, WORD32 channel,
602*15dc779aSAndroid Build Coastguard Worker     WORD32 ps_enable, WORD32 sbr_ratio_idx, WORD32 output_frame_size,
603*15dc779aSAndroid Build Coastguard Worker     WORD32 *use_hbe, VOID *p_usac_dflt_header,
604*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct str_sbr_config, WORD32 audio_object_type,
605*15dc779aSAndroid Build Coastguard Worker     WORD32 ldmps_present, WORD32 ldsbr_present) {
606*15dc779aSAndroid Build Coastguard Worker   WORD16 i;
607*15dc779aSAndroid Build Coastguard Worker   WORD16 err;
608*15dc779aSAndroid Build Coastguard Worker   ia_sbr_header_data_struct *ptr_header_data[MAXNRSBRCHANNELS];
609*15dc779aSAndroid Build Coastguard Worker   ia_sbr_dec_struct *ptr_sbr_dec[2];
610*15dc779aSAndroid Build Coastguard Worker   ia_qmf_dec_tables_struct *qmf_dec_tables_ptr;
611*15dc779aSAndroid Build Coastguard Worker   ia_sbr_pers_struct *sbr_persistent_mem;
612*15dc779aSAndroid Build Coastguard Worker 
613*15dc779aSAndroid Build Coastguard Worker   sbr_persistent_mem = (ia_sbr_pers_struct *)sbr_persistent_mem_v;
614*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_dec[0] =
615*15dc779aSAndroid Build Coastguard Worker       &sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_channel[0]->str_sbr_dec;
616*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_dec[1] =
617*15dc779aSAndroid Build Coastguard Worker       &sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_channel[1]->str_sbr_dec;
618*15dc779aSAndroid Build Coastguard Worker 
619*15dc779aSAndroid Build Coastguard Worker   qmf_dec_tables_ptr =
620*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_tables->qmf_dec_tables_ptr;
621*15dc779aSAndroid Build Coastguard Worker 
622*15dc779aSAndroid Build Coastguard Worker   if (sample_rate_dec > 48000) {
623*15dc779aSAndroid Build Coastguard Worker     *down_sample_flag = 1;
624*15dc779aSAndroid Build Coastguard Worker   }
625*15dc779aSAndroid Build Coastguard Worker 
626*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < channel; i++) {
627*15dc779aSAndroid Build Coastguard Worker     if (audio_object_type == AOT_ER_AAC_ELD) {
628*15dc779aSAndroid Build Coastguard Worker       memcpy(sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_header[i],
629*15dc779aSAndroid Build Coastguard Worker              &str_sbr_config, sizeof(ia_sbr_header_data_struct));
630*15dc779aSAndroid Build Coastguard Worker     }
631*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[i] =
632*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_header[i];
633*15dc779aSAndroid Build Coastguard Worker 
634*15dc779aSAndroid Build Coastguard Worker     ixheaacd_init_headerdata(
635*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[i], sample_rate_dec, samp_per_frame,
636*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->str_sbr_dec_inst.pstr_freq_band_data[i],
637*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_tables,
638*15dc779aSAndroid Build Coastguard Worker         audio_object_type);
639*15dc779aSAndroid Build Coastguard Worker 
640*15dc779aSAndroid Build Coastguard Worker     err = ixheaacd_create_sbrdec(
641*15dc779aSAndroid Build Coastguard Worker 
642*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->str_sbr_dec_inst.pstr_common_tables,
643*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_channel[i],
644*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[i], i, *down_sample_flag, sbr_persistent_mem, ps_enable,
645*15dc779aSAndroid Build Coastguard Worker         audio_object_type, ldmps_present, ldsbr_present);
646*15dc779aSAndroid Build Coastguard Worker 
647*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[i]->status = 1;
648*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_dec[i]->band_count = 64;
649*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[i]->pstr_freq_band_data[0].qmf_sb_prev = 64;
650*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[i]->pstr_freq_band_data[1].qmf_sb_prev = 64;
651*15dc779aSAndroid Build Coastguard Worker 
652*15dc779aSAndroid Build Coastguard Worker     if (err) {
653*15dc779aSAndroid Build Coastguard Worker       return NULL;
654*15dc779aSAndroid Build Coastguard Worker     }
655*15dc779aSAndroid Build Coastguard Worker   }
656*15dc779aSAndroid Build Coastguard Worker 
657*15dc779aSAndroid Build Coastguard Worker   if (channel != 1) {
658*15dc779aSAndroid Build Coastguard Worker     if (ps_enable) {
659*15dc779aSAndroid Build Coastguard Worker       if (audio_object_type == AOT_ER_AAC_ELD)
660*15dc779aSAndroid Build Coastguard Worker         ixheaacd_create_psdec(
661*15dc779aSAndroid Build Coastguard Worker             sbr_persistent_mem->str_sbr_dec_inst.pstr_ps_stereo_dec,
662*15dc779aSAndroid Build Coastguard Worker             sbr_persistent_mem, &ptr_overlap_buf[512 * 4], samp_per_frame);
663*15dc779aSAndroid Build Coastguard Worker       else
664*15dc779aSAndroid Build Coastguard Worker         ixheaacd_create_psdec(
665*15dc779aSAndroid Build Coastguard Worker             sbr_persistent_mem->str_sbr_dec_inst.pstr_ps_stereo_dec,
666*15dc779aSAndroid Build Coastguard Worker             sbr_persistent_mem, ptr_overlap_buf, samp_per_frame);
667*15dc779aSAndroid Build Coastguard Worker     }
668*15dc779aSAndroid Build Coastguard Worker   }
669*15dc779aSAndroid Build Coastguard Worker 
670*15dc779aSAndroid Build Coastguard Worker   if ((use_hbe != NULL) && !((audio_object_type == AOT_ER_AAC_ELD) ||
671*15dc779aSAndroid Build Coastguard Worker      (audio_object_type == AOT_ER_AAC_LD))) {
672*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_sbr_dflt_header =
673*15dc779aSAndroid Build Coastguard Worker         &sbr_persistent_mem->str_sbr_dec_inst.str_sbr_dflt_header;
674*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_usac_dflt_header =
675*15dc779aSAndroid Build Coastguard Worker         (ia_sbr_header_data_struct *)p_usac_dflt_header;
676*15dc779aSAndroid Build Coastguard Worker     struct ia_sbr_dec_inst_struct *p_str_sbr_dec_inst =
677*15dc779aSAndroid Build Coastguard Worker         &sbr_persistent_mem->str_sbr_dec_inst;
678*15dc779aSAndroid Build Coastguard Worker     VOID *hbe_txposer_buffers = p_str_sbr_dec_inst->hbe_txposer_buffers;
679*15dc779aSAndroid Build Coastguard Worker 
680*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[0] = p_str_sbr_dec_inst->pstr_sbr_header[0];
681*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[1] = p_str_sbr_dec_inst->pstr_sbr_header[1];
682*15dc779aSAndroid Build Coastguard Worker 
683*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[0]->sbr_ratio_idx = sbr_ratio_idx;
684*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[0]->output_framesize = output_frame_size;
685*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[0]->pstr_freq_band_data->sub_band_start = 64;
686*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[0]->esbr_start_up = 1;
687*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[0]->esbr_start_up_pvc = 1;
688*15dc779aSAndroid Build Coastguard Worker 
689*15dc779aSAndroid Build Coastguard Worker     if (channel > 1) {
690*15dc779aSAndroid Build Coastguard Worker       ptr_header_data[1]->sbr_ratio_idx = sbr_ratio_idx;
691*15dc779aSAndroid Build Coastguard Worker       ptr_header_data[1]->output_framesize = output_frame_size;
692*15dc779aSAndroid Build Coastguard Worker       ptr_header_data[1]->pstr_freq_band_data->sub_band_start = 64;
693*15dc779aSAndroid Build Coastguard Worker       ptr_header_data[1]->esbr_start_up = 1;
694*15dc779aSAndroid Build Coastguard Worker       ptr_header_data[1]->esbr_start_up_pvc = 1;
695*15dc779aSAndroid Build Coastguard Worker     }
696*15dc779aSAndroid Build Coastguard Worker     if (hbe_txposer_buffers != NULL) {
697*15dc779aSAndroid Build Coastguard Worker       WORD32 persistant_used = 0;
698*15dc779aSAndroid Build Coastguard Worker       ixheaacd_esbr_hbe_data_init(ptr_sbr_dec[0]->p_hbe_txposer, samp_per_frame,
699*15dc779aSAndroid Build Coastguard Worker                                   sbr_ratio_idx == SBR_UPSAMPLE_IDX_4_1 ? 1 : 0,
700*15dc779aSAndroid Build Coastguard Worker                                   output_frame_size, hbe_txposer_buffers, &persistant_used);
701*15dc779aSAndroid Build Coastguard Worker 
702*15dc779aSAndroid Build Coastguard Worker       hbe_txposer_buffers = (WORD8 *)hbe_txposer_buffers +
703*15dc779aSAndroid Build Coastguard Worker                             IXHEAAC_GET_SIZE_ALIGNED(MAX_HBE_PERSISTENT_SIZE, BYTE_ALIGN_8);
704*15dc779aSAndroid Build Coastguard Worker 
705*15dc779aSAndroid Build Coastguard Worker       ixheaacd_esbr_hbe_data_init(ptr_sbr_dec[1]->p_hbe_txposer, samp_per_frame,
706*15dc779aSAndroid Build Coastguard Worker                                   sbr_ratio_idx == SBR_UPSAMPLE_IDX_4_1 ? 1 : 0,
707*15dc779aSAndroid Build Coastguard Worker                                   output_frame_size, hbe_txposer_buffers, &persistant_used);
708*15dc779aSAndroid Build Coastguard Worker     }
709*15dc779aSAndroid Build Coastguard Worker 
710*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->ptr_pvc_data_str->prev_first_bnd_idx = -1;
711*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->ptr_pvc_data_str->prev_pvc_rate = -1;
712*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->ptr_pvc_data_str->prev_sbr_mode = UNKNOWN_SBR;
713*15dc779aSAndroid Build Coastguard Worker 
714*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_sbr_channel[0]
715*15dc779aSAndroid Build Coastguard Worker         ->str_sbr_dec.str_codec_qmf_bank.num_time_slots =
716*15dc779aSAndroid Build Coastguard Worker         output_frame_size / 64;
717*15dc779aSAndroid Build Coastguard Worker     p_str_sbr_dec_inst->pstr_sbr_channel[1]
718*15dc779aSAndroid Build Coastguard Worker         ->str_sbr_dec.str_codec_qmf_bank.num_time_slots =
719*15dc779aSAndroid Build Coastguard Worker         output_frame_size / 64;
720*15dc779aSAndroid Build Coastguard Worker 
721*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[0]->core_frame_size = samp_per_frame;
722*15dc779aSAndroid Build Coastguard Worker     ptr_header_data[1]->core_frame_size = samp_per_frame;
723*15dc779aSAndroid Build Coastguard Worker 
724*15dc779aSAndroid Build Coastguard Worker     switch (sbr_ratio_idx) {
725*15dc779aSAndroid Build Coastguard Worker       case SBR_UPSAMPLE_IDX_0_0:
726*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.no_channels = 32;
727*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_cos_twiddle =
728*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l32;
729*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
730*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l32;
731*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_t_cos =
732*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l32;
733*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->is_usf_4 = 0;
734*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->upsamp_fac = 1;
735*15dc779aSAndroid Build Coastguard Worker 
736*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.no_channels = 32;
737*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_cos_twiddle =
738*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l32;
739*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
740*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l32;
741*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_t_cos =
742*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l32;
743*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->is_usf_4 = 0;
744*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->upsamp_fac = 1;
745*15dc779aSAndroid Build Coastguard Worker         break;
746*15dc779aSAndroid Build Coastguard Worker       case SBR_UPSAMPLE_IDX_2_1:
747*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.no_channels = 32;
748*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_cos_twiddle =
749*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l32;
750*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
751*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l32;
752*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_t_cos =
753*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l32;
754*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->is_usf_4 = 0;
755*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->upsamp_fac = 2;
756*15dc779aSAndroid Build Coastguard Worker 
757*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.no_channels = 32;
758*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_cos_twiddle =
759*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l32;
760*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
761*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l32;
762*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_t_cos =
763*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l32;
764*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->is_usf_4 = 0;
765*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->upsamp_fac = 2;
766*15dc779aSAndroid Build Coastguard Worker         break;
767*15dc779aSAndroid Build Coastguard Worker       case SBR_UPSAMPLE_IDX_8_3:
768*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.no_channels = 24;
769*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.filter_pos_32 =
770*15dc779aSAndroid Build Coastguard Worker             qmf_dec_tables_ptr->esbr_qmf_c_24;
771*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.analy_win_coeff_32 =
772*15dc779aSAndroid Build Coastguard Worker             qmf_dec_tables_ptr->esbr_qmf_c_24;
773*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_cos_twiddle =
774*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l24;
775*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
776*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l24;
777*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_t_cos =
778*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l24;
779*15dc779aSAndroid Build Coastguard Worker 
780*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->is_usf_4 = 0;
781*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->upsamp_fac = 2;
782*15dc779aSAndroid Build Coastguard Worker 
783*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.no_channels = 24;
784*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.filter_pos_32 =
785*15dc779aSAndroid Build Coastguard Worker             qmf_dec_tables_ptr->esbr_qmf_c_24;
786*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.analy_win_coeff_32 =
787*15dc779aSAndroid Build Coastguard Worker             qmf_dec_tables_ptr->esbr_qmf_c_24;
788*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_cos_twiddle =
789*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l24;
790*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
791*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l24;
792*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_t_cos =
793*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l24;
794*15dc779aSAndroid Build Coastguard Worker 
795*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->is_usf_4 = 0;
796*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->upsamp_fac = 2;
797*15dc779aSAndroid Build Coastguard Worker         break;
798*15dc779aSAndroid Build Coastguard Worker       case SBR_UPSAMPLE_IDX_4_1:
799*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.no_channels = 16;
800*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_cos_twiddle =
801*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l16;
802*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
803*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l16;
804*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[0]->str_codec_qmf_bank.esbr_t_cos =
805*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l16;
806*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->is_usf_4 = 1;
807*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->upsamp_fac = 4;
808*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[0]->out_sampling_freq =
809*15dc779aSAndroid Build Coastguard Worker             ptr_header_data[0]->out_sampling_freq * 2;
810*15dc779aSAndroid Build Coastguard Worker 
811*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.no_channels = 16;
812*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_cos_twiddle =
813*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l16;
814*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_alt_sin_twiddle =
815*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l16;
816*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dec[1]->str_codec_qmf_bank.esbr_t_cos =
817*15dc779aSAndroid Build Coastguard Worker             (WORD32 *)qmf_dec_tables_ptr->esbr_t_cos_sin_l16;
818*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->is_usf_4 = 1;
819*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->upsamp_fac = 4;
820*15dc779aSAndroid Build Coastguard Worker         ptr_header_data[1]->out_sampling_freq =
821*15dc779aSAndroid Build Coastguard Worker             ptr_header_data[1]->out_sampling_freq * 2;
822*15dc779aSAndroid Build Coastguard Worker         break;
823*15dc779aSAndroid Build Coastguard Worker     }
824*15dc779aSAndroid Build Coastguard Worker 
825*15dc779aSAndroid Build Coastguard Worker     if (ptr_usac_dflt_header != NULL) {
826*15dc779aSAndroid Build Coastguard Worker       ptr_sbr_dflt_header->start_freq = ptr_usac_dflt_header->start_freq;
827*15dc779aSAndroid Build Coastguard Worker       ptr_sbr_dflt_header->stop_freq = ptr_usac_dflt_header->stop_freq;
828*15dc779aSAndroid Build Coastguard Worker 
829*15dc779aSAndroid Build Coastguard Worker       if (ptr_usac_dflt_header->header_extra_1) {
830*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->freq_scale = ptr_usac_dflt_header->freq_scale;
831*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->alter_scale = ptr_usac_dflt_header->alter_scale;
832*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->noise_bands = ptr_usac_dflt_header->noise_bands;
833*15dc779aSAndroid Build Coastguard Worker       } else {
834*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->freq_scale = SBR_FREQ_SCALE_DEFAULT;
835*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->alter_scale = SBR_ALTER_SCALE_DEFAULT;
836*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->noise_bands = SBR_NOISE_BANDS_DEFAULT;
837*15dc779aSAndroid Build Coastguard Worker       }
838*15dc779aSAndroid Build Coastguard Worker 
839*15dc779aSAndroid Build Coastguard Worker       if (ptr_usac_dflt_header->header_extra_2) {
840*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->limiter_bands = ptr_usac_dflt_header->limiter_bands;
841*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->limiter_gains = ptr_usac_dflt_header->limiter_gains;
842*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->interpol_freq = ptr_usac_dflt_header->interpol_freq;
843*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->smoothing_mode =
844*15dc779aSAndroid Build Coastguard Worker             ptr_usac_dflt_header->smoothing_mode;
845*15dc779aSAndroid Build Coastguard Worker       } else {
846*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->limiter_bands = SBR_LIMITER_BANDS_DEFAULT;
847*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->limiter_gains = SBR_LIMITER_GAINS_DEFAULT;
848*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->interpol_freq = SBR_INTERPOL_FREQ_DEFAULT;
849*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_dflt_header->smoothing_mode = SBR_SMOOTHING_LENGTH_DEFAULT;
850*15dc779aSAndroid Build Coastguard Worker       }
851*15dc779aSAndroid Build Coastguard Worker     }
852*15dc779aSAndroid Build Coastguard Worker   }
853*15dc779aSAndroid Build Coastguard Worker   return &(sbr_persistent_mem->str_sbr_dec_inst);
854*15dc779aSAndroid Build Coastguard Worker }
855*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_create_sbr_env_calc(ixheaacd_misc_tables * pstr_common_table,ia_sbr_calc_env_struct * hs,WORD16 chan,VOID * sbr_persistent_mem_v,ia_sbr_header_data_struct * ptr_header_data,WORD audio_object_type)856*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD16 ixheaacd_create_sbr_env_calc(
857*15dc779aSAndroid Build Coastguard Worker 
858*15dc779aSAndroid Build Coastguard Worker     ixheaacd_misc_tables *pstr_common_table, ia_sbr_calc_env_struct *hs,
859*15dc779aSAndroid Build Coastguard Worker     WORD16 chan, VOID *sbr_persistent_mem_v,
860*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_header_data, WORD audio_object_type) {
861*15dc779aSAndroid Build Coastguard Worker   WORD16 err;
862*15dc779aSAndroid Build Coastguard Worker   ia_sbr_pers_struct *sbr_persistent_mem =
863*15dc779aSAndroid Build Coastguard Worker       (ia_sbr_pers_struct *)sbr_persistent_mem_v;
864*15dc779aSAndroid Build Coastguard Worker 
865*15dc779aSAndroid Build Coastguard Worker   err = 0;
866*15dc779aSAndroid Build Coastguard Worker   memset(&hs->harm_flags_prev[0], 0, sizeof(WORD8) * MAX_FREQ_COEFFS);
867*15dc779aSAndroid Build Coastguard Worker 
868*15dc779aSAndroid Build Coastguard Worker   hs->harm_index = 0;
869*15dc779aSAndroid Build Coastguard Worker 
870*15dc779aSAndroid Build Coastguard Worker   hs->filt_buf_me = sbr_persistent_mem->sbr_smooth_gain_buf[chan];
871*15dc779aSAndroid Build Coastguard Worker   hs->filt_buf_noise_m = sbr_persistent_mem->sbr_smooth_noise_buf[chan];
872*15dc779aSAndroid Build Coastguard Worker   hs->tansient_env_prev = -1;
873*15dc779aSAndroid Build Coastguard Worker 
874*15dc779aSAndroid Build Coastguard Worker   ixheaacd_reset_sbrenvelope_calc(hs);
875*15dc779aSAndroid Build Coastguard Worker 
876*15dc779aSAndroid Build Coastguard Worker   if ((chan == 0) && (audio_object_type == AOT_ER_AAC_ELD)) {
877*15dc779aSAndroid Build Coastguard Worker     err = ixheaacd_calc_frq_bnd_tbls(ptr_header_data, pstr_common_table);
878*15dc779aSAndroid Build Coastguard Worker   }
879*15dc779aSAndroid Build Coastguard Worker 
880*15dc779aSAndroid Build Coastguard Worker   return err;
881*15dc779aSAndroid Build Coastguard Worker }
882*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_init_sbr_prev_framedata(ia_sbr_prev_frame_data_struct * ptr_prev_data,WORD16 time_slots)883*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE VOID ixheaacd_init_sbr_prev_framedata(
884*15dc779aSAndroid Build Coastguard Worker     ia_sbr_prev_frame_data_struct *ptr_prev_data, WORD16 time_slots) {
885*15dc779aSAndroid Build Coastguard Worker   WORD16 *psfb_nrg_prev = ptr_prev_data->sfb_nrg_prev;
886*15dc779aSAndroid Build Coastguard Worker   WORD16 *psfb_noise_level = ptr_prev_data->prev_noise_level;
887*15dc779aSAndroid Build Coastguard Worker   WORD32 *ppsbr_invf_mode = ptr_prev_data->sbr_invf_mode;
888*15dc779aSAndroid Build Coastguard Worker 
889*15dc779aSAndroid Build Coastguard Worker   memset(psfb_nrg_prev, 0, sizeof(WORD16) * (MAX_FREQ_COEFFS));
890*15dc779aSAndroid Build Coastguard Worker   memset(psfb_noise_level, 0, sizeof(WORD16) * (MAX_NOISE_COEFFS));
891*15dc779aSAndroid Build Coastguard Worker 
892*15dc779aSAndroid Build Coastguard Worker   memset(ppsbr_invf_mode, 0, sizeof(WORD32) * MAX_INVF_BANDS);
893*15dc779aSAndroid Build Coastguard Worker 
894*15dc779aSAndroid Build Coastguard Worker   ptr_prev_data->end_position = time_slots;
895*15dc779aSAndroid Build Coastguard Worker   ptr_prev_data->coupling_mode = COUPLING_OFF;
896*15dc779aSAndroid Build Coastguard Worker   ptr_prev_data->amp_res = 0;
897*15dc779aSAndroid Build Coastguard Worker   ptr_prev_data->max_qmf_subband_aac = 0;
898*15dc779aSAndroid Build Coastguard Worker }
899*15dc779aSAndroid Build Coastguard Worker 
900*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE VOID
ixheaacd_create_hyb_filterbank(ia_hybrid_struct * ptr_hybrid,WORD32 ** p_ptr,ia_sbr_tables_struct * sbr_tables_ptr)901*15dc779aSAndroid Build Coastguard Worker ixheaacd_create_hyb_filterbank(ia_hybrid_struct *ptr_hybrid, WORD32 **p_ptr,
902*15dc779aSAndroid Build Coastguard Worker                                ia_sbr_tables_struct *sbr_tables_ptr) {
903*15dc779aSAndroid Build Coastguard Worker   WORD16 i;
904*15dc779aSAndroid Build Coastguard Worker   WORD32 *ptr = (WORD32 *)*p_ptr;
905*15dc779aSAndroid Build Coastguard Worker 
906*15dc779aSAndroid Build Coastguard Worker   ptr_hybrid->ptr_resol = sbr_tables_ptr->ps_tables_ptr->hyb_resol;
907*15dc779aSAndroid Build Coastguard Worker   ptr_hybrid->ptr_qmf_buf = HYBRID_FILTER_LENGTH - 1;
908*15dc779aSAndroid Build Coastguard Worker 
909*15dc779aSAndroid Build Coastguard Worker   ptr_hybrid->ptr_temp_re = ptr;
910*15dc779aSAndroid Build Coastguard Worker   ptr += NO_HYBRID_CHANNELS_HIGH;
911*15dc779aSAndroid Build Coastguard Worker   ptr_hybrid->ptr_temp_im = ptr;
912*15dc779aSAndroid Build Coastguard Worker   ptr += NO_HYBRID_CHANNELS_HIGH;
913*15dc779aSAndroid Build Coastguard Worker 
914*15dc779aSAndroid Build Coastguard Worker   memset(ptr_hybrid->ptr_temp_re, 0,
915*15dc779aSAndroid Build Coastguard Worker          2 * NO_HYBRID_CHANNELS_HIGH * sizeof(WORD32));
916*15dc779aSAndroid Build Coastguard Worker 
917*15dc779aSAndroid Build Coastguard Worker   ptr_hybrid->ptr_work_re = ptr;
918*15dc779aSAndroid Build Coastguard Worker   ptr += 16;
919*15dc779aSAndroid Build Coastguard Worker   ptr_hybrid->ptr_work_im = ptr;
920*15dc779aSAndroid Build Coastguard Worker   ptr += 16;
921*15dc779aSAndroid Build Coastguard Worker 
922*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < NO_QMF_CHANNELS_IN_HYBRID; i++) {
923*15dc779aSAndroid Build Coastguard Worker     ptr_hybrid->ptr_qmf_buf_re[i] = ptr;
924*15dc779aSAndroid Build Coastguard Worker     ptr += ptr_hybrid->ptr_qmf_buf;
925*15dc779aSAndroid Build Coastguard Worker 
926*15dc779aSAndroid Build Coastguard Worker     ptr_hybrid->ptr_qmf_buf_im[i] = ptr;
927*15dc779aSAndroid Build Coastguard Worker     ptr += ptr_hybrid->ptr_qmf_buf;
928*15dc779aSAndroid Build Coastguard Worker 
929*15dc779aSAndroid Build Coastguard Worker     memset(ptr_hybrid->ptr_qmf_buf_re[i], 0,
930*15dc779aSAndroid Build Coastguard Worker            2 * ptr_hybrid->ptr_qmf_buf * sizeof(WORD32));
931*15dc779aSAndroid Build Coastguard Worker   }
932*15dc779aSAndroid Build Coastguard Worker 
933*15dc779aSAndroid Build Coastguard Worker   *p_ptr = ptr;
934*15dc779aSAndroid Build Coastguard Worker 
935*15dc779aSAndroid Build Coastguard Worker   return;
936*15dc779aSAndroid Build Coastguard Worker }
937*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_create_hf_generator(ia_sbr_hf_generator_struct * ptr_hf_gen_str,WORD16 num_columns,WORD16 chan,VOID * sbr_persistent_mem_v,WORD32 ps_enable)938*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE VOID ixheaacd_create_hf_generator(
939*15dc779aSAndroid Build Coastguard Worker     ia_sbr_hf_generator_struct *ptr_hf_gen_str, WORD16 num_columns, WORD16 chan,
940*15dc779aSAndroid Build Coastguard Worker     VOID *sbr_persistent_mem_v, WORD32 ps_enable) {
941*15dc779aSAndroid Build Coastguard Worker   WORD16 i;
942*15dc779aSAndroid Build Coastguard Worker   ia_sbr_pers_struct *sbr_persistent_mem =
943*15dc779aSAndroid Build Coastguard Worker       (ia_sbr_pers_struct *)sbr_persistent_mem_v;
944*15dc779aSAndroid Build Coastguard Worker 
945*15dc779aSAndroid Build Coastguard Worker   ptr_hf_gen_str->pstr_settings = &sbr_persistent_mem->str_sbr_tran_settings;
946*15dc779aSAndroid Build Coastguard Worker 
947*15dc779aSAndroid Build Coastguard Worker   ptr_hf_gen_str->lpc_filt_states_real[0] =
948*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->sbr_lpc_filter_states_real[chan][0];
949*15dc779aSAndroid Build Coastguard Worker   ptr_hf_gen_str->lpc_filt_states_real[1] =
950*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->sbr_lpc_filter_states_real[chan][1];
951*15dc779aSAndroid Build Coastguard Worker 
952*15dc779aSAndroid Build Coastguard Worker   if (ps_enable) {
953*15dc779aSAndroid Build Coastguard Worker     ptr_hf_gen_str->lpc_filt_states_imag[0] =
954*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->sbr_lpc_filter_states_imag[chan][0];
955*15dc779aSAndroid Build Coastguard Worker     ptr_hf_gen_str->lpc_filt_states_imag[1] =
956*15dc779aSAndroid Build Coastguard Worker         sbr_persistent_mem->sbr_lpc_filter_states_imag[chan][1];
957*15dc779aSAndroid Build Coastguard Worker   }
958*15dc779aSAndroid Build Coastguard Worker 
959*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < LPC_ORDER; i++) {
960*15dc779aSAndroid Build Coastguard Worker     if (ptr_hf_gen_str->lpc_filt_states_real[i] != NULL) {
961*15dc779aSAndroid Build Coastguard Worker       memset(ptr_hf_gen_str->lpc_filt_states_real[i], 0,
962*15dc779aSAndroid Build Coastguard Worker              NO_ANALYSIS_CHANNELS * sizeof(WORD32));
963*15dc779aSAndroid Build Coastguard Worker     }
964*15dc779aSAndroid Build Coastguard Worker 
965*15dc779aSAndroid Build Coastguard Worker     if (ps_enable)
966*15dc779aSAndroid Build Coastguard Worker       memset(ptr_hf_gen_str->lpc_filt_states_imag[i], 0,
967*15dc779aSAndroid Build Coastguard Worker              NO_ANALYSIS_CHANNELS * sizeof(WORD32));
968*15dc779aSAndroid Build Coastguard Worker   }
969*15dc779aSAndroid Build Coastguard Worker 
970*15dc779aSAndroid Build Coastguard Worker   if (chan == 0) {
971*15dc779aSAndroid Build Coastguard Worker     ptr_hf_gen_str->pstr_settings->num_columns = num_columns;
972*15dc779aSAndroid Build Coastguard Worker   }
973*15dc779aSAndroid Build Coastguard Worker   return;
974*15dc779aSAndroid Build Coastguard Worker }
975*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_create_psdec(ia_ps_dec_struct * ptr_ps_dec,VOID * sbr_persistent_mem_v,WORD32 * ptr_overlap_buf,WORD32 frame_size)976*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_create_psdec(ia_ps_dec_struct *ptr_ps_dec,
977*15dc779aSAndroid Build Coastguard Worker                            VOID *sbr_persistent_mem_v,
978*15dc779aSAndroid Build Coastguard Worker                            WORD32 *ptr_overlap_buf, WORD32 frame_size) {
979*15dc779aSAndroid Build Coastguard Worker   ia_sbr_pers_struct *sbr_persistent_mem =
980*15dc779aSAndroid Build Coastguard Worker       (ia_sbr_pers_struct *)sbr_persistent_mem_v;
981*15dc779aSAndroid Build Coastguard Worker 
982*15dc779aSAndroid Build Coastguard Worker   WORD16 *ptr1 = (WORD16 *)&(
983*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->ptr_sbr_overlap_buf[MAXNRSBRCHANNELS - 1][0]);
984*15dc779aSAndroid Build Coastguard Worker   WORD32 *ptr2 = (WORD32 *)&ptr_overlap_buf[512];
985*15dc779aSAndroid Build Coastguard Worker   WORD16 *initial_ptr;
986*15dc779aSAndroid Build Coastguard Worker   WORD16 delay;
987*15dc779aSAndroid Build Coastguard Worker   WORD32 temp;
988*15dc779aSAndroid Build Coastguard Worker 
989*15dc779aSAndroid Build Coastguard Worker   ia_sbr_tables_struct *sbr_tables_ptr =
990*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_tables;
991*15dc779aSAndroid Build Coastguard Worker 
992*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec, 0, sizeof(ia_ps_dec_struct));
993*15dc779aSAndroid Build Coastguard Worker 
994*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->ps_data_present = 0;
995*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->enable_iid = 0;
996*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->enable_icc = 0;
997*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->enable_ext = 0;
998*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->iid_mode = 0;
999*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->icc_mode = 0;
1000*15dc779aSAndroid Build Coastguard Worker 
1001*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->ptr_hyb_left_re = ptr2;
1002*15dc779aSAndroid Build Coastguard Worker   ptr2 += 16;
1003*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->ptr_hyb_left_im = ptr2;
1004*15dc779aSAndroid Build Coastguard Worker   ptr2 += 16;
1005*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->ptr_hyb_right_re = ptr2;
1006*15dc779aSAndroid Build Coastguard Worker   ptr2 += 16;
1007*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->ptr_hyb_right_im = ptr2;
1008*15dc779aSAndroid Build Coastguard Worker   ptr2 += 16;
1009*15dc779aSAndroid Build Coastguard Worker 
1010*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->ptr_hyb_left_re, 0, sizeof(WORD32) * 16 * 4);
1011*15dc779aSAndroid Build Coastguard Worker 
1012*15dc779aSAndroid Build Coastguard Worker   ixheaacd_create_hyb_filterbank(&ptr_ps_dec->str_hybrid, &ptr2,
1013*15dc779aSAndroid Build Coastguard Worker                                  sbr_tables_ptr);
1014*15dc779aSAndroid Build Coastguard Worker 
1015*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->peak_decay_diff = ptr2;
1016*15dc779aSAndroid Build Coastguard Worker   ptr2 += NUM_OF_BINS;
1017*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->energy_prev = ptr2;
1018*15dc779aSAndroid Build Coastguard Worker   ptr2 += NUM_OF_BINS;
1019*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->peak_decay_diff_prev = ptr2;
1020*15dc779aSAndroid Build Coastguard Worker   ptr2 += NUM_OF_BINS;
1021*15dc779aSAndroid Build Coastguard Worker 
1022*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->peak_decay_diff, 0, 3 * sizeof(WORD32) * NUM_OF_BINS);
1023*15dc779aSAndroid Build Coastguard Worker 
1024*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->delay_buf_idx = 0;
1025*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->delay_buf_idx_long = 0;
1026*15dc779aSAndroid Build Coastguard Worker 
1027*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->delay_buf_qmf_sub_re_im, 0,
1028*15dc779aSAndroid Build Coastguard Worker          2 * 16 * DEL_ALL_PASS * sizeof(WORD16));
1029*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->delay_buf_qmf_sub_ser_re_im, 0,
1030*15dc779aSAndroid Build Coastguard Worker          2 * 16 * NUM_SER_AP_LINKS * 5 * sizeof(WORD16));
1031*15dc779aSAndroid Build Coastguard Worker 
1032*15dc779aSAndroid Build Coastguard Worker   initial_ptr = ptr1;
1033*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->delay_buf_qmf_ser_re_im = (VOID *)ptr1;
1034*15dc779aSAndroid Build Coastguard Worker   ptr1 += 2 * NUM_SER_AP_LINKS * 32 * 5;
1035*15dc779aSAndroid Build Coastguard Worker 
1036*15dc779aSAndroid Build Coastguard Worker   delay = 2;
1037*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->delay_buf_qmf_ap_re_im = (VOID *)ptr1;
1038*15dc779aSAndroid Build Coastguard Worker   ptr1 += 2 * delay * 32;
1039*15dc779aSAndroid Build Coastguard Worker 
1040*15dc779aSAndroid Build Coastguard Worker   delay = HIGH_DEL;
1041*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->delay_buf_qmf_ld_re_im = (VOID *)ptr1;
1042*15dc779aSAndroid Build Coastguard Worker   ptr1 += 2 * delay * SMALL_DEL_STRT;
1043*15dc779aSAndroid Build Coastguard Worker 
1044*15dc779aSAndroid Build Coastguard Worker   delay = SMALL_DEL;
1045*15dc779aSAndroid Build Coastguard Worker   ptr_ps_dec->delay_buf_qmf_sd_re_im = (VOID *)ptr1;
1046*15dc779aSAndroid Build Coastguard Worker   ptr1 +=
1047*15dc779aSAndroid Build Coastguard Worker       2 * delay * (NUM_OF_QUAD_MIRROR_FILTER_ICC_CHNLS -
1048*15dc779aSAndroid Build Coastguard Worker                    (NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS + SMALL_DEL_STRT));
1049*15dc779aSAndroid Build Coastguard Worker 
1050*15dc779aSAndroid Build Coastguard Worker   temp = (WORD32)(ptr1 - initial_ptr);
1051*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->delay_buf_qmf_ser_re_im, 0, temp * sizeof(WORD16));
1052*15dc779aSAndroid Build Coastguard Worker 
1053*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->delay_buf_idx_ser, 0, NUM_SER_AP_LINKS * sizeof(WORD16));
1054*15dc779aSAndroid Build Coastguard Worker   memcpy(ptr_ps_dec->delay_sample_ser,
1055*15dc779aSAndroid Build Coastguard Worker          sbr_tables_ptr->ps_tables_ptr->rev_link_delay_ser,
1056*15dc779aSAndroid Build Coastguard Worker          NUM_SER_AP_LINKS * sizeof(WORD16));
1057*15dc779aSAndroid Build Coastguard Worker 
1058*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->h11_h12_vec, 0xff,
1059*15dc779aSAndroid Build Coastguard Worker          (NO_IID_GROUPS + 2) * 2 * sizeof(WORD16));
1060*15dc779aSAndroid Build Coastguard Worker   memset(ptr_ps_dec->h21_h22_vec, 0, sizeof(ptr_ps_dec->h21_h22_vec));
1061*15dc779aSAndroid Build Coastguard Worker 
1062*15dc779aSAndroid Build Coastguard Worker   if (frame_size == 960)
1063*15dc779aSAndroid Build Coastguard Worker     ptr_ps_dec->num_sub_samples = NUM_SUB_SAMPLES_960;
1064*15dc779aSAndroid Build Coastguard Worker   else
1065*15dc779aSAndroid Build Coastguard Worker     ptr_ps_dec->num_sub_samples = NUM_SUB_SAMPLES;
1066*15dc779aSAndroid Build Coastguard Worker 
1067*15dc779aSAndroid Build Coastguard Worker 
1068*15dc779aSAndroid Build Coastguard Worker   ixheaacd_create_ps_esbr_dec(ptr_ps_dec, sbr_tables_ptr->ps_tables_ptr,
1069*15dc779aSAndroid Build Coastguard Worker                               64, ptr_ps_dec->num_sub_samples, 0);
1070*15dc779aSAndroid Build Coastguard Worker 
1071*15dc779aSAndroid Build Coastguard Worker   return;
1072*15dc779aSAndroid Build Coastguard Worker }
1073*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_create_cplx_anal_qmfbank(ia_sbr_qmf_filter_bank_struct * ptr_sbr_qmf,ia_sbr_scale_fact_struct * sbr_scale_factor,WORD16 no_bins,WORD16 usb,WORD16 chan,WORD16 * sbr_qmf_analy_states,WORD32 * sbr_qmf_analy_states_32,ia_qmf_dec_tables_struct * qmf_dec_tables_ptr,WORD32 audio_object_type,WORD32 ldmps_present,WORD32 no_ldsbr)1074*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE VOID ixheaacd_create_cplx_anal_qmfbank(
1075*15dc779aSAndroid Build Coastguard Worker     ia_sbr_qmf_filter_bank_struct *ptr_sbr_qmf,
1076*15dc779aSAndroid Build Coastguard Worker     ia_sbr_scale_fact_struct *sbr_scale_factor, WORD16 no_bins, WORD16 usb,
1077*15dc779aSAndroid Build Coastguard Worker     WORD16 chan, WORD16 *sbr_qmf_analy_states, WORD32 *sbr_qmf_analy_states_32,
1078*15dc779aSAndroid Build Coastguard Worker     ia_qmf_dec_tables_struct *qmf_dec_tables_ptr, WORD32 audio_object_type,
1079*15dc779aSAndroid Build Coastguard Worker     WORD32 ldmps_present, WORD32 no_ldsbr) {
1080*15dc779aSAndroid Build Coastguard Worker   memset(ptr_sbr_qmf, 0, sizeof(ia_sbr_qmf_filter_bank_struct));
1081*15dc779aSAndroid Build Coastguard Worker 
1082*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->analy_win_coeff_32 = qmf_dec_tables_ptr->esbr_qmf_c;
1083*15dc779aSAndroid Build Coastguard Worker   if (audio_object_type != AOT_ER_AAC_ELD &&
1084*15dc779aSAndroid Build Coastguard Worker       audio_object_type != AOT_ER_AAC_LD) {
1085*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->analy_win_coeff = qmf_dec_tables_ptr->qmf_c;
1086*15dc779aSAndroid Build Coastguard Worker   } else {
1087*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->analy_win_coeff = qmf_dec_tables_ptr->qmf_c_eld3;
1088*15dc779aSAndroid Build Coastguard Worker     if (ldmps_present == 1)
1089*15dc779aSAndroid Build Coastguard Worker       ptr_sbr_qmf->analy_win_coeff_32 = qmf_dec_tables_ptr->qmf_c_ldsbr_mps;
1090*15dc779aSAndroid Build Coastguard Worker     if (no_ldsbr == 1)
1091*15dc779aSAndroid Build Coastguard Worker       ptr_sbr_qmf->analy_win_coeff_32 =
1092*15dc779aSAndroid Build Coastguard Worker           (WORD32 *)ixheaacd_ldmps_polyphase_filter_coeff_fix;
1093*15dc779aSAndroid Build Coastguard Worker   }
1094*15dc779aSAndroid Build Coastguard Worker 
1095*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->no_channels = NO_ANALYSIS_CHANNELS;
1096*15dc779aSAndroid Build Coastguard Worker   if (no_ldsbr) ptr_sbr_qmf->no_channels = 64;
1097*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->num_time_slots = no_bins;
1098*15dc779aSAndroid Build Coastguard Worker 
1099*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->lsb = 0;
1100*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->usb = usb;
1101*15dc779aSAndroid Build Coastguard Worker 
1102*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->anal_filter_states =
1103*15dc779aSAndroid Build Coastguard Worker       &(sbr_qmf_analy_states[chan ? QMF_FILTER_STATE_ANA_SIZE : 0]);
1104*15dc779aSAndroid Build Coastguard Worker 
1105*15dc779aSAndroid Build Coastguard Worker   memset(ptr_sbr_qmf->anal_filter_states, 0,
1106*15dc779aSAndroid Build Coastguard Worker          sizeof(WORD16) * QMF_FILTER_STATE_ANA_SIZE);
1107*15dc779aSAndroid Build Coastguard Worker 
1108*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->anal_filter_states_32 =
1109*15dc779aSAndroid Build Coastguard Worker       &(sbr_qmf_analy_states_32[chan ? QMF_FILTER_STATE_ANA_SIZE : 0]);
1110*15dc779aSAndroid Build Coastguard Worker 
1111*15dc779aSAndroid Build Coastguard Worker   memset(ptr_sbr_qmf->anal_filter_states_32, 0,
1112*15dc779aSAndroid Build Coastguard Worker          sizeof(WORD32) * QMF_FILTER_STATE_ANA_SIZE);
1113*15dc779aSAndroid Build Coastguard Worker 
1114*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->core_samples_buffer = ptr_sbr_qmf->anal_filter_states;
1115*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->core_samples_buffer_32 = ptr_sbr_qmf->anal_filter_states_32;
1116*15dc779aSAndroid Build Coastguard Worker 
1117*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->filter_pos_32 = (WORD32 *)qmf_dec_tables_ptr->esbr_qmf_c;
1118*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->state_new_samples_pos_low_32 =
1119*15dc779aSAndroid Build Coastguard Worker       ptr_sbr_qmf->anal_filter_states_32;
1120*15dc779aSAndroid Build Coastguard Worker   if (audio_object_type != AOT_ER_AAC_ELD &&
1121*15dc779aSAndroid Build Coastguard Worker       audio_object_type != AOT_ER_AAC_LD) {
1122*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->filter_pos = (WORD16 *)qmf_dec_tables_ptr->qmf_c;
1123*15dc779aSAndroid Build Coastguard Worker   } else {
1124*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->filter_pos = (WORD16 *)qmf_dec_tables_ptr->qmf_c_eld3;
1125*15dc779aSAndroid Build Coastguard Worker     if (ldmps_present == 1)
1126*15dc779aSAndroid Build Coastguard Worker       ptr_sbr_qmf->filter_pos_32 =
1127*15dc779aSAndroid Build Coastguard Worker           (WORD32 *)qmf_dec_tables_ptr->qmf_c_ldsbr_mps;
1128*15dc779aSAndroid Build Coastguard Worker     if (no_ldsbr == 1)
1129*15dc779aSAndroid Build Coastguard Worker       ptr_sbr_qmf->filter_pos_32 =
1130*15dc779aSAndroid Build Coastguard Worker           (WORD32 *)ixheaacd_ldmps_polyphase_filter_coeff_fix;
1131*15dc779aSAndroid Build Coastguard Worker   }
1132*15dc779aSAndroid Build Coastguard Worker 
1133*15dc779aSAndroid Build Coastguard Worker   sbr_scale_factor->st_lb_scale = 0;
1134*15dc779aSAndroid Build Coastguard Worker 
1135*15dc779aSAndroid Build Coastguard Worker   sbr_scale_factor->st_syn_scale = -6;
1136*15dc779aSAndroid Build Coastguard Worker 
1137*15dc779aSAndroid Build Coastguard Worker   if (audio_object_type == AOT_ER_AAC_ELD ||
1138*15dc779aSAndroid Build Coastguard Worker       audio_object_type == AOT_ER_AAC_LD) {
1139*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->filter_2_32 =
1140*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_qmf->filter_pos_32 + ptr_sbr_qmf->no_channels;
1141*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->fp1_anal_32 = ptr_sbr_qmf->anal_filter_states_32;
1142*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->fp2_anal_32 =
1143*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_qmf->anal_filter_states_32 + ptr_sbr_qmf->no_channels;
1144*15dc779aSAndroid Build Coastguard Worker 
1145*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->filter_2 = ptr_sbr_qmf->filter_pos + ptr_sbr_qmf->no_channels;
1146*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->fp1_anal = ptr_sbr_qmf->anal_filter_states;
1147*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->fp2_anal =
1148*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_qmf->anal_filter_states + ptr_sbr_qmf->no_channels;
1149*15dc779aSAndroid Build Coastguard Worker   }
1150*15dc779aSAndroid Build Coastguard Worker 
1151*15dc779aSAndroid Build Coastguard Worker   return;
1152*15dc779aSAndroid Build Coastguard Worker }
1153*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_create_cplx_synt_qmfbank(ia_sbr_qmf_filter_bank_struct * ptr_sbr_qmf,WORD16 no_bins,WORD16 lsb,WORD16 usb,WORD16 chan,FLAG down_sample_flag,WORD16 * sbr_qmf_synth_states,WORD32 * sbr_qmf_synth_states_32,ia_qmf_dec_tables_struct * qmf_dec_tables_ptr,WORD32 audio_object_type)1154*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE VOID ixheaacd_create_cplx_synt_qmfbank(
1155*15dc779aSAndroid Build Coastguard Worker     ia_sbr_qmf_filter_bank_struct *ptr_sbr_qmf, WORD16 no_bins, WORD16 lsb,
1156*15dc779aSAndroid Build Coastguard Worker     WORD16 usb, WORD16 chan, FLAG down_sample_flag,
1157*15dc779aSAndroid Build Coastguard Worker     WORD16 *sbr_qmf_synth_states, WORD32 *sbr_qmf_synth_states_32,
1158*15dc779aSAndroid Build Coastguard Worker     ia_qmf_dec_tables_struct *qmf_dec_tables_ptr, WORD32 audio_object_type) {
1159*15dc779aSAndroid Build Coastguard Worker   WORD32 L;
1160*15dc779aSAndroid Build Coastguard Worker 
1161*15dc779aSAndroid Build Coastguard Worker   WORD32 qmf_filter_state_size;
1162*15dc779aSAndroid Build Coastguard Worker 
1163*15dc779aSAndroid Build Coastguard Worker   memset(ptr_sbr_qmf, 0, sizeof(ia_sbr_qmf_filter_bank_struct));
1164*15dc779aSAndroid Build Coastguard Worker 
1165*15dc779aSAndroid Build Coastguard Worker   if (down_sample_flag) {
1166*15dc779aSAndroid Build Coastguard Worker     L = NO_SYNTHESIS_CHANNELS_DOWN_SAMPLED;
1167*15dc779aSAndroid Build Coastguard Worker     qmf_filter_state_size = QMF_FILTER_STATE_SYN_SIZE_DOWN_SAMPLED;
1168*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->usb = NO_SYNTHESIS_CHANNELS_DOWN_SAMPLED;
1169*15dc779aSAndroid Build Coastguard Worker   } else {
1170*15dc779aSAndroid Build Coastguard Worker     L = NO_SYNTHESIS_CHANNELS;
1171*15dc779aSAndroid Build Coastguard Worker     qmf_filter_state_size = QMF_FILTER_STATE_SYN_SIZE;
1172*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->usb = usb;
1173*15dc779aSAndroid Build Coastguard Worker   }
1174*15dc779aSAndroid Build Coastguard Worker 
1175*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->ixheaacd_drc_offset = 0;
1176*15dc779aSAndroid Build Coastguard Worker   if (audio_object_type != AOT_ER_AAC_ELD &&
1177*15dc779aSAndroid Build Coastguard Worker       audio_object_type != AOT_ER_AAC_LD) {
1178*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->filter_pos_syn = (WORD16 *)qmf_dec_tables_ptr->qmf_c;
1179*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->p_filter = qmf_dec_tables_ptr->qmf_c;
1180*15dc779aSAndroid Build Coastguard Worker   } else {
1181*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->filter_pos_syn = (WORD16 *)qmf_dec_tables_ptr->qmf_c_eld;
1182*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->p_filter = qmf_dec_tables_ptr->qmf_c_eld;
1183*15dc779aSAndroid Build Coastguard Worker   }
1184*15dc779aSAndroid Build Coastguard Worker 
1185*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->filter_pos_syn_32 = (WORD32 *)qmf_dec_tables_ptr->esbr_qmf_c;
1186*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->p_filter_32 = qmf_dec_tables_ptr->esbr_qmf_c;
1187*15dc779aSAndroid Build Coastguard Worker 
1188*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->no_channels = L;
1189*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->qmf_filter_state_size = qmf_filter_state_size;
1190*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->num_time_slots = no_bins;
1191*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->lsb = lsb;
1192*15dc779aSAndroid Build Coastguard Worker 
1193*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->filter_states =
1194*15dc779aSAndroid Build Coastguard Worker       &sbr_qmf_synth_states[chan ? qmf_filter_state_size : 0];
1195*15dc779aSAndroid Build Coastguard Worker 
1196*15dc779aSAndroid Build Coastguard Worker   memset(ptr_sbr_qmf->filter_states, 0, sizeof(WORD16) * qmf_filter_state_size);
1197*15dc779aSAndroid Build Coastguard Worker 
1198*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_qmf->filter_states_32 =
1199*15dc779aSAndroid Build Coastguard Worker       &sbr_qmf_synth_states_32[chan ? qmf_filter_state_size : 0];
1200*15dc779aSAndroid Build Coastguard Worker 
1201*15dc779aSAndroid Build Coastguard Worker   memset(ptr_sbr_qmf->filter_states_32, 0,
1202*15dc779aSAndroid Build Coastguard Worker          sizeof(WORD32) * qmf_filter_state_size);
1203*15dc779aSAndroid Build Coastguard Worker 
1204*15dc779aSAndroid Build Coastguard Worker   if (audio_object_type == AOT_ER_AAC_ELD ||
1205*15dc779aSAndroid Build Coastguard Worker       audio_object_type == AOT_ER_AAC_LD) {
1206*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->fp1_syn = ptr_sbr_qmf->filter_states;
1207*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->fp2_syn =
1208*15dc779aSAndroid Build Coastguard Worker         ptr_sbr_qmf->filter_states + ptr_sbr_qmf->no_channels;
1209*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_qmf->sixty4 = NO_SYNTHESIS_CHANNELS;
1210*15dc779aSAndroid Build Coastguard Worker   }
1211*15dc779aSAndroid Build Coastguard Worker 
1212*15dc779aSAndroid Build Coastguard Worker   return;
1213*15dc779aSAndroid Build Coastguard Worker }
1214*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_create_sbrdec(ixheaacd_misc_tables * pstr_common_table,ia_sbr_channel_struct * ptr_sbr_channel,ia_sbr_header_data_struct * ptr_header_data,WORD16 chan,FLAG down_sample_flag,VOID * sbr_persistent_mem_v,WORD ps_enable,WORD audio_object_type,WORD32 ldmps_present,WORD32 ldsbr_present)1215*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_create_sbrdec(ixheaacd_misc_tables *pstr_common_table,
1216*15dc779aSAndroid Build Coastguard Worker                               ia_sbr_channel_struct *ptr_sbr_channel,
1217*15dc779aSAndroid Build Coastguard Worker                               ia_sbr_header_data_struct *ptr_header_data,
1218*15dc779aSAndroid Build Coastguard Worker                               WORD16 chan, FLAG down_sample_flag,
1219*15dc779aSAndroid Build Coastguard Worker                               VOID *sbr_persistent_mem_v, WORD ps_enable,
1220*15dc779aSAndroid Build Coastguard Worker                               WORD audio_object_type, WORD32 ldmps_present,
1221*15dc779aSAndroid Build Coastguard Worker                               WORD32 ldsbr_present)
1222*15dc779aSAndroid Build Coastguard Worker 
1223*15dc779aSAndroid Build Coastguard Worker {
1224*15dc779aSAndroid Build Coastguard Worker   WORD16 err;
1225*15dc779aSAndroid Build Coastguard Worker   WORD16 time_slots;
1226*15dc779aSAndroid Build Coastguard Worker   WORD16 no_bins;
1227*15dc779aSAndroid Build Coastguard Worker   ia_sbr_pers_struct *sbr_persistent_mem =
1228*15dc779aSAndroid Build Coastguard Worker       (ia_sbr_pers_struct *)sbr_persistent_mem_v;
1229*15dc779aSAndroid Build Coastguard Worker   ia_sbr_dec_struct *hs = &(ptr_sbr_channel->str_sbr_dec);
1230*15dc779aSAndroid Build Coastguard Worker 
1231*15dc779aSAndroid Build Coastguard Worker   time_slots = ptr_header_data->num_time_slots;
1232*15dc779aSAndroid Build Coastguard Worker 
1233*15dc779aSAndroid Build Coastguard Worker   no_bins = (WORD16)(time_slots * ptr_header_data->time_step);
1234*15dc779aSAndroid Build Coastguard Worker 
1235*15dc779aSAndroid Build Coastguard Worker   hs->str_sbr_scale_fact.ov_lb_scale = INT_BITS - 1;
1236*15dc779aSAndroid Build Coastguard Worker   hs->str_sbr_scale_fact.hb_scale = INT_BITS - 1;
1237*15dc779aSAndroid Build Coastguard Worker   hs->str_sbr_scale_fact.ov_hb_scale = INT_BITS - 1;
1238*15dc779aSAndroid Build Coastguard Worker   hs->str_sbr_scale_fact.st_syn_scale = INT_BITS - 1;
1239*15dc779aSAndroid Build Coastguard Worker 
1240*15dc779aSAndroid Build Coastguard Worker   ptr_sbr_channel->pstr_prev_frame_data =
1241*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->pstr_prev_frame_data[chan];
1242*15dc779aSAndroid Build Coastguard Worker 
1243*15dc779aSAndroid Build Coastguard Worker   err = ixheaacd_create_sbr_env_calc(pstr_common_table, &hs->str_sbr_calc_env,
1244*15dc779aSAndroid Build Coastguard Worker                                      chan, sbr_persistent_mem, ptr_header_data,
1245*15dc779aSAndroid Build Coastguard Worker                                      audio_object_type);
1246*15dc779aSAndroid Build Coastguard Worker 
1247*15dc779aSAndroid Build Coastguard Worker   if (err) {
1248*15dc779aSAndroid Build Coastguard Worker     return (-1);
1249*15dc779aSAndroid Build Coastguard Worker   }
1250*15dc779aSAndroid Build Coastguard Worker 
1251*15dc779aSAndroid Build Coastguard Worker   ixheaacd_create_cplx_anal_qmfbank(
1252*15dc779aSAndroid Build Coastguard Worker       &hs->str_codec_qmf_bank, &hs->str_sbr_scale_fact, no_bins,
1253*15dc779aSAndroid Build Coastguard Worker       ptr_header_data->pstr_freq_band_data->sub_band_start, chan,
1254*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->sbr_qmf_analy_states,
1255*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->sbr_qmf_analy_states_32,
1256*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_tables->qmf_dec_tables_ptr,
1257*15dc779aSAndroid Build Coastguard Worker       audio_object_type, ldmps_present, ldsbr_present);
1258*15dc779aSAndroid Build Coastguard Worker 
1259*15dc779aSAndroid Build Coastguard Worker   ixheaacd_create_cplx_synt_qmfbank(
1260*15dc779aSAndroid Build Coastguard Worker       &hs->str_synthesis_qmf_bank, no_bins,
1261*15dc779aSAndroid Build Coastguard Worker       ptr_header_data->pstr_freq_band_data->sub_band_start,
1262*15dc779aSAndroid Build Coastguard Worker       ptr_header_data->pstr_freq_band_data->sub_band_end, chan,
1263*15dc779aSAndroid Build Coastguard Worker       down_sample_flag, sbr_persistent_mem->sbr_qmf_synth_states,
1264*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->sbr_qmf_synth_states_32,
1265*15dc779aSAndroid Build Coastguard Worker       sbr_persistent_mem->str_sbr_dec_inst.pstr_sbr_tables->qmf_dec_tables_ptr,
1266*15dc779aSAndroid Build Coastguard Worker       audio_object_type);
1267*15dc779aSAndroid Build Coastguard Worker 
1268*15dc779aSAndroid Build Coastguard Worker   ixheaacd_init_sbr_prev_framedata(ptr_sbr_channel->pstr_prev_frame_data,
1269*15dc779aSAndroid Build Coastguard Worker                                    time_slots);
1270*15dc779aSAndroid Build Coastguard Worker 
1271*15dc779aSAndroid Build Coastguard Worker   ixheaacd_create_hf_generator(&hs->str_hf_generator,
1272*15dc779aSAndroid Build Coastguard Worker                                hs->str_codec_qmf_bank.num_time_slots, chan,
1273*15dc779aSAndroid Build Coastguard Worker                                sbr_persistent_mem, ps_enable);
1274*15dc779aSAndroid Build Coastguard Worker 
1275*15dc779aSAndroid Build Coastguard Worker   hs->ptr_sbr_overlap_buf = sbr_persistent_mem->ptr_sbr_overlap_buf[chan];
1276*15dc779aSAndroid Build Coastguard Worker 
1277*15dc779aSAndroid Build Coastguard Worker   return 0;
1278*15dc779aSAndroid Build Coastguard Worker }
1279