1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker * *
3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker *
5*15dc779aSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker *
9*15dc779aSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker *
11*15dc779aSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker *
17*15dc779aSAndroid Build Coastguard Worker *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker */
20*15dc779aSAndroid Build Coastguard Worker #include <string.h>
21*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_common.h"
22*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
23*15dc779aSAndroid Build Coastguard Worker
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops16.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops_arr.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops.h"
30*15dc779aSAndroid Build Coastguard Worker
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_defines.h"
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_op.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_intrinsics.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_common_rom.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_basic_funcs.h"
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_bitbuffer.h"
37*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecsettings.h"
38*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_defines.h"
39*15dc779aSAndroid Build Coastguard Worker
40*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pns.h"
41*15dc779aSAndroid Build Coastguard Worker
42*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aac_rom.h"
43*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pulsedata.h"
44*15dc779aSAndroid Build Coastguard Worker
45*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_data_struct.h"
46*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lt_predict.h"
47*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_cnst.h"
48*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_defines.h"
49*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_struct_def.h"
50*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_channelinfo.h"
51*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_dec.h"
52*15dc779aSAndroid Build Coastguard Worker
53*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecoder.h"
54*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_scale.h"
55*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lpp_tran.h"
56*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr_part.h"
57*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_rom.h"
58*15dc779aSAndroid Build Coastguard Worker
59*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_hybrid.h"
60*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_dec.h"
61*15dc779aSAndroid Build Coastguard Worker
62*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr.h"
63*15dc779aSAndroid Build Coastguard Worker
64*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_dec.h"
65*15dc779aSAndroid Build Coastguard Worker
66*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_qmf_dec.h"
67*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_calc.h"
68*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_sbr_const.h"
69*15dc779aSAndroid Build Coastguard Worker
70*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pvc_dec.h"
71*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_dec.h"
72*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_function_selector.h"
73*15dc779aSAndroid Build Coastguard Worker
ixheaacd_shl16_saturate(WORD16 op1,WORD16 shift)74*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD16 ixheaacd_shl16_saturate(WORD16 op1,
75*15dc779aSAndroid Build Coastguard Worker WORD16 shift) {
76*15dc779aSAndroid Build Coastguard Worker WORD16 var_out;
77*15dc779aSAndroid Build Coastguard Worker WORD32 temp;
78*15dc779aSAndroid Build Coastguard Worker
79*15dc779aSAndroid Build Coastguard Worker temp = (WORD32)(op1 << shift);
80*15dc779aSAndroid Build Coastguard Worker var_out = ixheaac_sat16(temp);
81*15dc779aSAndroid Build Coastguard Worker return (var_out);
82*15dc779aSAndroid Build Coastguard Worker }
83*15dc779aSAndroid Build Coastguard Worker
ixheaacd_shl16_arr_saturate(WORD16 * word16_arr,WORD16 shift,WORD n)84*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE VOID ixheaacd_shl16_arr_saturate(WORD16 *word16_arr,
85*15dc779aSAndroid Build Coastguard Worker WORD16 shift, WORD n) {
86*15dc779aSAndroid Build Coastguard Worker WORD i;
87*15dc779aSAndroid Build Coastguard Worker
88*15dc779aSAndroid Build Coastguard Worker for (i = n - 1; i >= 0; i--) {
89*15dc779aSAndroid Build Coastguard Worker *word16_arr = ixheaacd_shl16_saturate(*word16_arr, shift);
90*15dc779aSAndroid Build Coastguard Worker word16_arr++;
91*15dc779aSAndroid Build Coastguard Worker }
92*15dc779aSAndroid Build Coastguard Worker
93*15dc779aSAndroid Build Coastguard Worker return;
94*15dc779aSAndroid Build Coastguard Worker }
95*15dc779aSAndroid Build Coastguard Worker
ixheaacd_scale_short_vec_left(WORD16 * word16_arr,WORD32 n,WORD16 shift)96*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_scale_short_vec_left(WORD16 *word16_arr, WORD32 n, WORD16 shift) {
97*15dc779aSAndroid Build Coastguard Worker ixheaacd_shl16_arr_saturate(word16_arr, shift, n);
98*15dc779aSAndroid Build Coastguard Worker }
99*15dc779aSAndroid Build Coastguard Worker
ixheaacd_scale_int_vec_left(WORD32 * word32_arr,WORD32 n,WORD16 shift)100*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_scale_int_vec_left(WORD32 *word32_arr, WORD32 n, WORD16 shift) {
101*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32_arr_sat(word32_arr, shift, n);
102*15dc779aSAndroid Build Coastguard Worker }
103*15dc779aSAndroid Build Coastguard Worker
ixheaacd_scale_int_vec_right(WORD32 * word32_arr,WORD32 n,WORD16 shift)104*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_scale_int_vec_right(WORD32 *word32_arr, WORD32 n, WORD16 shift) {
105*15dc779aSAndroid Build Coastguard Worker ixheaac_shr32_arr(word32_arr, shift, n);
106*15dc779aSAndroid Build Coastguard Worker }
107*15dc779aSAndroid Build Coastguard Worker
ixheaacd_scale_short_vec_right(WORD16 * word16_arr,WORD32 n,WORD16 shift)108*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_scale_short_vec_right(WORD16 *word16_arr, WORD32 n,
109*15dc779aSAndroid Build Coastguard Worker WORD16 shift) {
110*15dc779aSAndroid Build Coastguard Worker ixheaac_shr16_arr(word16_arr, shift, n);
111*15dc779aSAndroid Build Coastguard Worker }
112*15dc779aSAndroid Build Coastguard Worker
ixheaacd_calc_max(WORD16 * array,WORD32 size)113*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_calc_max(WORD16 *array, WORD32 size) {
114*15dc779aSAndroid Build Coastguard Worker WORD n;
115*15dc779aSAndroid Build Coastguard Worker WORD32 max_val = 0;
116*15dc779aSAndroid Build Coastguard Worker WORD16 temp1, temp2;
117*15dc779aSAndroid Build Coastguard Worker
118*15dc779aSAndroid Build Coastguard Worker for (n = size; n != 0; n--) {
119*15dc779aSAndroid Build Coastguard Worker temp1 = *array++;
120*15dc779aSAndroid Build Coastguard Worker temp2 = *array++;
121*15dc779aSAndroid Build Coastguard Worker
122*15dc779aSAndroid Build Coastguard Worker max_val = max_val | ixheaac_abs32_nrm(temp1);
123*15dc779aSAndroid Build Coastguard Worker max_val = max_val | ixheaac_abs32_nrm(temp2);
124*15dc779aSAndroid Build Coastguard Worker }
125*15dc779aSAndroid Build Coastguard Worker
126*15dc779aSAndroid Build Coastguard Worker return max_val;
127*15dc779aSAndroid Build Coastguard Worker }
128*15dc779aSAndroid Build Coastguard Worker
ixheaacd_get_ps_scale(ia_ps_dec_struct * ptr_ps_dec)129*15dc779aSAndroid Build Coastguard Worker static WORD ixheaacd_get_ps_scale(ia_ps_dec_struct *ptr_ps_dec) {
130*15dc779aSAndroid Build Coastguard Worker WORD i, m, n, len;
131*15dc779aSAndroid Build Coastguard Worker WORD32 max_val = 0;
132*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_re;
133*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_re_temp, *ptr_im;
134*15dc779aSAndroid Build Coastguard Worker
135*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < 2; m++) {
136*15dc779aSAndroid Build Coastguard Worker ptr_re = &ptr_ps_dec->delay_buf_qmf_ap_re_im[m][2 * 3];
137*15dc779aSAndroid Build Coastguard Worker max_val |=
138*15dc779aSAndroid Build Coastguard Worker ixheaacd_calc_max(ptr_re, NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS);
139*15dc779aSAndroid Build Coastguard Worker }
140*15dc779aSAndroid Build Coastguard Worker
141*15dc779aSAndroid Build Coastguard Worker ptr_re = (WORD16 *)ptr_ps_dec->delay_buf_qmf_ld_re_im;
142*15dc779aSAndroid Build Coastguard Worker
143*15dc779aSAndroid Build Coastguard Worker max_val |= ixheaacd_calc_max(ptr_re, HIGH_DEL * SMALL_DEL_STRT);
144*15dc779aSAndroid Build Coastguard Worker
145*15dc779aSAndroid Build Coastguard Worker ptr_re = (WORD16 *)ptr_ps_dec->delay_buf_qmf_sd_re_im;
146*15dc779aSAndroid Build Coastguard Worker
147*15dc779aSAndroid Build Coastguard Worker max_val |= ixheaacd_calc_max(
148*15dc779aSAndroid Build Coastguard Worker ptr_re, (SMALL_DEL *
149*15dc779aSAndroid Build Coastguard Worker (NUM_OF_QUAD_MIRROR_FILTER_ICC_CHNLS -
150*15dc779aSAndroid Build Coastguard Worker (NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS + SMALL_DEL_STRT))));
151*15dc779aSAndroid Build Coastguard Worker
152*15dc779aSAndroid Build Coastguard Worker ptr_re = (WORD16 *)ptr_ps_dec->delay_buf_qmf_sub_re_im;
153*15dc779aSAndroid Build Coastguard Worker
154*15dc779aSAndroid Build Coastguard Worker max_val |= ixheaacd_calc_max(ptr_re, 16 * DEL_ALL_PASS);
155*15dc779aSAndroid Build Coastguard Worker
156*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < NUM_SER_AP_LINKS; i++) {
157*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < ptr_ps_dec->delay_sample_ser[i]; m++) {
158*15dc779aSAndroid Build Coastguard Worker ptr_re = &ptr_ps_dec->delay_buf_qmf_ser_re_im[m][i][2 * 3];
159*15dc779aSAndroid Build Coastguard Worker
160*15dc779aSAndroid Build Coastguard Worker max_val |=
161*15dc779aSAndroid Build Coastguard Worker ixheaacd_calc_max(ptr_re, NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS);
162*15dc779aSAndroid Build Coastguard Worker }
163*15dc779aSAndroid Build Coastguard Worker }
164*15dc779aSAndroid Build Coastguard Worker
165*15dc779aSAndroid Build Coastguard Worker ptr_re = (WORD16 *)ptr_ps_dec->delay_buf_qmf_sub_ser_re_im;
166*15dc779aSAndroid Build Coastguard Worker max_val |= ixheaacd_calc_max(ptr_re, NUM_SER_AP_LINKS * 5 * 16);
167*15dc779aSAndroid Build Coastguard Worker
168*15dc779aSAndroid Build Coastguard Worker max_val = max_val << 16;
169*15dc779aSAndroid Build Coastguard Worker
170*15dc779aSAndroid Build Coastguard Worker len = ptr_ps_dec->str_hybrid.ptr_qmf_buf;
171*15dc779aSAndroid Build Coastguard Worker
172*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < NO_QMF_CHANNELS_IN_HYBRID; i++) {
173*15dc779aSAndroid Build Coastguard Worker ptr_re_temp = &ptr_ps_dec->str_hybrid.ptr_qmf_buf_re[i][0];
174*15dc779aSAndroid Build Coastguard Worker ptr_im = &ptr_ps_dec->str_hybrid.ptr_qmf_buf_im[i][0];
175*15dc779aSAndroid Build Coastguard Worker
176*15dc779aSAndroid Build Coastguard Worker for (n = len; n != 0; n--) {
177*15dc779aSAndroid Build Coastguard Worker WORD32 temp3 = *ptr_re_temp++;
178*15dc779aSAndroid Build Coastguard Worker WORD32 temp4 = *ptr_im++;
179*15dc779aSAndroid Build Coastguard Worker
180*15dc779aSAndroid Build Coastguard Worker max_val = max_val | ixheaac_abs32_nrm(temp3);
181*15dc779aSAndroid Build Coastguard Worker max_val = max_val | ixheaac_abs32_nrm(temp4);
182*15dc779aSAndroid Build Coastguard Worker }
183*15dc779aSAndroid Build Coastguard Worker }
184*15dc779aSAndroid Build Coastguard Worker
185*15dc779aSAndroid Build Coastguard Worker return ixheaac_pnorm32(max_val);
186*15dc779aSAndroid Build Coastguard Worker }
187*15dc779aSAndroid Build Coastguard Worker
ixheaacd_init_ps_scale(ia_ps_dec_struct * ptr_ps_dec,ia_sbr_scale_fact_struct * sbr_scale_factor)188*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_init_ps_scale(ia_ps_dec_struct *ptr_ps_dec,
189*15dc779aSAndroid Build Coastguard Worker ia_sbr_scale_fact_struct *sbr_scale_factor)
190*15dc779aSAndroid Build Coastguard Worker
191*15dc779aSAndroid Build Coastguard Worker {
192*15dc779aSAndroid Build Coastguard Worker WORD32 reserve, change;
193*15dc779aSAndroid Build Coastguard Worker WORD16 temp;
194*15dc779aSAndroid Build Coastguard Worker
195*15dc779aSAndroid Build Coastguard Worker reserve = ixheaacd_get_ps_scale(ptr_ps_dec);
196*15dc779aSAndroid Build Coastguard Worker
197*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buffer_scale = (ptr_ps_dec->delay_buffer_scale + reserve);
198*15dc779aSAndroid Build Coastguard Worker temp =
199*15dc779aSAndroid Build Coastguard Worker ixheaac_min16(sbr_scale_factor->lb_scale, sbr_scale_factor->ov_lb_scale);
200*15dc779aSAndroid Build Coastguard Worker temp = ixheaac_min16(temp, sbr_scale_factor->hb_scale);
201*15dc779aSAndroid Build Coastguard Worker temp = ixheaac_min16(temp, ptr_ps_dec->delay_buffer_scale);
202*15dc779aSAndroid Build Coastguard Worker sbr_scale_factor->ps_scale = (temp - 1);
203*15dc779aSAndroid Build Coastguard Worker
204*15dc779aSAndroid Build Coastguard Worker change = (sbr_scale_factor->ps_scale - ptr_ps_dec->delay_buffer_scale);
205*15dc779aSAndroid Build Coastguard Worker change = (change + reserve);
206*15dc779aSAndroid Build Coastguard Worker
207*15dc779aSAndroid Build Coastguard Worker ixheaacd_scale_ps_states(ptr_ps_dec, (WORD16)change);
208*15dc779aSAndroid Build Coastguard Worker
209*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buffer_scale = sbr_scale_factor->ps_scale;
210*15dc779aSAndroid Build Coastguard Worker }
211*15dc779aSAndroid Build Coastguard Worker
ixheaacd_divide16_pos_dec(WORD32 op1,WORD32 op2)212*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_divide16_pos_dec(WORD32 op1, WORD32 op2) {
213*15dc779aSAndroid Build Coastguard Worker UWORD32 v;
214*15dc779aSAndroid Build Coastguard Worker UWORD32 u;
215*15dc779aSAndroid Build Coastguard Worker WORD k, nrm;
216*15dc779aSAndroid Build Coastguard Worker
217*15dc779aSAndroid Build Coastguard Worker nrm = ixheaac_norm32(op2);
218*15dc779aSAndroid Build Coastguard Worker u = (op1 << nrm);
219*15dc779aSAndroid Build Coastguard Worker v = (op2 << nrm);
220*15dc779aSAndroid Build Coastguard Worker u = (u & 0xffff0000);
221*15dc779aSAndroid Build Coastguard Worker v = (v & 0xffff0000);
222*15dc779aSAndroid Build Coastguard Worker
223*15dc779aSAndroid Build Coastguard Worker if (u != 0) {
224*15dc779aSAndroid Build Coastguard Worker for (k = 16; k > 0; k--) {
225*15dc779aSAndroid Build Coastguard Worker if (u >= (UWORD32)v) {
226*15dc779aSAndroid Build Coastguard Worker u = ((u - v) << 1) + 1;
227*15dc779aSAndroid Build Coastguard Worker } else {
228*15dc779aSAndroid Build Coastguard Worker u = (u << 1);
229*15dc779aSAndroid Build Coastguard Worker }
230*15dc779aSAndroid Build Coastguard Worker }
231*15dc779aSAndroid Build Coastguard Worker }
232*15dc779aSAndroid Build Coastguard Worker
233*15dc779aSAndroid Build Coastguard Worker return (u);
234*15dc779aSAndroid Build Coastguard Worker }
235*15dc779aSAndroid Build Coastguard Worker
ixheaacd_decorr_filter1_dec(ia_ps_dec_struct * ptr_ps_dec,ia_ps_tables_struct * ps_tables_ptr,WORD16 * transient_ratio)236*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_decorr_filter1_dec(ia_ps_dec_struct *ptr_ps_dec,
237*15dc779aSAndroid Build Coastguard Worker ia_ps_tables_struct *ps_tables_ptr,
238*15dc779aSAndroid Build Coastguard Worker WORD16 *transient_ratio) {
239*15dc779aSAndroid Build Coastguard Worker WORD sb;
240*15dc779aSAndroid Build Coastguard Worker WORD m;
241*15dc779aSAndroid Build Coastguard Worker
242*15dc779aSAndroid Build Coastguard Worker WORD16 delay_buf_idx;
243*15dc779aSAndroid Build Coastguard Worker WORD16 *p_delay_buf_sub_re_im;
244*15dc779aSAndroid Build Coastguard Worker WORD16 *p_frac_delay_phase_fac_ser_re_im, *p_frac_delay_phase_fac_ser_re_im1;
245*15dc779aSAndroid Build Coastguard Worker
246*15dc779aSAndroid Build Coastguard Worker const WORD16 *p_frac_delay_phase_fac_re_im;
247*15dc779aSAndroid Build Coastguard Worker REVERB_BUFFERS_CH_RI *p_delay_buf_ser_sub_re_im;
248*15dc779aSAndroid Build Coastguard Worker
249*15dc779aSAndroid Build Coastguard Worker WORD32 *p_left_real;
250*15dc779aSAndroid Build Coastguard Worker WORD32 *p_left_imag;
251*15dc779aSAndroid Build Coastguard Worker WORD32 *p_right_real;
252*15dc779aSAndroid Build Coastguard Worker WORD32 *p_right_imag;
253*15dc779aSAndroid Build Coastguard Worker
254*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im =
255*15dc779aSAndroid Build Coastguard Worker &ps_tables_ptr->frac_delay_phase_fac_qmf_sub_re_im[0];
256*15dc779aSAndroid Build Coastguard Worker p_delay_buf_ser_sub_re_im = &ptr_ps_dec->delay_buf_qmf_sub_ser_re_im;
257*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_re_im =
258*15dc779aSAndroid Build Coastguard Worker &ps_tables_ptr->frac_delay_phase_fac_qmf_sub_ser_re_im[0][0];
259*15dc779aSAndroid Build Coastguard Worker
260*15dc779aSAndroid Build Coastguard Worker p_left_real = ptr_ps_dec->ptr_hyb_left_re;
261*15dc779aSAndroid Build Coastguard Worker p_left_imag = ptr_ps_dec->ptr_hyb_left_im;
262*15dc779aSAndroid Build Coastguard Worker p_right_real = ptr_ps_dec->ptr_hyb_right_re;
263*15dc779aSAndroid Build Coastguard Worker p_right_imag = ptr_ps_dec->ptr_hyb_right_im;
264*15dc779aSAndroid Build Coastguard Worker
265*15dc779aSAndroid Build Coastguard Worker delay_buf_idx = ptr_ps_dec->delay_buf_idx;
266*15dc779aSAndroid Build Coastguard Worker p_delay_buf_sub_re_im =
267*15dc779aSAndroid Build Coastguard Worker &ptr_ps_dec->delay_buf_qmf_sub_re_im[delay_buf_idx][0];
268*15dc779aSAndroid Build Coastguard Worker for (sb = 0; sb < SUBQMF_GROUPS; sb++) {
269*15dc779aSAndroid Build Coastguard Worker WORD16 real_tmp, imag_tmp, real_tmp0, imag_tmp0, real_in, imag_in, bin;
270*15dc779aSAndroid Build Coastguard Worker
271*15dc779aSAndroid Build Coastguard Worker real_tmp0 = p_delay_buf_sub_re_im[0];
272*15dc779aSAndroid Build Coastguard Worker imag_tmp0 = p_delay_buf_sub_re_im[1];
273*15dc779aSAndroid Build Coastguard Worker
274*15dc779aSAndroid Build Coastguard Worker real_in = (WORD16)(
275*15dc779aSAndroid Build Coastguard Worker ixheaac_sub32_sat(
276*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(real_tmp0, p_frac_delay_phase_fac_re_im[0]),
277*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(imag_tmp0,
278*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im[1])) >>
279*15dc779aSAndroid Build Coastguard Worker 15);
280*15dc779aSAndroid Build Coastguard Worker imag_in = (WORD16)(
281*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(
282*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(real_tmp0, p_frac_delay_phase_fac_re_im[1]),
283*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(imag_tmp0,
284*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im[0])) >>
285*15dc779aSAndroid Build Coastguard Worker 15);
286*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_sub_re_im++ = ixheaac_round16(p_left_real[sb]);
287*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_sub_re_im++ = ixheaac_round16(p_left_imag[sb]);
288*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im += 2;
289*15dc779aSAndroid Build Coastguard Worker
290*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_re_im1 = p_frac_delay_phase_fac_ser_re_im;
291*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_re_im += 2;
292*15dc779aSAndroid Build Coastguard Worker
293*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < NUM_SER_AP_LINKS; m++) {
294*15dc779aSAndroid Build Coastguard Worker WORD16 decay;
295*15dc779aSAndroid Build Coastguard Worker WORD16 delay_buf_idx_ser;
296*15dc779aSAndroid Build Coastguard Worker delay_buf_idx_ser = ptr_ps_dec->delay_buf_idx_ser[m];
297*15dc779aSAndroid Build Coastguard Worker real_tmp0 = (*p_delay_buf_ser_sub_re_im)[delay_buf_idx_ser][m][2 * sb];
298*15dc779aSAndroid Build Coastguard Worker imag_tmp0 =
299*15dc779aSAndroid Build Coastguard Worker (*p_delay_buf_ser_sub_re_im)[delay_buf_idx_ser][m][2 * sb + 1];
300*15dc779aSAndroid Build Coastguard Worker
301*15dc779aSAndroid Build Coastguard Worker real_tmp =
302*15dc779aSAndroid Build Coastguard Worker (WORD16)(ixheaac_sub32_sat(
303*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
304*15dc779aSAndroid Build Coastguard Worker real_tmp0, p_frac_delay_phase_fac_ser_re_im1[0]),
305*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
306*15dc779aSAndroid Build Coastguard Worker imag_tmp0, p_frac_delay_phase_fac_ser_re_im1[1])) >>
307*15dc779aSAndroid Build Coastguard Worker 15);
308*15dc779aSAndroid Build Coastguard Worker imag_tmp =
309*15dc779aSAndroid Build Coastguard Worker (WORD16)(ixheaac_add32_sat(
310*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
311*15dc779aSAndroid Build Coastguard Worker real_tmp0, p_frac_delay_phase_fac_ser_re_im1[1]),
312*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
313*15dc779aSAndroid Build Coastguard Worker imag_tmp0, p_frac_delay_phase_fac_ser_re_im1[0])) >>
314*15dc779aSAndroid Build Coastguard Worker 15);
315*15dc779aSAndroid Build Coastguard Worker
316*15dc779aSAndroid Build Coastguard Worker decay = ps_tables_ptr->rev_link_decay_ser[m];
317*15dc779aSAndroid Build Coastguard Worker
318*15dc779aSAndroid Build Coastguard Worker real_tmp = ixheaac_sub16(real_tmp, ixheaac_mult16_shl(real_in, decay));
319*15dc779aSAndroid Build Coastguard Worker imag_tmp = ixheaac_sub16(imag_tmp, ixheaac_mult16_shl(imag_in, decay));
320*15dc779aSAndroid Build Coastguard Worker
321*15dc779aSAndroid Build Coastguard Worker (*p_delay_buf_ser_sub_re_im)[delay_buf_idx_ser][m][sb * 2] =
322*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(real_in, ixheaac_mult16_shl(real_tmp, decay));
323*15dc779aSAndroid Build Coastguard Worker (*p_delay_buf_ser_sub_re_im)[delay_buf_idx_ser][m][sb * 2 + 1] =
324*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(imag_in, ixheaac_mult16_shl(imag_tmp, decay));
325*15dc779aSAndroid Build Coastguard Worker
326*15dc779aSAndroid Build Coastguard Worker real_in = real_tmp;
327*15dc779aSAndroid Build Coastguard Worker imag_in = imag_tmp;
328*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_re_im1 += 32;
329*15dc779aSAndroid Build Coastguard Worker }
330*15dc779aSAndroid Build Coastguard Worker
331*15dc779aSAndroid Build Coastguard Worker bin = ps_tables_ptr->hybrid_to_bin[sb];
332*15dc779aSAndroid Build Coastguard Worker p_right_real[sb] =
333*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32_shl(real_in, transient_ratio[bin]);
334*15dc779aSAndroid Build Coastguard Worker p_right_imag[sb] =
335*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32_shl(imag_in, transient_ratio[bin]);
336*15dc779aSAndroid Build Coastguard Worker }
337*15dc779aSAndroid Build Coastguard Worker }
338*15dc779aSAndroid Build Coastguard Worker
ixheaacd_decorr_filter2_dec(ia_ps_dec_struct * ptr_ps_dec,WORD32 * p_buf_left_real,WORD32 * p_buf_left_imag,WORD32 * p_buf_right_real,WORD32 * p_buf_right_imag,ia_ps_tables_struct * ps_tables_ptr,WORD16 * transient_ratio)339*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_decorr_filter2_dec(
340*15dc779aSAndroid Build Coastguard Worker ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_buf_left_real,
341*15dc779aSAndroid Build Coastguard Worker WORD32 *p_buf_left_imag, WORD32 *p_buf_right_real, WORD32 *p_buf_right_imag,
342*15dc779aSAndroid Build Coastguard Worker ia_ps_tables_struct *ps_tables_ptr, WORD16 *transient_ratio) {
343*15dc779aSAndroid Build Coastguard Worker WORD sb, di, sb_delay;
344*15dc779aSAndroid Build Coastguard Worker WORD m, bin;
345*15dc779aSAndroid Build Coastguard Worker WORD32 *p_left_real;
346*15dc779aSAndroid Build Coastguard Worker WORD32 *p_left_imag;
347*15dc779aSAndroid Build Coastguard Worker WORD32 *p_right_real;
348*15dc779aSAndroid Build Coastguard Worker WORD32 *p_right_imag;
349*15dc779aSAndroid Build Coastguard Worker WORD16 delay_buf_idx;
350*15dc779aSAndroid Build Coastguard Worker REVERB_BUFFERS_RI *p_delay_buf_ser_re_im;
351*15dc779aSAndroid Build Coastguard Worker WORD16 *p_delay_buf_ap_re_im;
352*15dc779aSAndroid Build Coastguard Worker const WORD16 *p_frac_delay_phase_fac_re_im;
353*15dc779aSAndroid Build Coastguard Worker WORD16 *p_frac_delay_phase_fac_ser_ap_re_im,
354*15dc779aSAndroid Build Coastguard Worker *p_frac_delay_phase_fac_ser_ap_re_im_temp;
355*15dc779aSAndroid Build Coastguard Worker
356*15dc779aSAndroid Build Coastguard Worker p_left_real = p_buf_left_real;
357*15dc779aSAndroid Build Coastguard Worker p_left_imag = p_buf_left_imag;
358*15dc779aSAndroid Build Coastguard Worker p_right_real = p_buf_right_real;
359*15dc779aSAndroid Build Coastguard Worker p_right_imag = p_buf_right_imag;
360*15dc779aSAndroid Build Coastguard Worker
361*15dc779aSAndroid Build Coastguard Worker p_delay_buf_ser_re_im = &ptr_ps_dec->delay_buf_qmf_ser_re_im;
362*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im = ps_tables_ptr->frac_delay_phase_fac_qmf_re_im;
363*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_ap_re_im =
364*15dc779aSAndroid Build Coastguard Worker &ps_tables_ptr->frac_delay_phase_fac_qmf_ser_re_im[0][0];
365*15dc779aSAndroid Build Coastguard Worker
366*15dc779aSAndroid Build Coastguard Worker delay_buf_idx = ptr_ps_dec->delay_buf_idx;
367*15dc779aSAndroid Build Coastguard Worker
368*15dc779aSAndroid Build Coastguard Worker p_delay_buf_ap_re_im = &ptr_ps_dec->delay_buf_qmf_ap_re_im[delay_buf_idx][0];
369*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im += 6;
370*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_ap_re_im += 6;
371*15dc779aSAndroid Build Coastguard Worker p_delay_buf_ap_re_im += 6;
372*15dc779aSAndroid Build Coastguard Worker
373*15dc779aSAndroid Build Coastguard Worker for (sb = 3, di = 9; sb < 23; sb++) {
374*15dc779aSAndroid Build Coastguard Worker WORD16 real_tmp, imag_tmp, real_tmp0, imag_tmp0, real_in, imag_in;
375*15dc779aSAndroid Build Coastguard Worker
376*15dc779aSAndroid Build Coastguard Worker sb_delay = sb;
377*15dc779aSAndroid Build Coastguard Worker
378*15dc779aSAndroid Build Coastguard Worker real_tmp0 = p_delay_buf_ap_re_im[0];
379*15dc779aSAndroid Build Coastguard Worker imag_tmp0 = p_delay_buf_ap_re_im[1];
380*15dc779aSAndroid Build Coastguard Worker
381*15dc779aSAndroid Build Coastguard Worker real_in = (WORD16)(
382*15dc779aSAndroid Build Coastguard Worker ixheaac_sub32_sat(
383*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(real_tmp0, p_frac_delay_phase_fac_re_im[0]),
384*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(imag_tmp0,
385*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im[1])) >>
386*15dc779aSAndroid Build Coastguard Worker 15);
387*15dc779aSAndroid Build Coastguard Worker imag_in = (WORD16)(
388*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(
389*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(real_tmp0, p_frac_delay_phase_fac_re_im[1]),
390*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(imag_tmp0,
391*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im[0])) >>
392*15dc779aSAndroid Build Coastguard Worker 15);
393*15dc779aSAndroid Build Coastguard Worker
394*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_ap_re_im++ = ixheaac_round16(p_left_real[sb]);
395*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_ap_re_im++ = ixheaac_round16(p_left_imag[sb]);
396*15dc779aSAndroid Build Coastguard Worker
397*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_re_im += 2;
398*15dc779aSAndroid Build Coastguard Worker
399*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_ap_re_im_temp =
400*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_ap_re_im;
401*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_ap_re_im += 2;
402*15dc779aSAndroid Build Coastguard Worker
403*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < NUM_SER_AP_LINKS; m++, di++) {
404*15dc779aSAndroid Build Coastguard Worker WORD16 decay;
405*15dc779aSAndroid Build Coastguard Worker WORD16 delay_buf_idx_ser;
406*15dc779aSAndroid Build Coastguard Worker delay_buf_idx_ser = ptr_ps_dec->delay_buf_idx_ser[m];
407*15dc779aSAndroid Build Coastguard Worker
408*15dc779aSAndroid Build Coastguard Worker real_tmp0 = (*p_delay_buf_ser_re_im)[delay_buf_idx_ser][m][sb_delay * 2];
409*15dc779aSAndroid Build Coastguard Worker imag_tmp0 =
410*15dc779aSAndroid Build Coastguard Worker (*p_delay_buf_ser_re_im)[delay_buf_idx_ser][m][sb_delay * 2 + 1];
411*15dc779aSAndroid Build Coastguard Worker
412*15dc779aSAndroid Build Coastguard Worker real_tmp = (WORD16)(
413*15dc779aSAndroid Build Coastguard Worker ixheaac_sub32_sat(
414*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
415*15dc779aSAndroid Build Coastguard Worker real_tmp0, p_frac_delay_phase_fac_ser_ap_re_im_temp[0]),
416*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
417*15dc779aSAndroid Build Coastguard Worker imag_tmp0, p_frac_delay_phase_fac_ser_ap_re_im_temp[1])) >>
418*15dc779aSAndroid Build Coastguard Worker 15);
419*15dc779aSAndroid Build Coastguard Worker imag_tmp = (WORD16)(
420*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(
421*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
422*15dc779aSAndroid Build Coastguard Worker real_tmp0, p_frac_delay_phase_fac_ser_ap_re_im_temp[1]),
423*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32(
424*15dc779aSAndroid Build Coastguard Worker imag_tmp0, p_frac_delay_phase_fac_ser_ap_re_im_temp[0])) >>
425*15dc779aSAndroid Build Coastguard Worker 15);
426*15dc779aSAndroid Build Coastguard Worker
427*15dc779aSAndroid Build Coastguard Worker decay = ps_tables_ptr->decay_scale_factor[di];
428*15dc779aSAndroid Build Coastguard Worker
429*15dc779aSAndroid Build Coastguard Worker real_tmp = ixheaac_sub16(real_tmp, ixheaac_mult16_shl(real_in, decay));
430*15dc779aSAndroid Build Coastguard Worker imag_tmp = ixheaac_sub16(imag_tmp, ixheaac_mult16_shl(imag_in, decay));
431*15dc779aSAndroid Build Coastguard Worker
432*15dc779aSAndroid Build Coastguard Worker (*p_delay_buf_ser_re_im)[delay_buf_idx_ser][m][sb_delay * 2] =
433*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(real_in, ixheaac_mult16_shl(real_tmp, decay));
434*15dc779aSAndroid Build Coastguard Worker (*p_delay_buf_ser_re_im)[delay_buf_idx_ser][m][sb_delay * 2 + 1] =
435*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(imag_in, ixheaac_mult16_shl(imag_tmp, decay));
436*15dc779aSAndroid Build Coastguard Worker
437*15dc779aSAndroid Build Coastguard Worker real_in = real_tmp;
438*15dc779aSAndroid Build Coastguard Worker imag_in = imag_tmp;
439*15dc779aSAndroid Build Coastguard Worker p_frac_delay_phase_fac_ser_ap_re_im_temp += 64;
440*15dc779aSAndroid Build Coastguard Worker }
441*15dc779aSAndroid Build Coastguard Worker
442*15dc779aSAndroid Build Coastguard Worker bin = ps_tables_ptr->delay_to_bin[sb_delay];
443*15dc779aSAndroid Build Coastguard Worker p_right_real[sb] =
444*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32_shl(real_in, transient_ratio[bin]);
445*15dc779aSAndroid Build Coastguard Worker p_right_imag[sb] =
446*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32_shl(imag_in, transient_ratio[bin]);
447*15dc779aSAndroid Build Coastguard Worker }
448*15dc779aSAndroid Build Coastguard Worker }
449*15dc779aSAndroid Build Coastguard Worker
ixheaacd_decorrelation_dec(ia_ps_dec_struct * ptr_ps_dec,WORD32 * p_buf_left_real,WORD32 * p_buf_left_imag,WORD32 * p_buf_right_real,WORD32 * p_buf_right_imag,ia_ps_tables_struct * ps_tables_ptr)450*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_decorrelation_dec(ia_ps_dec_struct *ptr_ps_dec,
451*15dc779aSAndroid Build Coastguard Worker WORD32 *p_buf_left_real,
452*15dc779aSAndroid Build Coastguard Worker WORD32 *p_buf_left_imag,
453*15dc779aSAndroid Build Coastguard Worker WORD32 *p_buf_right_real,
454*15dc779aSAndroid Build Coastguard Worker WORD32 *p_buf_right_imag,
455*15dc779aSAndroid Build Coastguard Worker ia_ps_tables_struct *ps_tables_ptr) {
456*15dc779aSAndroid Build Coastguard Worker WORD sb;
457*15dc779aSAndroid Build Coastguard Worker
458*15dc779aSAndroid Build Coastguard Worker WORD gr, bin, sband, maxsband;
459*15dc779aSAndroid Build Coastguard Worker
460*15dc779aSAndroid Build Coastguard Worker WORD32 peak_diff, nrg;
461*15dc779aSAndroid Build Coastguard Worker WORD32 power_buf[NUM_OF_BINS];
462*15dc779aSAndroid Build Coastguard Worker WORD16 transient_ratio[NUM_OF_BINS + 1];
463*15dc779aSAndroid Build Coastguard Worker
464*15dc779aSAndroid Build Coastguard Worker WORD32 *p_left_real;
465*15dc779aSAndroid Build Coastguard Worker WORD32 *p_left_imag;
466*15dc779aSAndroid Build Coastguard Worker WORD32 *p_right_real;
467*15dc779aSAndroid Build Coastguard Worker WORD32 *p_right_imag;
468*15dc779aSAndroid Build Coastguard Worker
469*15dc779aSAndroid Build Coastguard Worker WORD16 *p_delay_buf_re_im_ld;
470*15dc779aSAndroid Build Coastguard Worker WORD16 *p_delay_buf_re_im_sd;
471*15dc779aSAndroid Build Coastguard Worker
472*15dc779aSAndroid Build Coastguard Worker WORD usb = ptr_ps_dec->usb;
473*15dc779aSAndroid Build Coastguard Worker WORD16 delay_buf_idx;
474*15dc779aSAndroid Build Coastguard Worker
475*15dc779aSAndroid Build Coastguard Worker p_left_real = ptr_ps_dec->ptr_hyb_left_re;
476*15dc779aSAndroid Build Coastguard Worker p_left_imag = ptr_ps_dec->ptr_hyb_left_im;
477*15dc779aSAndroid Build Coastguard Worker p_right_real = ptr_ps_dec->ptr_hyb_right_re;
478*15dc779aSAndroid Build Coastguard Worker p_right_imag = ptr_ps_dec->ptr_hyb_right_im;
479*15dc779aSAndroid Build Coastguard Worker
480*15dc779aSAndroid Build Coastguard Worker {
481*15dc779aSAndroid Build Coastguard Worker WORD32 re0, im0, re1, im1;
482*15dc779aSAndroid Build Coastguard Worker
483*15dc779aSAndroid Build Coastguard Worker re0 = (p_left_real[0]);
484*15dc779aSAndroid Build Coastguard Worker im0 = (p_left_imag[0]);
485*15dc779aSAndroid Build Coastguard Worker re1 = (p_left_real[5]);
486*15dc779aSAndroid Build Coastguard Worker im1 = (p_left_imag[5]);
487*15dc779aSAndroid Build Coastguard Worker
488*15dc779aSAndroid Build Coastguard Worker power_buf[0] = ixheaac_mult32x16in32(re0, (WORD16)(re0 >> 16));
489*15dc779aSAndroid Build Coastguard Worker power_buf[0] = ixheaac_add32_sat(
490*15dc779aSAndroid Build Coastguard Worker power_buf[0], ixheaac_mult32x16in32(im0, (WORD16)(im0 >> 16)));
491*15dc779aSAndroid Build Coastguard Worker power_buf[0] = ixheaac_add32_sat(
492*15dc779aSAndroid Build Coastguard Worker power_buf[0], ixheaac_mult32x16in32(re1, (WORD16)(re1 >> 16)));
493*15dc779aSAndroid Build Coastguard Worker power_buf[0] = ixheaac_add32_sat(
494*15dc779aSAndroid Build Coastguard Worker power_buf[0], ixheaac_mult32x16in32(im1, (WORD16)(im1 >> 16)));
495*15dc779aSAndroid Build Coastguard Worker
496*15dc779aSAndroid Build Coastguard Worker re0 = (p_left_real[4]);
497*15dc779aSAndroid Build Coastguard Worker im0 = (p_left_imag[4]);
498*15dc779aSAndroid Build Coastguard Worker re1 = (p_left_real[1]);
499*15dc779aSAndroid Build Coastguard Worker im1 = (p_left_imag[1]);
500*15dc779aSAndroid Build Coastguard Worker
501*15dc779aSAndroid Build Coastguard Worker power_buf[1] = ixheaac_mult32x16in32(re0, (WORD16)(re0 >> 16));
502*15dc779aSAndroid Build Coastguard Worker power_buf[1] = ixheaac_add32_sat(
503*15dc779aSAndroid Build Coastguard Worker power_buf[1], ixheaac_mult32x16in32(im0, (WORD16)(im0 >> 16)));
504*15dc779aSAndroid Build Coastguard Worker power_buf[1] = ixheaac_add32_sat(
505*15dc779aSAndroid Build Coastguard Worker power_buf[1], ixheaac_mult32x16in32(re1, (WORD16)(re1 >> 16)));
506*15dc779aSAndroid Build Coastguard Worker power_buf[1] = ixheaac_add32_sat(
507*15dc779aSAndroid Build Coastguard Worker power_buf[1], ixheaac_mult32x16in32(im1, (WORD16)(im1 >> 16)));
508*15dc779aSAndroid Build Coastguard Worker }
509*15dc779aSAndroid Build Coastguard Worker
510*15dc779aSAndroid Build Coastguard Worker bin = 4 - 2;
511*15dc779aSAndroid Build Coastguard Worker for (gr = 4; gr < SUBQMF_GROUPS; gr++) {
512*15dc779aSAndroid Build Coastguard Worker WORD32 re, im;
513*15dc779aSAndroid Build Coastguard Worker sb = ps_tables_ptr->borders_group[gr];
514*15dc779aSAndroid Build Coastguard Worker re = (p_left_real[sb]);
515*15dc779aSAndroid Build Coastguard Worker im = (p_left_imag[sb]);
516*15dc779aSAndroid Build Coastguard Worker power_buf[bin] = ixheaac_mult32x16in32(re, (WORD16)(re >> 16));
517*15dc779aSAndroid Build Coastguard Worker power_buf[bin] = ixheaac_add32_sat(
518*15dc779aSAndroid Build Coastguard Worker power_buf[bin], ixheaac_mult32x16in32(im, (WORD16)(im >> 16)));
519*15dc779aSAndroid Build Coastguard Worker bin++;
520*15dc779aSAndroid Build Coastguard Worker }
521*15dc779aSAndroid Build Coastguard Worker
522*15dc779aSAndroid Build Coastguard Worker p_left_real = p_buf_left_real;
523*15dc779aSAndroid Build Coastguard Worker p_left_imag = p_buf_left_imag;
524*15dc779aSAndroid Build Coastguard Worker
525*15dc779aSAndroid Build Coastguard Worker bin = NO_QMF_CHANNELS_IN_HYBRID + 5;
526*15dc779aSAndroid Build Coastguard Worker for (sband = NO_QMF_CHANNELS_IN_HYBRID; sband < NO_QMF_CHANNELS_IN_HYBRID + 6;
527*15dc779aSAndroid Build Coastguard Worker sband++) {
528*15dc779aSAndroid Build Coastguard Worker WORD32 re = (p_left_real[sband]);
529*15dc779aSAndroid Build Coastguard Worker WORD32 im = (p_left_imag[sband]);
530*15dc779aSAndroid Build Coastguard Worker power_buf[bin] = ixheaac_mult32x16in32(re, (WORD16)(re >> 16));
531*15dc779aSAndroid Build Coastguard Worker power_buf[bin] = ixheaac_add32_sat(
532*15dc779aSAndroid Build Coastguard Worker power_buf[bin], ixheaac_mult32x16in32(im, (WORD16)(im >> 16)));
533*15dc779aSAndroid Build Coastguard Worker bin++;
534*15dc779aSAndroid Build Coastguard Worker }
535*15dc779aSAndroid Build Coastguard Worker
536*15dc779aSAndroid Build Coastguard Worker bin = 16 - 2;
537*15dc779aSAndroid Build Coastguard Worker for (gr = 16; gr < NO_IID_GROUPS; gr++) {
538*15dc779aSAndroid Build Coastguard Worker WORD32 accu = 0, tmp;
539*15dc779aSAndroid Build Coastguard Worker WORD32 re, im;
540*15dc779aSAndroid Build Coastguard Worker
541*15dc779aSAndroid Build Coastguard Worker maxsband = ixheaac_min32(usb, ps_tables_ptr->borders_group[gr + 1]);
542*15dc779aSAndroid Build Coastguard Worker
543*15dc779aSAndroid Build Coastguard Worker for (sband = ps_tables_ptr->borders_group[gr]; sband < maxsband; sband++) {
544*15dc779aSAndroid Build Coastguard Worker re = (p_left_real[sband]);
545*15dc779aSAndroid Build Coastguard Worker im = (p_left_imag[sband]);
546*15dc779aSAndroid Build Coastguard Worker
547*15dc779aSAndroid Build Coastguard Worker tmp = ixheaac_mult32x16in32(re, (WORD16)(re >> 16));
548*15dc779aSAndroid Build Coastguard Worker tmp = ixheaac_add32_sat(tmp,
549*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(im, (WORD16)(im >> 16)));
550*15dc779aSAndroid Build Coastguard Worker tmp = (tmp >> ps_tables_ptr->group_shift[gr - (SUBQMF_GROUPS + 6)]);
551*15dc779aSAndroid Build Coastguard Worker
552*15dc779aSAndroid Build Coastguard Worker accu = ixheaac_add32_sat(accu, tmp);
553*15dc779aSAndroid Build Coastguard Worker }
554*15dc779aSAndroid Build Coastguard Worker power_buf[bin] = accu;
555*15dc779aSAndroid Build Coastguard Worker bin++;
556*15dc779aSAndroid Build Coastguard Worker }
557*15dc779aSAndroid Build Coastguard Worker
558*15dc779aSAndroid Build Coastguard Worker p_left_real = ptr_ps_dec->ptr_hyb_left_re;
559*15dc779aSAndroid Build Coastguard Worker p_left_imag = ptr_ps_dec->ptr_hyb_left_im;
560*15dc779aSAndroid Build Coastguard Worker
561*15dc779aSAndroid Build Coastguard Worker for (bin = 0; bin < NUM_OF_BINS; bin++) {
562*15dc779aSAndroid Build Coastguard Worker power_buf[bin] = ixheaac_shl32(power_buf[bin], 1);
563*15dc779aSAndroid Build Coastguard Worker
564*15dc779aSAndroid Build Coastguard Worker power_buf[bin] = ixheaac_max32(0, power_buf[bin]);
565*15dc779aSAndroid Build Coastguard Worker
566*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->peak_decay_diff[bin] = ixheaac_mult32x16in32_shl(
567*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->peak_decay_diff[bin], PEAK_DECAYING_FACT);
568*15dc779aSAndroid Build Coastguard Worker
569*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->peak_decay_diff[bin] =
570*15dc779aSAndroid Build Coastguard Worker ixheaac_max32(ptr_ps_dec->peak_decay_diff[bin], power_buf[bin]);
571*15dc779aSAndroid Build Coastguard Worker
572*15dc779aSAndroid Build Coastguard Worker peak_diff = ixheaac_add32_sat(
573*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(ptr_ps_dec->peak_decay_diff_prev[bin],
574*15dc779aSAndroid Build Coastguard Worker 0x6000),
575*15dc779aSAndroid Build Coastguard Worker ((ixheaac_sub32_sat(ptr_ps_dec->peak_decay_diff[bin],
576*15dc779aSAndroid Build Coastguard Worker power_buf[bin]) >>
577*15dc779aSAndroid Build Coastguard Worker 2)));
578*15dc779aSAndroid Build Coastguard Worker
579*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->peak_decay_diff_prev[bin] = peak_diff;
580*15dc779aSAndroid Build Coastguard Worker
581*15dc779aSAndroid Build Coastguard Worker nrg = ixheaac_add32_sat(
582*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(ptr_ps_dec->energy_prev[bin], 0x6000),
583*15dc779aSAndroid Build Coastguard Worker (power_buf[bin] >> 2));
584*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->energy_prev[bin] = nrg;
585*15dc779aSAndroid Build Coastguard Worker
586*15dc779aSAndroid Build Coastguard Worker peak_diff = ixheaac_add32_sat(peak_diff, (peak_diff >> 1));
587*15dc779aSAndroid Build Coastguard Worker
588*15dc779aSAndroid Build Coastguard Worker if (peak_diff <= nrg) {
589*15dc779aSAndroid Build Coastguard Worker transient_ratio[bin] = 0x7fff;
590*15dc779aSAndroid Build Coastguard Worker } else {
591*15dc779aSAndroid Build Coastguard Worker transient_ratio[bin] =
592*15dc779aSAndroid Build Coastguard Worker ixheaac_extract16l((*ixheaacd_divide16_pos)(nrg, peak_diff));
593*15dc779aSAndroid Build Coastguard Worker }
594*15dc779aSAndroid Build Coastguard Worker }
595*15dc779aSAndroid Build Coastguard Worker
596*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_decorr_filter1)(ptr_ps_dec, ps_tables_ptr, transient_ratio);
597*15dc779aSAndroid Build Coastguard Worker
598*15dc779aSAndroid Build Coastguard Worker transient_ratio[20] = 0;
599*15dc779aSAndroid Build Coastguard Worker
600*15dc779aSAndroid Build Coastguard Worker (*ixheaacd_decorr_filter2)(ptr_ps_dec, p_buf_left_real, p_buf_left_imag,
601*15dc779aSAndroid Build Coastguard Worker p_buf_right_real, p_buf_right_imag, ps_tables_ptr,
602*15dc779aSAndroid Build Coastguard Worker transient_ratio);
603*15dc779aSAndroid Build Coastguard Worker
604*15dc779aSAndroid Build Coastguard Worker {
605*15dc779aSAndroid Build Coastguard Worker WORD16 trans_ratio = transient_ratio[18];
606*15dc779aSAndroid Build Coastguard Worker
607*15dc779aSAndroid Build Coastguard Worker p_left_real = p_buf_left_real;
608*15dc779aSAndroid Build Coastguard Worker p_left_imag = p_buf_left_imag;
609*15dc779aSAndroid Build Coastguard Worker p_right_real = p_buf_right_real;
610*15dc779aSAndroid Build Coastguard Worker p_right_imag = p_buf_right_imag;
611*15dc779aSAndroid Build Coastguard Worker
612*15dc779aSAndroid Build Coastguard Worker maxsband = ixheaac_min32((WORD16)usb, ps_tables_ptr->borders_group[21]);
613*15dc779aSAndroid Build Coastguard Worker delay_buf_idx = ptr_ps_dec->delay_buf_idx_long;
614*15dc779aSAndroid Build Coastguard Worker p_delay_buf_re_im_ld =
615*15dc779aSAndroid Build Coastguard Worker &ptr_ps_dec->delay_buf_qmf_ld_re_im[delay_buf_idx][0];
616*15dc779aSAndroid Build Coastguard Worker
617*15dc779aSAndroid Build Coastguard Worker for (sband = ps_tables_ptr->borders_group[20]; sband < maxsband; sband++) {
618*15dc779aSAndroid Build Coastguard Worker WORD16 real_in, imag_in;
619*15dc779aSAndroid Build Coastguard Worker
620*15dc779aSAndroid Build Coastguard Worker real_in = p_delay_buf_re_im_ld[0];
621*15dc779aSAndroid Build Coastguard Worker imag_in = p_delay_buf_re_im_ld[1];
622*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_re_im_ld++ = ixheaac_round16(p_left_real[sband]);
623*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_re_im_ld++ = ixheaac_round16(p_left_imag[sband]);
624*15dc779aSAndroid Build Coastguard Worker
625*15dc779aSAndroid Build Coastguard Worker p_right_real[sband] = ixheaac_mult16x16in32_shl(real_in, trans_ratio);
626*15dc779aSAndroid Build Coastguard Worker p_right_imag[sband] = ixheaac_mult16x16in32_shl(imag_in, trans_ratio);
627*15dc779aSAndroid Build Coastguard Worker }
628*15dc779aSAndroid Build Coastguard Worker
629*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buf_idx_long =
630*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(ptr_ps_dec->delay_buf_idx_long, 1);
631*15dc779aSAndroid Build Coastguard Worker
632*15dc779aSAndroid Build Coastguard Worker if (ptr_ps_dec->delay_buf_idx_long >= 14) {
633*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buf_idx_long = 0;
634*15dc779aSAndroid Build Coastguard Worker }
635*15dc779aSAndroid Build Coastguard Worker
636*15dc779aSAndroid Build Coastguard Worker p_delay_buf_re_im_sd = &ptr_ps_dec->delay_buf_qmf_sd_re_im[0][0];
637*15dc779aSAndroid Build Coastguard Worker
638*15dc779aSAndroid Build Coastguard Worker trans_ratio = transient_ratio[19];
639*15dc779aSAndroid Build Coastguard Worker maxsband = ixheaac_min32((WORD16)usb, ps_tables_ptr->borders_group[22]);
640*15dc779aSAndroid Build Coastguard Worker for (sband = ps_tables_ptr->borders_group[21]; sband < maxsband; sband++) {
641*15dc779aSAndroid Build Coastguard Worker WORD16 real_in, imag_in;
642*15dc779aSAndroid Build Coastguard Worker
643*15dc779aSAndroid Build Coastguard Worker real_in = p_delay_buf_re_im_sd[0];
644*15dc779aSAndroid Build Coastguard Worker imag_in = p_delay_buf_re_im_sd[1];
645*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_re_im_sd++ = ixheaac_round16(p_left_real[sband]);
646*15dc779aSAndroid Build Coastguard Worker *p_delay_buf_re_im_sd++ = ixheaac_round16(p_left_imag[sband]);
647*15dc779aSAndroid Build Coastguard Worker
648*15dc779aSAndroid Build Coastguard Worker p_right_real[sband] = ixheaac_mult16x16in32_shl(real_in, trans_ratio);
649*15dc779aSAndroid Build Coastguard Worker p_right_imag[sband] = ixheaac_mult16x16in32_shl(imag_in, trans_ratio);
650*15dc779aSAndroid Build Coastguard Worker }
651*15dc779aSAndroid Build Coastguard Worker }
652*15dc779aSAndroid Build Coastguard Worker
653*15dc779aSAndroid Build Coastguard Worker for (sband = usb; sband < NO_SYNTHESIS_CHANNELS; sband++) {
654*15dc779aSAndroid Build Coastguard Worker p_right_real[sband] = 0;
655*15dc779aSAndroid Build Coastguard Worker p_right_imag[sband] = 0;
656*15dc779aSAndroid Build Coastguard Worker }
657*15dc779aSAndroid Build Coastguard Worker
658*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buf_idx = (WORD16)(ptr_ps_dec->delay_buf_idx + 1);
659*15dc779aSAndroid Build Coastguard Worker if (ptr_ps_dec->delay_buf_idx >= DEL_ALL_PASS) {
660*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buf_idx = 0;
661*15dc779aSAndroid Build Coastguard Worker }
662*15dc779aSAndroid Build Coastguard Worker
663*15dc779aSAndroid Build Coastguard Worker {
664*15dc779aSAndroid Build Coastguard Worker WORD delay_m;
665*15dc779aSAndroid Build Coastguard Worker
666*15dc779aSAndroid Build Coastguard Worker for (delay_m = 0; delay_m < NUM_SER_AP_LINKS; delay_m++) {
667*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buf_idx_ser[delay_m] =
668*15dc779aSAndroid Build Coastguard Worker (ptr_ps_dec->delay_buf_idx_ser[delay_m] + 1);
669*15dc779aSAndroid Build Coastguard Worker if (ptr_ps_dec->delay_buf_idx_ser[delay_m] >=
670*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_sample_ser[delay_m]) {
671*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delay_buf_idx_ser[delay_m] = 0;
672*15dc779aSAndroid Build Coastguard Worker }
673*15dc779aSAndroid Build Coastguard Worker }
674*15dc779aSAndroid Build Coastguard Worker }
675*15dc779aSAndroid Build Coastguard Worker }
676*15dc779aSAndroid Build Coastguard Worker
ixheaacd_cos512(WORD phi_by_4,const WORD16 * cos_sin_lookup_tab)677*15dc779aSAndroid Build Coastguard Worker static WORD16 ixheaacd_cos512(WORD phi_by_4, const WORD16 *cos_sin_lookup_tab) {
678*15dc779aSAndroid Build Coastguard Worker WORD index;
679*15dc779aSAndroid Build Coastguard Worker index = ixheaac_round16(ixheaac_abs32_sat(phi_by_4));
680*15dc779aSAndroid Build Coastguard Worker
681*15dc779aSAndroid Build Coastguard Worker index = (index & 0x3FF);
682*15dc779aSAndroid Build Coastguard Worker
683*15dc779aSAndroid Build Coastguard Worker if (index < 512) {
684*15dc779aSAndroid Build Coastguard Worker return cos_sin_lookup_tab[512 - index];
685*15dc779aSAndroid Build Coastguard Worker } else {
686*15dc779aSAndroid Build Coastguard Worker return (WORD16)(-(cos_sin_lookup_tab[index - 512]));
687*15dc779aSAndroid Build Coastguard Worker }
688*15dc779aSAndroid Build Coastguard Worker }
689*15dc779aSAndroid Build Coastguard Worker
ixheaacd_sin512(WORD phi_by_4,const WORD16 * cos_sin_lookup_tab)690*15dc779aSAndroid Build Coastguard Worker static WORD16 ixheaacd_sin512(WORD phi_by_4, const WORD16 *cos_sin_lookup_tab) {
691*15dc779aSAndroid Build Coastguard Worker WORD index;
692*15dc779aSAndroid Build Coastguard Worker
693*15dc779aSAndroid Build Coastguard Worker index = ixheaac_round16(phi_by_4);
694*15dc779aSAndroid Build Coastguard Worker
695*15dc779aSAndroid Build Coastguard Worker if (index < 0) {
696*15dc779aSAndroid Build Coastguard Worker index = (-(index)&0x3FF);
697*15dc779aSAndroid Build Coastguard Worker
698*15dc779aSAndroid Build Coastguard Worker if (index < 512) {
699*15dc779aSAndroid Build Coastguard Worker return (WORD16)(-cos_sin_lookup_tab[index]);
700*15dc779aSAndroid Build Coastguard Worker } else {
701*15dc779aSAndroid Build Coastguard Worker return (WORD16)(-cos_sin_lookup_tab[1024 - index]);
702*15dc779aSAndroid Build Coastguard Worker }
703*15dc779aSAndroid Build Coastguard Worker } else {
704*15dc779aSAndroid Build Coastguard Worker index = (index & 0x3FF);
705*15dc779aSAndroid Build Coastguard Worker
706*15dc779aSAndroid Build Coastguard Worker if (index < 512) {
707*15dc779aSAndroid Build Coastguard Worker return cos_sin_lookup_tab[index];
708*15dc779aSAndroid Build Coastguard Worker } else {
709*15dc779aSAndroid Build Coastguard Worker return cos_sin_lookup_tab[1024 - index];
710*15dc779aSAndroid Build Coastguard Worker }
711*15dc779aSAndroid Build Coastguard Worker }
712*15dc779aSAndroid Build Coastguard Worker }
713*15dc779aSAndroid Build Coastguard Worker
ixheaacd_init_rot_env(ia_ps_dec_struct * ptr_ps_dec,WORD16 env,WORD16 usb,ia_sbr_tables_struct * sbr_tables_ptr,const WORD16 * cos_sin_lookup_tab)714*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_init_rot_env(ia_ps_dec_struct *ptr_ps_dec, WORD16 env, WORD16 usb,
715*15dc779aSAndroid Build Coastguard Worker ia_sbr_tables_struct *sbr_tables_ptr,
716*15dc779aSAndroid Build Coastguard Worker const WORD16 *cos_sin_lookup_tab) {
717*15dc779aSAndroid Build Coastguard Worker WORD group, bin, num_iid_steps;
718*15dc779aSAndroid Build Coastguard Worker WORD16 c2, c1;
719*15dc779aSAndroid Build Coastguard Worker WORD32 alpha, beta;
720*15dc779aSAndroid Build Coastguard Worker WORD16 h11, h12, h21, h22;
721*15dc779aSAndroid Build Coastguard Worker WORD16 inv_env_len;
722*15dc779aSAndroid Build Coastguard Worker const WORD16 *p_scale_factors;
723*15dc779aSAndroid Build Coastguard Worker WORD16 *p_iid_idx;
724*15dc779aSAndroid Build Coastguard Worker WORD indexplusa, indexminusa;
725*15dc779aSAndroid Build Coastguard Worker
726*15dc779aSAndroid Build Coastguard Worker const WORD32 rescale = (0x0517cc1b << 1);
727*15dc779aSAndroid Build Coastguard Worker
728*15dc779aSAndroid Build Coastguard Worker if (env == 0) {
729*15dc779aSAndroid Build Coastguard Worker WORD usb_prev = ptr_ps_dec->usb;
730*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_tmp;
731*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->usb = usb;
732*15dc779aSAndroid Build Coastguard Worker
733*15dc779aSAndroid Build Coastguard Worker if ((usb > usb_prev) && usb_prev) {
734*15dc779aSAndroid Build Coastguard Worker WORD i, j, delay, offset1;
735*15dc779aSAndroid Build Coastguard Worker WORD ixheaacd_drc_offset =
736*15dc779aSAndroid Build Coastguard Worker (usb < NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS
737*15dc779aSAndroid Build Coastguard Worker ? usb
738*15dc779aSAndroid Build Coastguard Worker : NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS);
739*15dc779aSAndroid Build Coastguard Worker
740*15dc779aSAndroid Build Coastguard Worker if (ixheaacd_drc_offset > usb_prev) {
741*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < NUM_SER_AP_LINKS; i++) {
742*15dc779aSAndroid Build Coastguard Worker for (j = 0; j < ptr_ps_dec->delay_sample_ser[i]; j++) {
743*15dc779aSAndroid Build Coastguard Worker ptr_tmp = &ptr_ps_dec->delay_buf_qmf_ser_re_im[j][i][usb_prev * 2];
744*15dc779aSAndroid Build Coastguard Worker
745*15dc779aSAndroid Build Coastguard Worker memset(ptr_tmp, 0,
746*15dc779aSAndroid Build Coastguard Worker sizeof(WORD16) * (ixheaacd_drc_offset - usb_prev) * 2);
747*15dc779aSAndroid Build Coastguard Worker }
748*15dc779aSAndroid Build Coastguard Worker }
749*15dc779aSAndroid Build Coastguard Worker }
750*15dc779aSAndroid Build Coastguard Worker
751*15dc779aSAndroid Build Coastguard Worker offset1 =
752*15dc779aSAndroid Build Coastguard Worker (usb < (NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS + SMALL_DEL_STRT)
753*15dc779aSAndroid Build Coastguard Worker ? usb
754*15dc779aSAndroid Build Coastguard Worker : (NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS + SMALL_DEL_STRT));
755*15dc779aSAndroid Build Coastguard Worker delay = HIGH_DEL;
756*15dc779aSAndroid Build Coastguard Worker
757*15dc779aSAndroid Build Coastguard Worker if ((offset1 >= ixheaacd_drc_offset) && (offset1 <= SMALL_DEL_STRT)) {
758*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < delay; i++) {
759*15dc779aSAndroid Build Coastguard Worker ptr_tmp =
760*15dc779aSAndroid Build Coastguard Worker &ptr_ps_dec->delay_buf_qmf_ld_re_im[i][ixheaacd_drc_offset * 2];
761*15dc779aSAndroid Build Coastguard Worker
762*15dc779aSAndroid Build Coastguard Worker memset(ptr_tmp, 0,
763*15dc779aSAndroid Build Coastguard Worker sizeof(WORD16) * 2 * (offset1 - ixheaacd_drc_offset));
764*15dc779aSAndroid Build Coastguard Worker }
765*15dc779aSAndroid Build Coastguard Worker }
766*15dc779aSAndroid Build Coastguard Worker
767*15dc779aSAndroid Build Coastguard Worker delay = SMALL_DEL;
768*15dc779aSAndroid Build Coastguard Worker
769*15dc779aSAndroid Build Coastguard Worker if ((usb >= offset1) && (usb <= 16)) {
770*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < delay; i++) {
771*15dc779aSAndroid Build Coastguard Worker ptr_tmp = &ptr_ps_dec->delay_buf_qmf_sd_re_im[i][offset1 * 2];
772*15dc779aSAndroid Build Coastguard Worker
773*15dc779aSAndroid Build Coastguard Worker memset(ptr_tmp, 0, sizeof(WORD16) * 2 * (usb - offset1));
774*15dc779aSAndroid Build Coastguard Worker }
775*15dc779aSAndroid Build Coastguard Worker }
776*15dc779aSAndroid Build Coastguard Worker }
777*15dc779aSAndroid Build Coastguard Worker }
778*15dc779aSAndroid Build Coastguard Worker
779*15dc779aSAndroid Build Coastguard Worker if (ptr_ps_dec->iid_quant) {
780*15dc779aSAndroid Build Coastguard Worker num_iid_steps = NUM_IID_LEVELS_FINE;
781*15dc779aSAndroid Build Coastguard Worker p_scale_factors = sbr_tables_ptr->ps_tables_ptr->scale_factors_fine;
782*15dc779aSAndroid Build Coastguard Worker } else {
783*15dc779aSAndroid Build Coastguard Worker num_iid_steps = NUM_IID_LEVELS;
784*15dc779aSAndroid Build Coastguard Worker p_scale_factors = sbr_tables_ptr->ps_tables_ptr->scale_factors;
785*15dc779aSAndroid Build Coastguard Worker }
786*15dc779aSAndroid Build Coastguard Worker
787*15dc779aSAndroid Build Coastguard Worker inv_env_len =
788*15dc779aSAndroid Build Coastguard Worker sbr_tables_ptr->env_calc_tables_ptr->sbr_inv_int_table[ixheaac_abs16(
789*15dc779aSAndroid Build Coastguard Worker ixheaac_sub16_sat(ptr_ps_dec->border_position[env + 1],
790*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->border_position[env]))];
791*15dc779aSAndroid Build Coastguard Worker
792*15dc779aSAndroid Build Coastguard Worker p_iid_idx = &ptr_ps_dec->iid_par_table[env][0];
793*15dc779aSAndroid Build Coastguard Worker
794*15dc779aSAndroid Build Coastguard Worker for (group = 0; group < NO_IID_GROUPS; group++) {
795*15dc779aSAndroid Build Coastguard Worker WORD16 bplusa, bminusa;
796*15dc779aSAndroid Build Coastguard Worker WORD num_iid_idx, num_icc_idx;
797*15dc779aSAndroid Build Coastguard Worker
798*15dc779aSAndroid Build Coastguard Worker bin = sbr_tables_ptr->ps_tables_ptr->group_to_bin[group];
799*15dc779aSAndroid Build Coastguard Worker
800*15dc779aSAndroid Build Coastguard Worker num_iid_idx = p_iid_idx[bin];
801*15dc779aSAndroid Build Coastguard Worker num_icc_idx = p_iid_idx[bin + 238];
802*15dc779aSAndroid Build Coastguard Worker
803*15dc779aSAndroid Build Coastguard Worker c1 = p_scale_factors[(num_iid_steps + num_iid_idx)];
804*15dc779aSAndroid Build Coastguard Worker c2 = p_scale_factors[(num_iid_steps - num_iid_idx)];
805*15dc779aSAndroid Build Coastguard Worker
806*15dc779aSAndroid Build Coastguard Worker beta = ixheaac_mult32x16in32_shl(
807*15dc779aSAndroid Build Coastguard Worker ixheaac_mult16x16in32_shl(
808*15dc779aSAndroid Build Coastguard Worker sbr_tables_ptr->ps_tables_ptr->alpha_values[num_icc_idx],
809*15dc779aSAndroid Build Coastguard Worker ixheaac_sub16(c1, c2)),
810*15dc779aSAndroid Build Coastguard Worker PSC_SQRT05F);
811*15dc779aSAndroid Build Coastguard Worker alpha = ixheaac_shr32_dir_sat_limit(
812*15dc779aSAndroid Build Coastguard Worker ixheaac_deposit16h_in32(
813*15dc779aSAndroid Build Coastguard Worker sbr_tables_ptr->ps_tables_ptr->alpha_values[num_icc_idx]),
814*15dc779aSAndroid Build Coastguard Worker 1);
815*15dc779aSAndroid Build Coastguard Worker
816*15dc779aSAndroid Build Coastguard Worker bplusa = ixheaac_round16(ixheaac_add32_sat(beta, alpha));
817*15dc779aSAndroid Build Coastguard Worker bminusa = ixheaac_round16(ixheaac_sub32_sat(beta, alpha));
818*15dc779aSAndroid Build Coastguard Worker
819*15dc779aSAndroid Build Coastguard Worker indexplusa = ixheaac_mult32x16in32(rescale, bplusa);
820*15dc779aSAndroid Build Coastguard Worker indexminusa = ixheaac_mult32x16in32(rescale, bminusa);
821*15dc779aSAndroid Build Coastguard Worker
822*15dc779aSAndroid Build Coastguard Worker h11 = ixheaac_mult16_shl(ixheaacd_cos512(indexplusa, cos_sin_lookup_tab),
823*15dc779aSAndroid Build Coastguard Worker c2);
824*15dc779aSAndroid Build Coastguard Worker h12 = ixheaac_mult16_shl(ixheaacd_cos512(indexminusa, cos_sin_lookup_tab),
825*15dc779aSAndroid Build Coastguard Worker c1);
826*15dc779aSAndroid Build Coastguard Worker h21 = ixheaac_mult16_shl(ixheaacd_sin512(indexplusa, cos_sin_lookup_tab),
827*15dc779aSAndroid Build Coastguard Worker c2);
828*15dc779aSAndroid Build Coastguard Worker h22 = ixheaac_mult16_shl(ixheaacd_sin512(indexminusa, cos_sin_lookup_tab),
829*15dc779aSAndroid Build Coastguard Worker c1);
830*15dc779aSAndroid Build Coastguard Worker
831*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h11_h12[2 * group + 0] = ixheaac_mult16_shl(
832*15dc779aSAndroid Build Coastguard Worker inv_env_len,
833*15dc779aSAndroid Build Coastguard Worker ixheaac_sub16(h11, ptr_ps_dec->h11_h12_vec[2 * group + 0]));
834*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h11_h12[2 * group + 1] = ixheaac_mult16_shl(
835*15dc779aSAndroid Build Coastguard Worker inv_env_len,
836*15dc779aSAndroid Build Coastguard Worker ixheaac_sub16(h12, ptr_ps_dec->h11_h12_vec[2 * group + 1]));
837*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h21_h22[2 * group + 0] = ixheaac_mult16_shl(
838*15dc779aSAndroid Build Coastguard Worker inv_env_len,
839*15dc779aSAndroid Build Coastguard Worker ixheaac_sub16(h21, ptr_ps_dec->h21_h22_vec[2 * group + 0]));
840*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h21_h22[2 * group + 1] = ixheaac_mult16_shl(
841*15dc779aSAndroid Build Coastguard Worker inv_env_len,
842*15dc779aSAndroid Build Coastguard Worker ixheaac_sub16(h22, ptr_ps_dec->h21_h22_vec[2 * group + 1]));
843*15dc779aSAndroid Build Coastguard Worker
844*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * group + 0] = ptr_ps_dec->h11_h12_vec[2 * group + 0];
845*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * group + 1] = ptr_ps_dec->h11_h12_vec[2 * group + 1];
846*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * group + 0] = ptr_ps_dec->h21_h22_vec[2 * group + 0];
847*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * group + 1] = ptr_ps_dec->h21_h22_vec[2 * group + 1];
848*15dc779aSAndroid Build Coastguard Worker
849*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->h11_h12_vec[2 * group + 0] = h11;
850*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->h11_h12_vec[2 * group + 1] = h12;
851*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->h21_h22_vec[2 * group + 0] = h21;
852*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->h21_h22_vec[2 * group + 1] = h22;
853*15dc779aSAndroid Build Coastguard Worker }
854*15dc779aSAndroid Build Coastguard Worker }
855*15dc779aSAndroid Build Coastguard Worker
ixheaacd_apply_rot_dec(ia_ps_dec_struct * ptr_ps_dec,WORD32 * p_qmf_left_re,WORD32 * p_qmf_left_im,WORD32 * p_qmf_right_re,WORD32 * p_qmf_right_im,ia_sbr_tables_struct * sbr_tables_ptr,const WORD16 * ptr_res)856*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_apply_rot_dec(ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_qmf_left_re,
857*15dc779aSAndroid Build Coastguard Worker WORD32 *p_qmf_left_im, WORD32 *p_qmf_right_re,
858*15dc779aSAndroid Build Coastguard Worker WORD32 *p_qmf_right_im,
859*15dc779aSAndroid Build Coastguard Worker ia_sbr_tables_struct *sbr_tables_ptr,
860*15dc779aSAndroid Build Coastguard Worker const WORD16 *ptr_res) {
861*15dc779aSAndroid Build Coastguard Worker WORD group, subband, max_subband, usb, k;
862*15dc779aSAndroid Build Coastguard Worker WORD32 *p_hyb_left_re, *p_hyb_left_re1;
863*15dc779aSAndroid Build Coastguard Worker WORD32 *p_hyb_left_im, *p_hyb_left_im1;
864*15dc779aSAndroid Build Coastguard Worker WORD32 *p_hyb_right_re, *p_hyb_right_re1;
865*15dc779aSAndroid Build Coastguard Worker WORD32 *p_hyb_right_im, *p_hyb_right_im1;
866*15dc779aSAndroid Build Coastguard Worker WORD32 temp_left_real, temp_left_imag;
867*15dc779aSAndroid Build Coastguard Worker WORD32 temp_right_real, temp_right_imag;
868*15dc779aSAndroid Build Coastguard Worker WORD16 hybrid_resol;
869*15dc779aSAndroid Build Coastguard Worker WORD32 tmp_real, tmp_img;
870*15dc779aSAndroid Build Coastguard Worker WORD32 tmp_real1, tmp_img1;
871*15dc779aSAndroid Build Coastguard Worker WORD16 H11_H12[128 * 2] = {0};
872*15dc779aSAndroid Build Coastguard Worker
873*15dc779aSAndroid Build Coastguard Worker usb = ptr_ps_dec->usb;
874*15dc779aSAndroid Build Coastguard Worker
875*15dc779aSAndroid Build Coastguard Worker p_hyb_left_re1 = ptr_ps_dec->ptr_hyb_left_re;
876*15dc779aSAndroid Build Coastguard Worker p_hyb_left_im1 = ptr_ps_dec->ptr_hyb_left_im;
877*15dc779aSAndroid Build Coastguard Worker p_hyb_right_re1 = ptr_ps_dec->ptr_hyb_right_re;
878*15dc779aSAndroid Build Coastguard Worker p_hyb_right_im1 = ptr_ps_dec->ptr_hyb_right_im;
879*15dc779aSAndroid Build Coastguard Worker
880*15dc779aSAndroid Build Coastguard Worker for (group = 0; group < NO_IID_GROUPS; group++) {
881*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * group + 0] =
882*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(ptr_ps_dec->H11_H12[2 * group + 0],
883*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h11_h12[2 * group + 0]);
884*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * group + 1] =
885*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(ptr_ps_dec->H11_H12[2 * group + 1],
886*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h11_h12[2 * group + 1]);
887*15dc779aSAndroid Build Coastguard Worker
888*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * group + 0] =
889*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(ptr_ps_dec->H21_H22[2 * group + 0],
890*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h21_h22[2 * group + 0]);
891*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * group + 1] =
892*15dc779aSAndroid Build Coastguard Worker ixheaac_add16(ptr_ps_dec->H21_H22[2 * group + 1],
893*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->delta_h21_h22[2 * group + 1]);
894*15dc779aSAndroid Build Coastguard Worker }
895*15dc779aSAndroid Build Coastguard Worker
896*15dc779aSAndroid Build Coastguard Worker for (subband = 0; subband < SUBQMF_GROUPS; subband++) {
897*15dc779aSAndroid Build Coastguard Worker temp_left_real = ixheaac_add32_sat(
898*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_left_re1[subband],
899*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * subband + 0]),
900*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_re1[subband],
901*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * subband + 0]));
902*15dc779aSAndroid Build Coastguard Worker temp_left_imag = ixheaac_add32_sat(
903*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_left_im1[subband],
904*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * subband + 0]),
905*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_im1[subband],
906*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * subband + 0]));
907*15dc779aSAndroid Build Coastguard Worker temp_right_real = ixheaac_add32_sat(
908*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_left_re1[subband],
909*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * subband + 1]),
910*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_re1[subband],
911*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * subband + 1]));
912*15dc779aSAndroid Build Coastguard Worker temp_right_imag = ixheaac_add32_sat(
913*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_left_im1[subband],
914*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H11_H12[2 * subband + 1]),
915*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_im1[subband],
916*15dc779aSAndroid Build Coastguard Worker ptr_ps_dec->H21_H22[2 * subband + 1]));
917*15dc779aSAndroid Build Coastguard Worker p_hyb_left_re1[subband] = ixheaac_shl32(temp_left_real, 2);
918*15dc779aSAndroid Build Coastguard Worker p_hyb_left_im1[subband] = ixheaac_shl32(temp_left_imag, 2);
919*15dc779aSAndroid Build Coastguard Worker p_hyb_right_re1[subband] = ixheaac_shl32(temp_right_real, 2);
920*15dc779aSAndroid Build Coastguard Worker p_hyb_right_im1[subband] = ixheaac_shl32(temp_right_imag, 2);
921*15dc779aSAndroid Build Coastguard Worker }
922*15dc779aSAndroid Build Coastguard Worker
923*15dc779aSAndroid Build Coastguard Worker p_hyb_left_re = p_qmf_left_re;
924*15dc779aSAndroid Build Coastguard Worker p_hyb_left_im = p_qmf_left_im;
925*15dc779aSAndroid Build Coastguard Worker p_hyb_right_re = p_qmf_right_re;
926*15dc779aSAndroid Build Coastguard Worker p_hyb_right_im = p_qmf_right_im;
927*15dc779aSAndroid Build Coastguard Worker
928*15dc779aSAndroid Build Coastguard Worker {
929*15dc779aSAndroid Build Coastguard Worker WORD32 *h11_h12_src = (WORD32 *)ptr_ps_dec->H11_H12;
930*15dc779aSAndroid Build Coastguard Worker WORD32 *h21_h22_src = (WORD32 *)ptr_ps_dec->H21_H22;
931*15dc779aSAndroid Build Coastguard Worker WORD32 *h11_h12_dst = (WORD32 *)H11_H12;
932*15dc779aSAndroid Build Coastguard Worker
933*15dc779aSAndroid Build Coastguard Worker for (group = SUBQMF_GROUPS; group < NO_IID_GROUPS; group++) {
934*15dc779aSAndroid Build Coastguard Worker max_subband = ixheaac_min32(
935*15dc779aSAndroid Build Coastguard Worker usb, sbr_tables_ptr->ps_tables_ptr->borders_group[group + 1]);
936*15dc779aSAndroid Build Coastguard Worker for (subband = sbr_tables_ptr->ps_tables_ptr->borders_group[group];
937*15dc779aSAndroid Build Coastguard Worker subband < max_subband; subband++) {
938*15dc779aSAndroid Build Coastguard Worker h11_h12_dst[2 * subband] = h11_h12_src[group];
939*15dc779aSAndroid Build Coastguard Worker h11_h12_dst[2 * subband + 1] = h21_h22_src[group];
940*15dc779aSAndroid Build Coastguard Worker }
941*15dc779aSAndroid Build Coastguard Worker }
942*15dc779aSAndroid Build Coastguard Worker }
943*15dc779aSAndroid Build Coastguard Worker
944*15dc779aSAndroid Build Coastguard Worker for (subband = 0; subband < NO_QMF_CHANNELS_IN_HYBRID; subband++) {
945*15dc779aSAndroid Build Coastguard Worker tmp_real = *p_hyb_left_re1++;
946*15dc779aSAndroid Build Coastguard Worker tmp_img = *p_hyb_left_im1++;
947*15dc779aSAndroid Build Coastguard Worker tmp_real1 = *p_hyb_right_re1++;
948*15dc779aSAndroid Build Coastguard Worker tmp_img1 = *p_hyb_right_im1++;
949*15dc779aSAndroid Build Coastguard Worker
950*15dc779aSAndroid Build Coastguard Worker hybrid_resol = ixheaac_min16(*ptr_res++, 6);
951*15dc779aSAndroid Build Coastguard Worker
952*15dc779aSAndroid Build Coastguard Worker for (k = hybrid_resol - 2; k >= 0; k--) {
953*15dc779aSAndroid Build Coastguard Worker tmp_real = ixheaac_add32_sat(tmp_real, *p_hyb_left_re1++);
954*15dc779aSAndroid Build Coastguard Worker tmp_img = ixheaac_add32_sat(tmp_img, *p_hyb_left_im1++);
955*15dc779aSAndroid Build Coastguard Worker tmp_real1 = ixheaac_add32_sat(tmp_real1, *p_hyb_right_re1++);
956*15dc779aSAndroid Build Coastguard Worker tmp_img1 = ixheaac_add32_sat(tmp_img1, *p_hyb_right_im1++);
957*15dc779aSAndroid Build Coastguard Worker }
958*15dc779aSAndroid Build Coastguard Worker
959*15dc779aSAndroid Build Coastguard Worker p_hyb_left_re[subband] = tmp_real;
960*15dc779aSAndroid Build Coastguard Worker p_hyb_left_im[subband] = tmp_img;
961*15dc779aSAndroid Build Coastguard Worker p_hyb_right_re[subband] = tmp_real1;
962*15dc779aSAndroid Build Coastguard Worker p_hyb_right_im[subband] = tmp_img1;
963*15dc779aSAndroid Build Coastguard Worker }
964*15dc779aSAndroid Build Coastguard Worker
965*15dc779aSAndroid Build Coastguard Worker for (; subband < usb; subband++) {
966*15dc779aSAndroid Build Coastguard Worker temp_left_real =
967*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(ixheaac_mult32x16in32(p_hyb_left_re[subband],
968*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 0]),
969*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_re[subband],
970*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 2]));
971*15dc779aSAndroid Build Coastguard Worker temp_left_imag =
972*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(ixheaac_mult32x16in32(p_hyb_left_im[subband],
973*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 0]),
974*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_im[subband],
975*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 2]));
976*15dc779aSAndroid Build Coastguard Worker temp_right_real =
977*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(ixheaac_mult32x16in32(p_hyb_left_re[subband],
978*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 1]),
979*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_re[subband],
980*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 3]));
981*15dc779aSAndroid Build Coastguard Worker temp_right_imag =
982*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(ixheaac_mult32x16in32(p_hyb_left_im[subband],
983*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 1]),
984*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32(p_hyb_right_im[subband],
985*15dc779aSAndroid Build Coastguard Worker H11_H12[4 * subband + 3]));
986*15dc779aSAndroid Build Coastguard Worker p_hyb_left_re[subband] = ixheaac_shl32(temp_left_real, 2);
987*15dc779aSAndroid Build Coastguard Worker p_hyb_left_im[subband] = ixheaac_shl32(temp_left_imag, 2);
988*15dc779aSAndroid Build Coastguard Worker p_hyb_right_re[subband] = ixheaac_shl32(temp_right_real, 2);
989*15dc779aSAndroid Build Coastguard Worker p_hyb_right_im[subband] = ixheaac_shl32(temp_right_imag, 2);
990*15dc779aSAndroid Build Coastguard Worker }
991*15dc779aSAndroid Build Coastguard Worker }
992