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