xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_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 "ixheaac_type_def.h"
22*15dc779aSAndroid Build Coastguard Worker 
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_common.h"
24*15dc779aSAndroid Build Coastguard Worker 
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops16.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops.h"
30*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_bitbuffer.h"
31*15dc779aSAndroid Build Coastguard Worker 
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_op.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_intrinsics.h"
34*15dc779aSAndroid Build Coastguard Worker 
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_defines.h"
36*15dc779aSAndroid Build Coastguard Worker 
37*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aac_rom.h"
38*15dc779aSAndroid Build Coastguard Worker 
39*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_definitions.h"
40*15dc779aSAndroid Build Coastguard Worker 
41*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_error_codes.h"
42*15dc779aSAndroid Build Coastguard Worker 
43*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pulsedata.h"
44*15dc779aSAndroid Build Coastguard Worker 
45*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pns.h"
46*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_data_struct.h"
47*15dc779aSAndroid Build Coastguard Worker 
48*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lt_predict.h"
49*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_cnst.h"
50*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_defines.h"
51*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_struct_def.h"
52*15dc779aSAndroid Build Coastguard Worker 
53*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_channelinfo.h"
54*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_dec.h"
55*15dc779aSAndroid Build Coastguard Worker 
56*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecoder.h"
57*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_block.h"
58*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_channel.h"
59*15dc779aSAndroid Build Coastguard Worker 
60*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_payload.h"
61*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_common_rom.h"
62*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecsettings.h"
63*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_scale.h"
64*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr_part.h"
65*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_rom.h"
66*15dc779aSAndroid Build Coastguard Worker 
67*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lpp_tran.h"
68*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_hybrid.h"
69*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_dec.h"
70*15dc779aSAndroid Build Coastguard Worker 
71*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr.h"
72*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_adts.h"
73*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_audioobjtypes.h"
74*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_memory_standards.h"
75*15dc779aSAndroid Build Coastguard Worker 
76*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_latmdemux.h"
77*15dc779aSAndroid Build Coastguard Worker 
78*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aacdec.h"
79*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_polyphase.h"
80*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_config.h"
81*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_qmf_dec.h"
82*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_macro_def.h"
83*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_struct_def.h"
84*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_res_rom.h"
85*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_aac_struct.h"
86*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_dec.h"
87*15dc779aSAndroid Build Coastguard Worker 
88*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_struct_def.h"
89*15dc779aSAndroid Build Coastguard Worker 
90*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_multichannel.h"
91*15dc779aSAndroid Build Coastguard Worker 
92*15dc779aSAndroid Build Coastguard Worker #define ALIGN_SIZE64(x) ((((x) + 7) >> 3) << 3)
93*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_set_aac_persistent_buffers(VOID * aac_persistent_mem_v,WORD32 num_channel)94*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_set_aac_persistent_buffers(VOID *aac_persistent_mem_v,
95*15dc779aSAndroid Build Coastguard Worker                                            WORD32 num_channel) {
96*15dc779aSAndroid Build Coastguard Worker   WORD32 persistent_used;
97*15dc779aSAndroid Build Coastguard Worker 
98*15dc779aSAndroid Build Coastguard Worker   struct ia_aac_persistent_struct *aac_persistent_mem =
99*15dc779aSAndroid Build Coastguard Worker       (struct ia_aac_persistent_struct *)aac_persistent_mem_v;
100*15dc779aSAndroid Build Coastguard Worker 
101*15dc779aSAndroid Build Coastguard Worker   persistent_used =
102*15dc779aSAndroid Build Coastguard Worker       IXHEAAC_GET_SIZE_ALIGNED(sizeof(struct ia_aac_persistent_struct), BYTE_ALIGN_8);
103*15dc779aSAndroid Build Coastguard Worker 
104*15dc779aSAndroid Build Coastguard Worker   memset(aac_persistent_mem, 0,
105*15dc779aSAndroid Build Coastguard Worker          IXHEAAC_GET_SIZE_ALIGNED(sizeof(struct ia_aac_persistent_struct), BYTE_ALIGN_8));
106*15dc779aSAndroid Build Coastguard Worker   aac_persistent_mem->overlap_buffer =
107*15dc779aSAndroid Build Coastguard Worker       (WORD32 *)((WORD8 *)aac_persistent_mem_v + persistent_used);
108*15dc779aSAndroid Build Coastguard Worker 
109*15dc779aSAndroid Build Coastguard Worker   memset(
110*15dc779aSAndroid Build Coastguard Worker       (WORD32 *)((WORD8 *)aac_persistent_mem_v + persistent_used), 0,
111*15dc779aSAndroid Build Coastguard Worker       IXHEAAC_GET_SIZE_ALIGNED(
112*15dc779aSAndroid Build Coastguard Worker           4 * 512 * num_channel * sizeof(aac_persistent_mem->overlap_buffer[0]), BYTE_ALIGN_8));
113*15dc779aSAndroid Build Coastguard Worker 
114*15dc779aSAndroid Build Coastguard Worker   persistent_used += IXHEAAC_GET_SIZE_ALIGNED(
115*15dc779aSAndroid Build Coastguard Worker       4 * 512 * num_channel * sizeof(aac_persistent_mem->overlap_buffer[0]), BYTE_ALIGN_8);
116*15dc779aSAndroid Build Coastguard Worker 
117*15dc779aSAndroid Build Coastguard Worker   aac_persistent_mem->sbr_payload_buffer =
118*15dc779aSAndroid Build Coastguard Worker       (WORD8 *)((WORD8 *)aac_persistent_mem_v + persistent_used);
119*15dc779aSAndroid Build Coastguard Worker 
120*15dc779aSAndroid Build Coastguard Worker   memset((WORD16 *)((WORD8 *)aac_persistent_mem_v + persistent_used), 0,
121*15dc779aSAndroid Build Coastguard Worker          num_channel *
122*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(
123*15dc779aSAndroid Build Coastguard Worker                  MAXSBRBYTES * sizeof(aac_persistent_mem->sbr_payload_buffer[0]), BYTE_ALIGN_8));
124*15dc779aSAndroid Build Coastguard Worker 
125*15dc779aSAndroid Build Coastguard Worker   persistent_used +=
126*15dc779aSAndroid Build Coastguard Worker       num_channel *
127*15dc779aSAndroid Build Coastguard Worker       IXHEAAC_GET_SIZE_ALIGNED(MAXSBRBYTES * sizeof(aac_persistent_mem->sbr_payload_buffer[0]),
128*15dc779aSAndroid Build Coastguard Worker                                BYTE_ALIGN_8);
129*15dc779aSAndroid Build Coastguard Worker 
130*15dc779aSAndroid Build Coastguard Worker   aac_persistent_mem->prev_sbr_payload_buffer =
131*15dc779aSAndroid Build Coastguard Worker       (WORD8 *)((WORD8 *)aac_persistent_mem_v + persistent_used);
132*15dc779aSAndroid Build Coastguard Worker 
133*15dc779aSAndroid Build Coastguard Worker   memset((WORD8 *)aac_persistent_mem->prev_sbr_payload_buffer, 0,
134*15dc779aSAndroid Build Coastguard Worker          num_channel * IXHEAAC_GET_SIZE_ALIGNED(
135*15dc779aSAndroid Build Coastguard Worker                            MAXSBRBYTES * sizeof(*(aac_persistent_mem->prev_sbr_payload_buffer)),
136*15dc779aSAndroid Build Coastguard Worker                            BYTE_ALIGN_8));
137*15dc779aSAndroid Build Coastguard Worker 
138*15dc779aSAndroid Build Coastguard Worker   persistent_used +=
139*15dc779aSAndroid Build Coastguard Worker       num_channel *
140*15dc779aSAndroid Build Coastguard Worker       IXHEAAC_GET_SIZE_ALIGNED(
141*15dc779aSAndroid Build Coastguard Worker           MAXSBRBYTES * sizeof(*(aac_persistent_mem->prev_sbr_payload_buffer)), BYTE_ALIGN_8);
142*15dc779aSAndroid Build Coastguard Worker 
143*15dc779aSAndroid Build Coastguard Worker   {
144*15dc779aSAndroid Build Coastguard Worker     WORD32 i;
145*15dc779aSAndroid Build Coastguard Worker 
146*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < num_channel; i++) {
147*15dc779aSAndroid Build Coastguard Worker       aac_persistent_mem->ltp_buf[i] =
148*15dc779aSAndroid Build Coastguard Worker           (WORD16 *)((WORD8 *)aac_persistent_mem_v + persistent_used);
149*15dc779aSAndroid Build Coastguard Worker 
150*15dc779aSAndroid Build Coastguard Worker       memset((WORD16 *)((WORD8 *)aac_persistent_mem_v + persistent_used), 0,
151*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(ltp_buffer_size * sizeof(aac_persistent_mem->ltp_buf[i][0]),
152*15dc779aSAndroid Build Coastguard Worker                                       BYTE_ALIGN_8));
153*15dc779aSAndroid Build Coastguard Worker 
154*15dc779aSAndroid Build Coastguard Worker       persistent_used += IXHEAAC_GET_SIZE_ALIGNED(
155*15dc779aSAndroid Build Coastguard Worker           ltp_buffer_size * sizeof(aac_persistent_mem->ltp_buf[i][0]), BYTE_ALIGN_8);
156*15dc779aSAndroid Build Coastguard Worker 
157*15dc779aSAndroid Build Coastguard Worker       aac_persistent_mem->ptr_aac_dec_static_channel_info[i] =
158*15dc779aSAndroid Build Coastguard Worker           (ia_aac_dec_channel_info *)((WORD8 *)aac_persistent_mem_v + persistent_used);
159*15dc779aSAndroid Build Coastguard Worker       persistent_used += IXHEAAC_GET_SIZE_ALIGNED(sizeof(ia_aac_dec_channel_info), BYTE_ALIGN_8);
160*15dc779aSAndroid Build Coastguard Worker 
161*15dc779aSAndroid Build Coastguard Worker       aac_persistent_mem->ptr_aac_dec_static_channel_info[i]
162*15dc779aSAndroid Build Coastguard Worker           ->overlap_add_data.win_shape = 0;
163*15dc779aSAndroid Build Coastguard Worker       aac_persistent_mem->ptr_aac_dec_static_channel_info[i]
164*15dc779aSAndroid Build Coastguard Worker           ->overlap_add_data.win_seq = 0;
165*15dc779aSAndroid Build Coastguard Worker 
166*15dc779aSAndroid Build Coastguard Worker       aac_persistent_mem->ptr_aac_dec_static_channel_info[i]
167*15dc779aSAndroid Build Coastguard Worker           ->overlap_add_data.ptr_overlap_buf =
168*15dc779aSAndroid Build Coastguard Worker           &aac_persistent_mem->overlap_buffer[i * OVERLAP_BUFFER_SIZE];
169*15dc779aSAndroid Build Coastguard Worker     }
170*15dc779aSAndroid Build Coastguard Worker   }
171*15dc779aSAndroid Build Coastguard Worker 
172*15dc779aSAndroid Build Coastguard Worker   return persistent_used;
173*15dc779aSAndroid Build Coastguard Worker }
174*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_huff_tables_create(ia_aac_dec_tables_struct * ptr_aac_tables)175*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_huff_tables_create(ia_aac_dec_tables_struct *ptr_aac_tables) {
176*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[0] = 0;
177*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[1] =
178*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb1;
179*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[2] =
180*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb2;
181*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[3] =
182*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb3;
183*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[4] =
184*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb4;
185*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[5] =
186*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb5;
187*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[6] =
188*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb6;
189*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[7] =
190*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb7;
191*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[8] =
192*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb8;
193*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[9] =
194*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb9;
195*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[10] =
196*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb10;
197*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[11] =
198*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb10;
199*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->code_book[12] =
200*15dc779aSAndroid Build Coastguard Worker       (UWORD16 *)ptr_aac_tables->pstr_huffmann_tables->input_table_cb10;
201*15dc779aSAndroid Build Coastguard Worker 
202*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[1] =
203*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf1;
204*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[2] =
205*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf2;
206*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[3] =
207*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf3;
208*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[4] =
209*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf4;
210*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[5] =
211*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf5;
212*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[6] =
213*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf6;
214*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[7] =
215*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf7;
216*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[8] =
217*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf8;
218*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[9] =
219*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf9;
220*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[10] =
221*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf10;
222*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[11] =
223*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf10;
224*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->index_table[12] =
225*15dc779aSAndroid Build Coastguard Worker       (UWORD32 *)ptr_aac_tables->pstr_huffmann_tables->idx_table_hf10;
226*15dc779aSAndroid Build Coastguard Worker 
227*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[0] =
228*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_128;
229*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[1] =
230*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_128;
231*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[2] =
232*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_128;
233*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[3] =
234*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_128;
235*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[4] =
236*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_128;
237*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[5] =
238*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_128;
239*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[6] =
240*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_128;
241*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[7] =
242*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_128;
243*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[8] =
244*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_128;
245*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[9] =
246*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_128;
247*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[10] =
248*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_128;
249*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[11] =
250*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_8_128;
251*15dc779aSAndroid Build Coastguard Worker 
252*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[12] =
253*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_120;
254*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[13] =
255*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_120;
256*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[14] =
257*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_120;
258*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[15] =
259*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_120;
260*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[16] =
261*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_120;
262*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[17] =
263*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_120;
264*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[18] =
265*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_120;
266*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[19] =
267*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_120;
268*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[20] =
269*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_120;
270*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[21] =
271*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_120;
272*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[22] =
273*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_120;
274*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_short[23] =
275*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_8_120;
276*15dc779aSAndroid Build Coastguard Worker 
277*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[0] =
278*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_1024;
279*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[1] =
280*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_1024;
281*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[2] =
282*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_64_1024;
283*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[3] =
284*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_1024;
285*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[4] =
286*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_1024;
287*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[5] =
288*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_32_1024;
289*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[6] =
290*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_1024;
291*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[7] =
292*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_1024;
293*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[8] =
294*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_1024;
295*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[9] =
296*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_1024;
297*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[10] =
298*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_1024;
299*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[11] =
300*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_8_1024;
301*15dc779aSAndroid Build Coastguard Worker 
302*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[12] =
303*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_960;
304*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[13] =
305*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_96_960;
306*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[14] =
307*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_64_960;
308*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[15] =
309*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_960;
310*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[16] =
311*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_960;
312*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[17] =
313*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_960;
314*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[18] =
315*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_960;
316*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[19] =
317*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_960;
318*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[20] =
319*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_960;
320*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[21] =
321*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_960;
322*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[22] =
323*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_16_960;
324*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_factor_bands_long[23] =
325*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_8_960;
326*15dc779aSAndroid Build Coastguard Worker 
327*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[0] =
328*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_512;
329*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[1] =
330*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_512;
331*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[2] =
332*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_512;
333*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[3] =
334*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_512;
335*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[4] =
336*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_512;
337*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[5] =
338*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_32_512;
339*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[6] =
340*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
341*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[7] =
342*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
343*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[8] =
344*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
345*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[9] =
346*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
347*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[10] =
348*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
349*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[11] =
350*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
351*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[12] =
352*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
353*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[13] =
354*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
355*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[14] =
356*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
357*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_512[15] =
358*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_512;
359*15dc779aSAndroid Build Coastguard Worker 
360*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[0] =
361*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_480;
362*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[1] =
363*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_480;
364*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[2] =
365*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_480;
366*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[3] =
367*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_480;
368*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[4] =
369*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_48_480;
370*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[5] =
371*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_32_480;
372*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[6] =
373*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
374*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[7] =
375*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
376*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[8] =
377*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
378*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[9] =
379*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
380*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[10] =
381*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
382*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[11] =
383*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
384*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[12] =
385*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
386*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[13] =
387*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
388*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[14] =
389*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
390*15dc779aSAndroid Build Coastguard Worker   ptr_aac_tables->scale_fac_bands_480[15] =
391*15dc779aSAndroid Build Coastguard Worker       ptr_aac_tables->pstr_huffmann_tables->ixheaacd_sfb_24_480;
392*15dc779aSAndroid Build Coastguard Worker }
393*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_aac_decoder_init(ia_aac_dec_state_struct * p_state_enhaacplus_dec,ia_aac_dec_sbr_bitstream_struct * ptr_sbr_bitstream,WORD channels,VOID * aac_persistent_mem_v,WORD32 frame_length)394*15dc779aSAndroid Build Coastguard Worker ia_aac_decoder_struct *ixheaacd_aac_decoder_init(
395*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_state_struct *p_state_enhaacplus_dec,
396*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_sbr_bitstream_struct *ptr_sbr_bitstream, WORD channels,
397*15dc779aSAndroid Build Coastguard Worker     VOID *aac_persistent_mem_v, WORD32 frame_length) {
398*15dc779aSAndroid Build Coastguard Worker   WORD i, ch;
399*15dc779aSAndroid Build Coastguard Worker   struct ia_aac_persistent_struct *aac_persistent_mem;
400*15dc779aSAndroid Build Coastguard Worker   aac_persistent_mem = (struct ia_aac_persistent_struct *)aac_persistent_mem_v;
401*15dc779aSAndroid Build Coastguard Worker 
402*15dc779aSAndroid Build Coastguard Worker   aac_persistent_mem->str_aac_decoder.pstr_sbr_bitstream = ptr_sbr_bitstream;
403*15dc779aSAndroid Build Coastguard Worker 
404*15dc779aSAndroid Build Coastguard Worker   for (ch = 0; ch < channels; ch++) {
405*15dc779aSAndroid Build Coastguard Worker     ia_aac_decoder_struct *aac_dec_handle =
406*15dc779aSAndroid Build Coastguard Worker         &aac_persistent_mem->str_aac_decoder;
407*15dc779aSAndroid Build Coastguard Worker     aac_dec_handle->pstr_aac_dec_overlap_info[ch] =
408*15dc779aSAndroid Build Coastguard Worker         &aac_persistent_mem->str_aac_dec_overlap_info[ch];
409*15dc779aSAndroid Build Coastguard Worker     aac_dec_handle->pstr_pns_rand_vec_data =
410*15dc779aSAndroid Build Coastguard Worker         &aac_persistent_mem->str_pns_rand_vec_data;
411*15dc779aSAndroid Build Coastguard Worker 
412*15dc779aSAndroid Build Coastguard Worker     aac_dec_handle->pstr_aac_dec_overlap_info[ch]->window_shape = 0;
413*15dc779aSAndroid Build Coastguard Worker     aac_dec_handle->pstr_aac_dec_overlap_info[ch]->window_sequence = 0;
414*15dc779aSAndroid Build Coastguard Worker     if (p_state_enhaacplus_dec->audio_object_type == AOT_ER_AAC_ELD)
415*15dc779aSAndroid Build Coastguard Worker       aac_dec_handle->pstr_aac_dec_overlap_info[ch]->ptr_overlap_buf =
416*15dc779aSAndroid Build Coastguard Worker           &aac_persistent_mem->overlap_buffer[ch * 4 * OVERLAP_BUFFER_SIZE];
417*15dc779aSAndroid Build Coastguard Worker     else
418*15dc779aSAndroid Build Coastguard Worker       aac_dec_handle->pstr_aac_dec_overlap_info[ch]->ptr_overlap_buf =
419*15dc779aSAndroid Build Coastguard Worker           &aac_persistent_mem->overlap_buffer[ch * OVERLAP_BUFFER_SIZE];
420*15dc779aSAndroid Build Coastguard Worker 
421*15dc779aSAndroid Build Coastguard Worker     {
422*15dc779aSAndroid Build Coastguard Worker       WORD32 *ptr_overlap_buf =
423*15dc779aSAndroid Build Coastguard Worker           aac_dec_handle->pstr_aac_dec_overlap_info[ch]->ptr_overlap_buf;
424*15dc779aSAndroid Build Coastguard Worker       memset(ptr_overlap_buf, 0,
425*15dc779aSAndroid Build Coastguard Worker              IXHEAAC_GET_SIZE_ALIGNED(sizeof(ptr_overlap_buf[0]) * 4 * 512, BYTE_ALIGN_8));
426*15dc779aSAndroid Build Coastguard Worker     }
427*15dc779aSAndroid Build Coastguard Worker     aac_persistent_mem->str_aac_decoder.ptr_aac_dec_static_channel_info[ch] =
428*15dc779aSAndroid Build Coastguard Worker         aac_persistent_mem->ptr_aac_dec_static_channel_info[ch];
429*15dc779aSAndroid Build Coastguard Worker     aac_persistent_mem->str_aac_decoder.ptr_aac_dec_static_channel_info[ch]
430*15dc779aSAndroid Build Coastguard Worker         ->ltp_buf = aac_persistent_mem->ltp_buf[ch];
431*15dc779aSAndroid Build Coastguard Worker   }
432*15dc779aSAndroid Build Coastguard Worker 
433*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < 1; i++) {
434*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_sbr_bitstream_struct *ptr_sbr_bitstream =
435*15dc779aSAndroid Build Coastguard Worker         &aac_persistent_mem->str_aac_decoder.pstr_sbr_bitstream[i];
436*15dc779aSAndroid Build Coastguard Worker 
437*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->no_elements = 0;
438*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->str_sbr_ele[0].ptr_sbr_data =
439*15dc779aSAndroid Build Coastguard Worker         &aac_persistent_mem->sbr_payload_buffer[ALIGN_SIZE64(MAXSBRBYTES) * i];
440*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->str_sbr_ele[0].ptr_prev_sbr_data =
441*15dc779aSAndroid Build Coastguard Worker         &aac_persistent_mem->prev_sbr_payload_buffer[ALIGN_SIZE64(MAXSBRBYTES) * i];
442*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->str_sbr_ele[0].sbr_ele_id = ID_SCE;
443*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->str_sbr_ele[0].size_payload = 0;
444*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->str_sbr_ele[0].prev_size_payload = 0;
445*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->str_sbr_ele[0].prev_sbr_ele_id = ID_SCE;
446*15dc779aSAndroid Build Coastguard Worker     ptr_sbr_bitstream->str_sbr_ele[0].size_payload_old = 0;
447*15dc779aSAndroid Build Coastguard Worker   }
448*15dc779aSAndroid Build Coastguard Worker 
449*15dc779aSAndroid Build Coastguard Worker   {
450*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_tables_struct *ptr_aac_tables =
451*15dc779aSAndroid Build Coastguard Worker         aac_persistent_mem->str_aac_decoder.pstr_aac_tables;
452*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_huffman_tables_struct *pstr_huffmann_tables =
453*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->pstr_huffmann_tables;
454*15dc779aSAndroid Build Coastguard Worker 
455*15dc779aSAndroid Build Coastguard Worker     WORD num_entries = sizeof(pstr_huffmann_tables->str_sample_rate_info) /
456*15dc779aSAndroid Build Coastguard Worker                        sizeof(ia_sampling_rate_info_struct);
457*15dc779aSAndroid Build Coastguard Worker 
458*15dc779aSAndroid Build Coastguard Worker     WORD32 sampling_rate = p_state_enhaacplus_dec->sampling_rate;
459*15dc779aSAndroid Build Coastguard Worker     WORD sfidx;
460*15dc779aSAndroid Build Coastguard Worker 
461*15dc779aSAndroid Build Coastguard Worker     i = 0;
462*15dc779aSAndroid Build Coastguard Worker     while ((i < num_entries) &&
463*15dc779aSAndroid Build Coastguard Worker            sampling_rate != ((pstr_huffmann_tables->str_sample_rate_info[i]
464*15dc779aSAndroid Build Coastguard Worker                                   .sampling_frequency))) {
465*15dc779aSAndroid Build Coastguard Worker       i++;
466*15dc779aSAndroid Build Coastguard Worker     }
467*15dc779aSAndroid Build Coastguard Worker     if (i == 12) {
468*15dc779aSAndroid Build Coastguard Worker       i = i - 1;
469*15dc779aSAndroid Build Coastguard Worker     }
470*15dc779aSAndroid Build Coastguard Worker 
471*15dc779aSAndroid Build Coastguard Worker     if (i == num_entries) {
472*15dc779aSAndroid Build Coastguard Worker       return NULL;
473*15dc779aSAndroid Build Coastguard Worker     }
474*15dc779aSAndroid Build Coastguard Worker     sfidx = i;
475*15dc779aSAndroid Build Coastguard Worker 
476*15dc779aSAndroid Build Coastguard Worker     if (frame_length == 1024 || frame_length == 960) {
477*15dc779aSAndroid Build Coastguard Worker       WORD16 *psfb_table_idx[2];
478*15dc779aSAndroid Build Coastguard Worker       const WORD8 *psfb_width[2];
479*15dc779aSAndroid Build Coastguard Worker       WORD width_idx;
480*15dc779aSAndroid Build Coastguard Worker       WORD32 j;
481*15dc779aSAndroid Build Coastguard Worker 
482*15dc779aSAndroid Build Coastguard Worker       if (frame_length == 960)
483*15dc779aSAndroid Build Coastguard Worker         sfidx += 12;
484*15dc779aSAndroid Build Coastguard Worker 
485*15dc779aSAndroid Build Coastguard Worker       psfb_table_idx[0] = ptr_aac_tables->sfb_long_table;
486*15dc779aSAndroid Build Coastguard Worker       psfb_table_idx[1] = ptr_aac_tables->sfb_short_table;
487*15dc779aSAndroid Build Coastguard Worker 
488*15dc779aSAndroid Build Coastguard Worker       psfb_width[0] = ptr_aac_tables->scale_factor_bands_long[sfidx];
489*15dc779aSAndroid Build Coastguard Worker       psfb_width[1] = ptr_aac_tables->scale_factor_bands_short[sfidx];
490*15dc779aSAndroid Build Coastguard Worker 
491*15dc779aSAndroid Build Coastguard Worker       for (j = 1; j >= 0; j--) {
492*15dc779aSAndroid Build Coastguard Worker         const WORD8 *ptr_width = psfb_width[j];
493*15dc779aSAndroid Build Coastguard Worker         WORD16 *ptable_idx = psfb_table_idx[j];
494*15dc779aSAndroid Build Coastguard Worker         width_idx = 0;
495*15dc779aSAndroid Build Coastguard Worker         *ptable_idx++ = width_idx;
496*15dc779aSAndroid Build Coastguard Worker         do {
497*15dc779aSAndroid Build Coastguard Worker           width_idx += (*ptr_width++);
498*15dc779aSAndroid Build Coastguard Worker           *ptable_idx++ = width_idx;
499*15dc779aSAndroid Build Coastguard Worker         } while (*ptr_width != -1);
500*15dc779aSAndroid Build Coastguard Worker 
501*15dc779aSAndroid Build Coastguard Worker         aac_persistent_mem->str_aac_decoder.num_swb_window[j] =
502*15dc779aSAndroid Build Coastguard Worker             (WORD8)(ptr_width - psfb_width[j]);
503*15dc779aSAndroid Build Coastguard Worker       }
504*15dc779aSAndroid Build Coastguard Worker 
505*15dc779aSAndroid Build Coastguard Worker       {
506*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[0].sfb_index =
507*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_long_table;
508*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[1].sfb_index =
509*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_long_table;
510*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[3].sfb_index =
511*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_long_table;
512*15dc779aSAndroid Build Coastguard Worker 
513*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[2].sfb_index =
514*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_short_table;
515*15dc779aSAndroid Build Coastguard Worker 
516*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[0].sfb_width = (WORD8 *)psfb_width[0];
517*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[1].sfb_width = (WORD8 *)psfb_width[0];
518*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[3].sfb_width = (WORD8 *)psfb_width[0];
519*15dc779aSAndroid Build Coastguard Worker 
520*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[2].sfb_width = (WORD8 *)psfb_width[1];
521*15dc779aSAndroid Build Coastguard Worker       }
522*15dc779aSAndroid Build Coastguard Worker     } else {
523*15dc779aSAndroid Build Coastguard Worker       WORD16 *ptr_sfb_idx[2];
524*15dc779aSAndroid Build Coastguard Worker       const WORD8 *ptr_sfb_width[2] = {0};
525*15dc779aSAndroid Build Coastguard Worker       WORD width_idx;
526*15dc779aSAndroid Build Coastguard Worker       WORD32 j;
527*15dc779aSAndroid Build Coastguard Worker 
528*15dc779aSAndroid Build Coastguard Worker       ptr_sfb_idx[0] = ptr_aac_tables->sfb_long_table;
529*15dc779aSAndroid Build Coastguard Worker       ptr_sfb_idx[1] = ptr_aac_tables->sfb_short_table;
530*15dc779aSAndroid Build Coastguard Worker 
531*15dc779aSAndroid Build Coastguard Worker       if (frame_length == 512)
532*15dc779aSAndroid Build Coastguard Worker         ptr_sfb_width[0] = ptr_aac_tables->scale_fac_bands_512[i];
533*15dc779aSAndroid Build Coastguard Worker       else
534*15dc779aSAndroid Build Coastguard Worker         ptr_sfb_width[0] = ptr_aac_tables->scale_fac_bands_480[i];
535*15dc779aSAndroid Build Coastguard Worker 
536*15dc779aSAndroid Build Coastguard Worker       for (j = 0; j >= 0; j--) {
537*15dc779aSAndroid Build Coastguard Worker         const WORD8 *ptr_width = ptr_sfb_width[j];
538*15dc779aSAndroid Build Coastguard Worker         WORD16 *ptr_idx = ptr_sfb_idx[j];
539*15dc779aSAndroid Build Coastguard Worker         width_idx = 0;
540*15dc779aSAndroid Build Coastguard Worker         *ptr_idx++ = width_idx;
541*15dc779aSAndroid Build Coastguard Worker         do {
542*15dc779aSAndroid Build Coastguard Worker           width_idx += (*ptr_width++);
543*15dc779aSAndroid Build Coastguard Worker           *ptr_idx++ = width_idx;
544*15dc779aSAndroid Build Coastguard Worker         } while (*ptr_width != -1);
545*15dc779aSAndroid Build Coastguard Worker 
546*15dc779aSAndroid Build Coastguard Worker         aac_persistent_mem->str_aac_decoder.num_swb_window[j] =
547*15dc779aSAndroid Build Coastguard Worker             (WORD8)(ptr_width - ptr_sfb_width[j]);
548*15dc779aSAndroid Build Coastguard Worker       }
549*15dc779aSAndroid Build Coastguard Worker 
550*15dc779aSAndroid Build Coastguard Worker       {
551*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[0].sfb_index =
552*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_long_table;
553*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[1].sfb_index =
554*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_long_table;
555*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[3].sfb_index =
556*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_long_table;
557*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[2].sfb_index =
558*15dc779aSAndroid Build Coastguard Worker             ptr_aac_tables->sfb_short_table;
559*15dc779aSAndroid Build Coastguard Worker 
560*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[0].sfb_width =
561*15dc779aSAndroid Build Coastguard Worker             (WORD8 *)ptr_sfb_width[0];
562*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[1].sfb_width =
563*15dc779aSAndroid Build Coastguard Worker             (WORD8 *)ptr_sfb_width[0];
564*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[3].sfb_width =
565*15dc779aSAndroid Build Coastguard Worker             (WORD8 *)ptr_sfb_width[0];
566*15dc779aSAndroid Build Coastguard Worker         ptr_aac_tables->str_aac_sfb_info[2].sfb_width =
567*15dc779aSAndroid Build Coastguard Worker             (WORD8 *)ptr_sfb_width[1];
568*15dc779aSAndroid Build Coastguard Worker       }
569*15dc779aSAndroid Build Coastguard Worker     }
570*15dc779aSAndroid Build Coastguard Worker     {
571*15dc779aSAndroid Build Coastguard Worker       ia_aac_decoder_struct *aac_dec_handle =
572*15dc779aSAndroid Build Coastguard Worker           &aac_persistent_mem->str_aac_decoder;
573*15dc779aSAndroid Build Coastguard Worker       aac_dec_handle->sampling_rate_index = (WORD16)i;
574*15dc779aSAndroid Build Coastguard Worker       aac_dec_handle->sampling_rate = sampling_rate;
575*15dc779aSAndroid Build Coastguard Worker       aac_dec_handle->channels = 1;
576*15dc779aSAndroid Build Coastguard Worker       aac_dec_handle->block_number = 0;
577*15dc779aSAndroid Build Coastguard Worker       aac_dec_handle->samples_per_frame = frame_length;
578*15dc779aSAndroid Build Coastguard Worker     }
579*15dc779aSAndroid Build Coastguard Worker   }
580*15dc779aSAndroid Build Coastguard Worker 
581*15dc779aSAndroid Build Coastguard Worker   return &(aac_persistent_mem->str_aac_decoder);
582*15dc779aSAndroid Build Coastguard Worker }
583