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
21 #include <stdlib.h>
22 #include <stdio.h>
23 #include <string.h>
24
25 #include "ixheaacd_type_def.h"
26 #include "ixheaacd_constants.h"
27 #include "ixheaacd_basic_ops32.h"
28 #include "ixheaacd_basic_ops16.h"
29 #include "ixheaacd_basic_ops40.h"
30
31 #include "ixheaacd_defines.h"
32 #include "ixheaacd_cnst.h"
33 #include "ixheaacd_aac_rom.h"
34 #include "ixheaacd_lt_predict.h"
35 #include "ixheaacd_ec_defines.h"
36 #include "ixheaacd_ec_struct_def.h"
37 #include "ixheaacd_audioobjtypes.h"
38
39 #include "ixheaacd_bitbuffer.h"
40 #include "ixheaacd_pulsedata.h"
41 #include "ixheaacd_pns.h"
42 #include "ixheaacd_channelinfo.h"
43 #include "ixheaacd_tns.h"
44 #include "ixheaacd_aac_imdct.h"
45
46 static const WORD32 ixheaacd_codebook_Q30[8] = {
47 612922971, 747985734, 872956397, 978505219,
48 1057528322, 1146642451, 1282693056, 1470524861};
49
50 #define SHIFT_VAL 8
51 #define SHIFT_VAL1 (15 - SHIFT_VAL)
52
ixheaacd_lt_prediction(ia_aac_dec_channel_info_struct * ptr_aac_dec_channel_info,ltp_info * ltp,WORD32 * spec,ia_aac_dec_tables_struct * aac_tables_ptr,UWORD16 win_shape_prev,UWORD32 sr_index,UWORD32 object_type,UWORD32 frame_len,WORD32 * in_data,WORD32 * out_data)53 VOID ixheaacd_lt_prediction(
54 ia_aac_dec_channel_info_struct *ptr_aac_dec_channel_info, ltp_info *ltp,
55 WORD32 *spec, ia_aac_dec_tables_struct *aac_tables_ptr,
56 UWORD16 win_shape_prev, UWORD32 sr_index, UWORD32 object_type,
57 UWORD32 frame_len, WORD32 *in_data, WORD32 *out_data) {
58 ia_ics_info_struct *ptr_ics_info = &ptr_aac_dec_channel_info->str_ics_info;
59 WORD16 *lt_pred_stat = ptr_aac_dec_channel_info->ltp_buf;
60 UWORD16 win_shape = ptr_aac_dec_channel_info->str_ics_info.window_shape;
61 WORD16 sfb;
62 WORD16 bin, i, num_samples;
63 const WORD8 *swb_offset = aac_tables_ptr->scale_factor_bands_long[sr_index];
64 WORD32 *ptr_spec = &spec[0];
65 WORD32 *ptr_x_est = &out_data[0];
66
67 if (512 == ptr_ics_info->frame_length) {
68 swb_offset = aac_tables_ptr->scale_fac_bands_512[sr_index];
69 } else if (480 == ptr_ics_info->frame_length) {
70 swb_offset = aac_tables_ptr->scale_fac_bands_480[sr_index];
71 }
72
73 if (ptr_ics_info->window_sequence != EIGHT_SHORT_SEQUENCE) {
74 if (ltp->data_present) {
75 num_samples = frame_len << 1;
76
77 for (i = 0; i < num_samples; i++) {
78 in_data[i] =
79 ixheaacd_shr32(ixheaacd_mult32x16in32_shl_sat(
80 ixheaacd_codebook_Q30[ltp->coef],
81 lt_pred_stat[num_samples + i - ltp->lag]),
82 SHIFT_VAL);
83 }
84
85 ixheaacd_filter_bank_ltp(aac_tables_ptr, ptr_ics_info->window_sequence,
86 win_shape, win_shape_prev, in_data, out_data,
87 object_type, frame_len);
88
89 if (ptr_aac_dec_channel_info->str_tns_info.tns_data_present == 1)
90 ixheaacd_aac_tns_process(ptr_aac_dec_channel_info, 1, aac_tables_ptr,
91 object_type, 0, out_data);
92
93 for (sfb = 0; sfb < ltp->last_band; sfb++) {
94 WORD8 sfb_width = swb_offset[sfb];
95 if (ltp->long_used[sfb]) {
96 for (bin = sfb_width - 1; bin >= 0; bin--) {
97 WORD32 temp = *ptr_spec;
98 temp = ixheaacd_add32_sat(temp,
99 ixheaacd_shr32(*ptr_x_est++, SHIFT_VAL1));
100 *ptr_spec++ = temp;
101 }
102 } else {
103 ptr_spec += sfb_width;
104 ptr_x_est += sfb_width;
105 }
106 }
107 }
108 }
109 }
110
ixheaacd_filter_bank_ltp(ia_aac_dec_tables_struct * aac_tables_ptr,WORD16 window_sequence,WORD16 window_shape,WORD16 window_shape_prev,WORD32 * in_data,WORD32 * out_mdct,UWORD32 object_type,UWORD32 frame_len)111 VOID ixheaacd_filter_bank_ltp(ia_aac_dec_tables_struct *aac_tables_ptr,
112 WORD16 window_sequence, WORD16 window_shape,
113 WORD16 window_shape_prev, WORD32 *in_data,
114 WORD32 *out_mdct, UWORD32 object_type,
115 UWORD32 frame_len) {
116 WORD32 i;
117
118 const WORD16 *window_long = NULL;
119 const WORD16 *window_long_prev = NULL;
120 const WORD16 *window_short = NULL;
121 const WORD16 *window_short_prev = NULL;
122
123 UWORD16 nlong = frame_len;
124 UWORD16 nlong2 = frame_len << 1;
125 UWORD16 nshort = frame_len / 8;
126 UWORD16 nflat_ls = (nlong - nshort) / 2;
127 WORD32 imdct_scale = 0;
128 WORD32 expo = 0;
129
130 if (object_type == AOT_ER_AAC_LD) {
131 if (!window_shape) {
132 if (512 == frame_len) {
133 window_long =
134 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->window_sine_512;
135 } else {
136 window_long =
137 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->window_sine_480;
138 }
139 } else {
140 if (512 == frame_len) {
141 window_long =
142 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->low_overlap_win;
143 } else {
144 window_long =
145 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->low_overlap_win_480;
146 }
147 }
148
149 if (!window_shape_prev) {
150 if (512 == frame_len) {
151 window_long_prev =
152 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->window_sine_512;
153 } else {
154 window_long_prev =
155 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->window_sine_480;
156 }
157 } else {
158 if (512 == frame_len) {
159 window_long_prev =
160 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->low_overlap_win;
161 } else {
162 window_long_prev =
163 (WORD16 *)aac_tables_ptr->pstr_imdct_tables->low_overlap_win_480;
164 }
165 }
166
167 if (!window_shape)
168 window_short = aac_tables_ptr->pstr_imdct_tables->only_short_window_sine;
169 else
170 window_short = aac_tables_ptr->pstr_imdct_tables->only_short_window_kbd;
171 if (!window_shape_prev)
172 window_short_prev =
173 aac_tables_ptr->pstr_imdct_tables->only_short_window_sine;
174 else
175 window_short_prev =
176 aac_tables_ptr->pstr_imdct_tables->only_short_window_kbd;
177
178 } else {
179 if (!window_shape)
180 window_long = aac_tables_ptr->pstr_imdct_tables->only_long_window_sine;
181 else
182 window_long = aac_tables_ptr->pstr_imdct_tables->only_long_window_kbd;
183 if (!window_shape_prev)
184 window_long_prev =
185 aac_tables_ptr->pstr_imdct_tables->only_long_window_sine;
186 else
187 window_long_prev =
188 aac_tables_ptr->pstr_imdct_tables->only_long_window_kbd;
189
190 if (!window_shape)
191 window_short = aac_tables_ptr->pstr_imdct_tables->only_short_window_sine;
192 else
193 window_short = aac_tables_ptr->pstr_imdct_tables->only_short_window_kbd;
194 if (!window_shape_prev)
195 window_short_prev =
196 aac_tables_ptr->pstr_imdct_tables->only_short_window_sine;
197 else
198 window_short_prev =
199 aac_tables_ptr->pstr_imdct_tables->only_short_window_kbd;
200 }
201
202 switch (window_sequence) {
203 case ONLY_LONG_SEQUENCE:
204
205 if ((512 != nlong) && (480 != nlong)) {
206 for (i = 0; i<nlong>> 1; i++) {
207 in_data[i] =
208 ixheaacd_mult32x16in32_shl(in_data[i], window_long_prev[2 * i]);
209
210 in_data[i + nlong] = ixheaacd_mult32x16in32_shl(
211 in_data[i + nlong], window_long[2 * i + 1]);
212 }
213 for (i = 0; i<nlong>> 1; i++) {
214 in_data[i + (nlong >> 1)] = ixheaacd_mult32x16in32_shl(
215 in_data[i + (nlong >> 1)], window_long_prev[nlong - 1 - 2 * i]);
216
217 in_data[i + nlong + (nlong >> 1)] =
218 ixheaacd_mult32x16in32_shl(in_data[i + nlong + (nlong >> 1)],
219 window_long[nlong - 1 - 2 * i - 1]);
220 }
221
222 } else {
223 WORD32 *win1, *win2;
224 WORD32 *ptr_in1, *ptr_in2;
225 win1 = (WORD32 *)window_long_prev;
226 win2 = (WORD32 *)window_long;
227 ptr_in1 = &in_data[0];
228 ptr_in2 = &in_data[nlong];
229
230 for (i = nlong - 1; i >= 0; i--) {
231 WORD32 temp1 = ixheaacd_mult32_shl(*ptr_in1, *win1++);
232 WORD32 temp2 = ixheaacd_mult32_shl(*ptr_in2, win2[i]);
233
234 *ptr_in1++ = temp1;
235 *ptr_in2++ = temp2;
236 }
237 }
238
239 for (i = 0; i < nlong / 2; i++) {
240 out_mdct[nlong / 2 + i] =
241 ixheaacd_sub32(in_data[i], in_data[nlong - 1 - i]);
242 out_mdct[i] = (-ixheaacd_add32(in_data[nlong + i + nlong / 2],
243 in_data[nlong2 - nlong / 2 - 1 - i]));
244 }
245
246 if (512 == nlong || (480 == nlong)) {
247 if (512 == nlong)
248 ixheaacd_inverse_transform_512(
249 out_mdct, in_data, &imdct_scale,
250 aac_tables_ptr->pstr_imdct_tables->cosine_array_1024,
251 aac_tables_ptr->pstr_imdct_tables, object_type);
252
253 else
254 ixheaacd_mdct_480_ld(out_mdct, in_data, &imdct_scale, 1,
255 aac_tables_ptr->pstr_imdct_tables, object_type);
256
257 imdct_scale += 1;
258
259 if (imdct_scale > 0) {
260 WORD32 *ptr_out_mdct = &out_mdct[0];
261
262 for (i = nlong - 1; i >= 0; i -= 4) {
263 *ptr_out_mdct = ixheaacd_shl32(*ptr_out_mdct, imdct_scale);
264 ptr_out_mdct++;
265 *ptr_out_mdct = ixheaacd_shl32(*ptr_out_mdct, imdct_scale);
266 ptr_out_mdct++;
267 *ptr_out_mdct = ixheaacd_shl32(*ptr_out_mdct, imdct_scale);
268 ptr_out_mdct++;
269 *ptr_out_mdct = ixheaacd_shl32(*ptr_out_mdct, imdct_scale);
270 ptr_out_mdct++;
271 }
272 } else if (imdct_scale < 0) {
273 WORD32 *ptr_out_mdct = &out_mdct[0];
274 imdct_scale = -imdct_scale;
275 for (i = nlong - 1; i >= 0; i -= 4) {
276 *ptr_out_mdct = ixheaacd_shr32(*ptr_out_mdct, imdct_scale);
277 ptr_out_mdct++;
278 *ptr_out_mdct = ixheaacd_shr32(*ptr_out_mdct, imdct_scale);
279 ptr_out_mdct++;
280 *ptr_out_mdct = ixheaacd_shr32(*ptr_out_mdct, imdct_scale);
281 ptr_out_mdct++;
282 *ptr_out_mdct = ixheaacd_shr32(*ptr_out_mdct, imdct_scale);
283 ptr_out_mdct++;
284 }
285 }
286 }
287
288 else if (1024 == nlong) {
289 expo = ixheaacd_calc_max_spectral_line_dec(out_mdct, 1024) - 1;
290
291 expo = 8 - expo;
292
293 imdct_scale = ixheaacd_inverse_transform(
294 out_mdct, in_data, aac_tables_ptr->pstr_imdct_tables, expo, 1024);
295
296 ixheaacd_post_twiddle_dec(in_data, out_mdct,
297 aac_tables_ptr->pstr_imdct_tables, 1024);
298
299 imdct_scale += 1;
300
301 for (i = 0; i < nlong; i++) {
302 out_mdct[i] = ixheaacd_shl32_dir(in_data[i], imdct_scale);
303 }
304 }
305
306 break;
307
308 case LONG_START_SEQUENCE:
309
310 for (i = 0; i<nlong>> 1; i++)
311 in_data[i] =
312 ixheaacd_mult32x16in32_shl(in_data[i], window_long_prev[2 * i]);
313
314 for (i = 0; i<nlong>> 1; i++)
315 in_data[i + (nlong >> 1)] = ixheaacd_mult32x16in32_shl(
316 in_data[i + (nlong >> 1)], window_long_prev[nlong - 1 - 2 * i - 1]);
317
318 for (i = 0; i<nshort>> 1; i++)
319 in_data[i + nlong + nflat_ls + (nshort >> 1)] =
320 ixheaacd_mult32x16in32_shl(
321 in_data[i + nlong + nflat_ls + (nshort >> 1)],
322 window_short[nshort - 1 - 2 * i - 1]);
323
324 for (i = 0; i < nflat_ls; i++) in_data[i + nlong + nflat_ls + nshort] = 0;
325
326 for (i = 0; i < nlong / 2; i++) {
327 out_mdct[nlong / 2 + i] =
328 ixheaacd_sub32(in_data[i], in_data[nlong - 1 - i]);
329 out_mdct[nlong / 2 - 1 - i] =
330 -ixheaacd_add32(in_data[nlong + i], in_data[nlong2 - 1 - i]);
331 }
332
333 {
334 expo = ixheaacd_calc_max_spectral_line_dec(out_mdct, 1024) - 1;
335
336 expo = 8 - expo;
337 imdct_scale = ixheaacd_inverse_transform(
338 out_mdct, in_data, aac_tables_ptr->pstr_imdct_tables, expo, 1024);
339
340 ixheaacd_post_twiddle_dec(in_data, out_mdct,
341 aac_tables_ptr->pstr_imdct_tables, 1024);
342 }
343
344 imdct_scale += 1;
345
346 for (i = 0; i < nlong; i++) {
347 out_mdct[i] = ixheaacd_shl32_dir(in_data[i], imdct_scale);
348 }
349 break;
350
351 case LONG_STOP_SEQUENCE:
352 for (i = 0; i < nflat_ls; i++) in_data[i] = 0;
353
354 for (i = 0; i<nshort>> 1; i++)
355 in_data[i + nflat_ls] = ixheaacd_mult32x16in32_shl(
356 in_data[i + nflat_ls], window_short_prev[2 * i]);
357
358 for (i = 0; i<nshort>> 1; i++)
359 in_data[i + nflat_ls + (nshort >> 1)] =
360 ixheaacd_mult32x16in32_shl(in_data[i + nflat_ls + (nshort >> 1)],
361 window_short_prev[127 - 2 * i]);
362
363 for (i = 0; i<nlong>> 1; i++)
364 in_data[i + nlong] = ixheaacd_mult32x16in32_shl(in_data[i + nlong],
365 window_long[2 * i + 1]);
366
367 for (i = 0; i<nlong>> 1; i++)
368 in_data[i + nlong + (nlong >> 1)] =
369 ixheaacd_mult32x16in32_shl(in_data[i + nlong + (nlong >> 1)],
370 window_long[nlong - 1 - 2 * i - 1]);
371
372 for (i = 0; i < nlong / 2; i++) {
373 out_mdct[nlong / 2 + i] =
374 ixheaacd_sub32(in_data[i], in_data[nlong - 1 - i]);
375 out_mdct[nlong / 2 - 1 - i] =
376 -ixheaacd_add32(in_data[nlong + i], in_data[nlong2 - 1 - i]);
377 }
378
379 {
380 expo = ixheaacd_calc_max_spectral_line_dec(out_mdct, 1024) - 1;
381
382 expo = 8 - expo;
383 imdct_scale = ixheaacd_inverse_transform(
384 out_mdct, in_data, aac_tables_ptr->pstr_imdct_tables, expo, 1024);
385
386 ixheaacd_post_twiddle_dec(in_data, out_mdct,
387 aac_tables_ptr->pstr_imdct_tables, 1024);
388 }
389
390 imdct_scale += 1;
391
392 for (i = 0; i < nlong; i++) {
393 out_mdct[i] = ixheaacd_shl32_dir(in_data[i], imdct_scale);
394 }
395
396 break;
397 }
398 }
399
ixheaacd_lt_update_state(WORD16 * lt_pred_stat,VOID * time_t,WORD32 * overlap,WORD32 frame_len,WORD32 object_type,WORD32 stride,WORD16 window_sequence,WORD16 * p_window_next,WORD slot_element)400 VOID ixheaacd_lt_update_state(WORD16 *lt_pred_stat, VOID *time_t,
401 WORD32 *overlap, WORD32 frame_len,
402 WORD32 object_type, WORD32 stride,
403 WORD16 window_sequence, WORD16 *p_window_next,
404 WORD slot_element) {
405 WORD32 i;
406
407 if (object_type == AOT_ER_AAC_LD) {
408 WORD16 *ptr_ltp_state0 = <_pred_stat[0];
409 WORD16 *ptr_ltp_state_fl = <_pred_stat[frame_len + 0];
410 WORD16 *ptr_ltp_state_2fl = <_pred_stat[(frame_len * 2) + 0];
411 WORD16 *time = (WORD16 *)time_t - slot_element;
412 WORD16 *ptr_time_in = &time[0 * stride];
413
414 for (i = 0; i < frame_len; i++) {
415 *ptr_ltp_state0++ = *ptr_ltp_state_fl;
416 *ptr_ltp_state_fl++ = *ptr_ltp_state_2fl;
417 *ptr_ltp_state_2fl++ = *ptr_time_in;
418 ptr_time_in += stride;
419 }
420
421 } else {
422 WORD16 *ptr_ltp_state0 = <_pred_stat[0];
423 WORD16 *ptr_ltp_state_fl = <_pred_stat[frame_len + 0];
424 WORD32 *time = (WORD32 *)time_t;
425 WORD32 *ptr_time_in = &time[0 * stride];
426
427 time = (WORD32 *)time_t;
428
429 for (i = 0; i < frame_len; i++) {
430 *ptr_ltp_state0++ = *ptr_ltp_state_fl;
431 *ptr_ltp_state_fl++ =
432 ixheaacd_round16(ixheaacd_shl32_sat(*ptr_time_in, 2));
433 ptr_time_in += stride;
434 }
435 }
436
437 if ((window_sequence == ONLY_LONG_SEQUENCE) ||
438 (window_sequence == LONG_STOP_SEQUENCE)) {
439 if (512 == frame_len) {
440 WORD32 *window = (WORD32 *)p_window_next;
441
442 for (i = 0; i < 256; i++) {
443 lt_pred_stat[(frame_len * 3) + i] =
444 ixheaacd_round16(ixheaacd_mult16x16in32_shl(
445 (WORD16)ixheaacd_shl16(
446 (WORD16)-ixheaacd_sat16(overlap[255 - i]), 1),
447 (WORD16)ixheaacd_shr32(window[511 - i], 15)));
448
449 lt_pred_stat[(frame_len * 3) + 256 + i] =
450 ixheaacd_round16(ixheaacd_mult16x16in32_shl(
451 (WORD16)ixheaacd_shl16((WORD16)-ixheaacd_sat16(overlap[i]), 1),
452 (WORD16)ixheaacd_shr32(window[255 - i], 15)));
453 }
454 } else if (480 == frame_len) {
455 WORD32 *window = (WORD32 *)p_window_next;
456
457 for (i = 0; i < 240; i++) {
458 lt_pred_stat[(frame_len * 3) + i] =
459 ixheaacd_round16(ixheaacd_mult16x16in32_shl(
460 (WORD16)ixheaacd_shl16(
461 (WORD16)-ixheaacd_sat16(overlap[239 - i]), 1),
462 (WORD16)ixheaacd_shr32(window[479 - i], 15)));
463
464 lt_pred_stat[(frame_len * 3) + 240 + i] =
465 ixheaacd_round16(ixheaacd_mult16x16in32_shl(
466 (WORD16)ixheaacd_shl16((WORD16)-ixheaacd_sat16(overlap[i]), 1),
467 (WORD16)ixheaacd_shr32(window[239 - i], 15)));
468 }
469 } else {
470 for (i = 0; i < 512; i++) {
471 lt_pred_stat[(frame_len * 2) + i] = ixheaacd_round16(
472 ixheaacd_shl32_sat(ixheaacd_mult16x16in32_shl(
473 (WORD16)-ixheaacd_sat16(overlap[511 - i]),
474 p_window_next[2 * i + 1]),
475 1));
476
477 lt_pred_stat[(frame_len * 2) + 512 + i] =
478 ixheaacd_round16(ixheaacd_shl32_sat(
479 ixheaacd_mult16x16in32_shl((WORD16)-ixheaacd_sat16(overlap[i]),
480 p_window_next[1023 - 2 * i - 1]),
481 1));
482 }
483 }
484
485 } else if (window_sequence == LONG_START_SEQUENCE) {
486 for (i = 0; i < 448; i++) {
487 lt_pred_stat[(frame_len * 2) + i] =
488 ixheaacd_shl16((WORD16)-ixheaacd_sat16(overlap[511 - i]), 1);
489 }
490 for (i = 0; i < 64; i++) {
491 lt_pred_stat[(frame_len * 2) + 448 + i] =
492 ixheaacd_round16(ixheaacd_shl32_sat(
493 ixheaacd_mult16x16in32_shl(
494 (WORD16)-ixheaacd_sat16(overlap[511 - 448 - i]),
495 p_window_next[2 * i + 1]),
496 1));
497 }
498 for (i = 0; i < 64; i++) {
499 lt_pred_stat[(frame_len * 2) + 512 + i] =
500 ixheaacd_round16(ixheaacd_shl32_sat(
501 ixheaacd_mult16x16in32_shl((WORD16)-ixheaacd_sat16(overlap[i]),
502 p_window_next[127 - 2 * i - 1]),
503 1));
504 }
505 for (i = 576; i < 1024; i++) {
506 lt_pred_stat[(frame_len * 2) + i] = 0;
507 }
508 } else {
509 for (i = 0; i < 448; i++) {
510 lt_pred_stat[(frame_len * 2) + i] =
511 ixheaacd_shl16(ixheaacd_sat16(overlap[i]), 1);
512 }
513 for (i = 0; i < 64; i++) {
514 lt_pred_stat[(frame_len * 2) + 448 + i] = ixheaacd_round16(
515 ixheaacd_shl32_sat(ixheaacd_mult16x16in32_shl(
516 (WORD16)-ixheaacd_sat16(overlap[511 - i]),
517 p_window_next[2 * i + 1]),
518 1));
519 }
520 for (i = 0; i < 64; i++) {
521 lt_pred_stat[(frame_len * 2) + 512 + i] = ixheaacd_round16(
522 ixheaacd_shl32_sat(ixheaacd_mult16x16in32_shl(
523 (WORD16)-ixheaacd_sat16(overlap[448 + i]),
524 p_window_next[127 - 2 * i - 1]),
525 1));
526 }
527 for (i = 576; i < 1024; i++) {
528 lt_pred_stat[(frame_len * 2) + i] = 0;
529 }
530 }
531 }
532