1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker *
3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker *
5*15dc779aSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker *
9*15dc779aSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker *
11*15dc779aSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker *
17*15dc779aSAndroid Build Coastguard Worker *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker */
20*15dc779aSAndroid Build Coastguard Worker #include <string.h>
21*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
22*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_struct_def.h"
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_error_codes.h"
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_res_rom.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_aac_struct.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_bitbuffer.h"
30*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_common_rom.h"
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecsettings.h"
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_scale.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr_part.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_rom.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_hybrid.h"
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_dec.h"
37*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_polyphase.h"
38*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_config.h"
39*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_qmf_dec.h"
40*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_dec.h"
41*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_defines.h"
42*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_macro_def.h"
43*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_basic_op.h"
44*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_error_standards.h"
45*15dc779aSAndroid Build Coastguard Worker
ixheaacd_fft32(WORD32 * vec,const WORD16 * fft_c)46*15dc779aSAndroid Build Coastguard Worker static VOID ixheaacd_fft32(WORD32 *vec, const WORD16 *fft_c) {
47*15dc779aSAndroid Build Coastguard Worker WORD32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, tmp12, tmp13,
48*15dc779aSAndroid Build Coastguard Worker tmp14, tmp15;
49*15dc779aSAndroid Build Coastguard Worker WORD32 temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18, temp19, temp110,
50*15dc779aSAndroid Build Coastguard Worker temp111, temp112, temp113, temp114, temp115;
51*15dc779aSAndroid Build Coastguard Worker WORD32 temp20, temp21, temp22, temp23, temp24, temp25, temp26, temp27, temp28, temp29, temp210,
52*15dc779aSAndroid Build Coastguard Worker temp211, temp212, temp213, temp214, temp215;
53*15dc779aSAndroid Build Coastguard Worker WORD32 temp30, temp31, temp32, temp33, temp34, temp35, temp36, temp37, temp38, temp39, temp310,
54*15dc779aSAndroid Build Coastguard Worker temp311, temp312, temp313, temp314, temp315;
55*15dc779aSAndroid Build Coastguard Worker WORD32 temp316, temp317, temp318, temp319, temp320, temp321, temp322, temp323, temp324, temp325,
56*15dc779aSAndroid Build Coastguard Worker temp326, temp327, temp328, temp329, temp330, temp331;
57*15dc779aSAndroid Build Coastguard Worker WORD32 temp40, temp41, temp42, temp43, temp44, temp45, temp46, temp47, temp48, temp49, temp410,
58*15dc779aSAndroid Build Coastguard Worker temp411, temp412, temp413, temp414, temp415;
59*15dc779aSAndroid Build Coastguard Worker
60*15dc779aSAndroid Build Coastguard Worker temp20 = ixheaac_sub32_sat(vec[2], vec[34]);
61*15dc779aSAndroid Build Coastguard Worker temp21 = ixheaac_sub32_sat(vec[3], vec[35]);
62*15dc779aSAndroid Build Coastguard Worker temp30 = ixheaac_add32_sat(vec[0], vec[32]);
63*15dc779aSAndroid Build Coastguard Worker temp31 = ixheaac_add32_sat(vec[1], vec[33]);
64*15dc779aSAndroid Build Coastguard Worker temp32 = ixheaac_add32_sat(vec[2], vec[34]);
65*15dc779aSAndroid Build Coastguard Worker temp33 = ixheaac_add32_sat(vec[3], vec[35]);
66*15dc779aSAndroid Build Coastguard Worker
67*15dc779aSAndroid Build Coastguard Worker temp22 = ixheaac_sub32_sat(vec[6], vec[38]);
68*15dc779aSAndroid Build Coastguard Worker temp23 = ixheaac_sub32_sat(vec[7], vec[39]);
69*15dc779aSAndroid Build Coastguard Worker temp34 = ixheaac_add32_sat(vec[4], vec[36]);
70*15dc779aSAndroid Build Coastguard Worker temp35 = ixheaac_add32_sat(vec[5], vec[37]);
71*15dc779aSAndroid Build Coastguard Worker temp36 = ixheaac_add32_sat(vec[6], vec[38]);
72*15dc779aSAndroid Build Coastguard Worker temp37 = ixheaac_add32_sat(vec[7], vec[39]);
73*15dc779aSAndroid Build Coastguard Worker
74*15dc779aSAndroid Build Coastguard Worker temp24 = ixheaac_sub32_sat(vec[10], vec[42]);
75*15dc779aSAndroid Build Coastguard Worker temp25 = ixheaac_sub32_sat(vec[11], vec[43]);
76*15dc779aSAndroid Build Coastguard Worker temp38 = ixheaac_add32_sat(vec[8], vec[40]);
77*15dc779aSAndroid Build Coastguard Worker temp39 = ixheaac_add32_sat(vec[9], vec[41]);
78*15dc779aSAndroid Build Coastguard Worker temp310 = ixheaac_add32_sat(vec[10], vec[42]);
79*15dc779aSAndroid Build Coastguard Worker temp311 = ixheaac_add32_sat(vec[11], vec[43]);
80*15dc779aSAndroid Build Coastguard Worker
81*15dc779aSAndroid Build Coastguard Worker temp26 = ixheaac_sub32_sat(vec[14], vec[46]);
82*15dc779aSAndroid Build Coastguard Worker temp27 = ixheaac_sub32_sat(vec[15], vec[47]);
83*15dc779aSAndroid Build Coastguard Worker temp312 = ixheaac_add32_sat(vec[12], vec[44]);
84*15dc779aSAndroid Build Coastguard Worker temp313 = ixheaac_add32_sat(vec[13], vec[45]);
85*15dc779aSAndroid Build Coastguard Worker temp314 = ixheaac_add32_sat(vec[14], vec[46]);
86*15dc779aSAndroid Build Coastguard Worker temp315 = ixheaac_add32_sat(vec[15], vec[47]);
87*15dc779aSAndroid Build Coastguard Worker
88*15dc779aSAndroid Build Coastguard Worker temp28 = ixheaac_sub32_sat(vec[18], vec[50]);
89*15dc779aSAndroid Build Coastguard Worker temp29 = ixheaac_sub32_sat(vec[19], vec[51]);
90*15dc779aSAndroid Build Coastguard Worker temp316 = ixheaac_add32_sat(vec[16], vec[48]);
91*15dc779aSAndroid Build Coastguard Worker temp317 = ixheaac_add32_sat(vec[17], vec[49]);
92*15dc779aSAndroid Build Coastguard Worker temp318 = ixheaac_add32_sat(vec[18], vec[50]);
93*15dc779aSAndroid Build Coastguard Worker temp319 = ixheaac_add32_sat(vec[19], vec[51]);
94*15dc779aSAndroid Build Coastguard Worker
95*15dc779aSAndroid Build Coastguard Worker temp210 = ixheaac_sub32_sat(vec[22], vec[54]);
96*15dc779aSAndroid Build Coastguard Worker temp211 = ixheaac_sub32_sat(vec[23], vec[55]);
97*15dc779aSAndroid Build Coastguard Worker temp320 = ixheaac_add32_sat(vec[20], vec[52]);
98*15dc779aSAndroid Build Coastguard Worker temp321 = ixheaac_add32_sat(vec[21], vec[53]);
99*15dc779aSAndroid Build Coastguard Worker temp322 = ixheaac_add32_sat(vec[22], vec[54]);
100*15dc779aSAndroid Build Coastguard Worker temp323 = ixheaac_add32_sat(vec[23], vec[55]);
101*15dc779aSAndroid Build Coastguard Worker
102*15dc779aSAndroid Build Coastguard Worker temp212 = ixheaac_sub32_sat(vec[26], vec[58]);
103*15dc779aSAndroid Build Coastguard Worker temp213 = ixheaac_sub32_sat(vec[27], vec[59]);
104*15dc779aSAndroid Build Coastguard Worker temp324 = ixheaac_add32_sat(vec[24], vec[56]);
105*15dc779aSAndroid Build Coastguard Worker temp325 = ixheaac_add32_sat(vec[25], vec[57]);
106*15dc779aSAndroid Build Coastguard Worker temp326 = ixheaac_add32_sat(vec[26], vec[58]);
107*15dc779aSAndroid Build Coastguard Worker temp327 = ixheaac_add32_sat(vec[27], vec[59]);
108*15dc779aSAndroid Build Coastguard Worker
109*15dc779aSAndroid Build Coastguard Worker temp214 = ixheaac_sub32_sat(vec[30], vec[62]);
110*15dc779aSAndroid Build Coastguard Worker temp215 = ixheaac_sub32_sat(vec[31], vec[63]);
111*15dc779aSAndroid Build Coastguard Worker temp328 = ixheaac_add32_sat(vec[28], vec[60]);
112*15dc779aSAndroid Build Coastguard Worker temp329 = ixheaac_add32_sat(vec[29], vec[61]);
113*15dc779aSAndroid Build Coastguard Worker temp330 = ixheaac_add32_sat(vec[30], vec[62]);
114*15dc779aSAndroid Build Coastguard Worker temp331 = ixheaac_add32_sat(vec[31], vec[63]);
115*15dc779aSAndroid Build Coastguard Worker
116*15dc779aSAndroid Build Coastguard Worker temp41 = -ixheaac_add32_sat(temp20, temp214);
117*15dc779aSAndroid Build Coastguard Worker temp42 = ixheaac_sub32_sat(temp20, temp214);
118*15dc779aSAndroid Build Coastguard Worker temp40 = ixheaac_add32_sat(temp21, temp215);
119*15dc779aSAndroid Build Coastguard Worker temp43 = ixheaac_sub32_sat(temp21, temp215);
120*15dc779aSAndroid Build Coastguard Worker temp45 = -ixheaac_add32_sat(temp22, temp212);
121*15dc779aSAndroid Build Coastguard Worker temp46 = ixheaac_sub32_sat(temp22, temp212);
122*15dc779aSAndroid Build Coastguard Worker temp44 = ixheaac_add32_sat(temp23, temp213);
123*15dc779aSAndroid Build Coastguard Worker temp47 = ixheaac_sub32_sat(temp23, temp213);
124*15dc779aSAndroid Build Coastguard Worker temp49 = -ixheaac_add32_sat(temp24, temp210);
125*15dc779aSAndroid Build Coastguard Worker temp410 = ixheaac_sub32_sat(temp24, temp210);
126*15dc779aSAndroid Build Coastguard Worker temp48 = ixheaac_add32_sat(temp25, temp211);
127*15dc779aSAndroid Build Coastguard Worker temp411 = ixheaac_sub32_sat(temp25, temp211);
128*15dc779aSAndroid Build Coastguard Worker temp413 = -ixheaac_add32_sat(temp26, temp28);
129*15dc779aSAndroid Build Coastguard Worker temp414 = ixheaac_sub32_sat(temp26, temp28);
130*15dc779aSAndroid Build Coastguard Worker temp412 = ixheaac_add32_sat(temp27, temp29);
131*15dc779aSAndroid Build Coastguard Worker temp415 = ixheaac_sub32_sat(temp27, temp29);
132*15dc779aSAndroid Build Coastguard Worker
133*15dc779aSAndroid Build Coastguard Worker temp20 = ixheaac_add32_sat(ixheaac_add32_sat(ixheaac_add32_sat(
134*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp40, fft_c[3]),
135*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp44, fft_c[2])),
136*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp48, fft_c[1])),
137*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp412, fft_c[0]));
138*15dc779aSAndroid Build Coastguard Worker
139*15dc779aSAndroid Build Coastguard Worker temp24 = ixheaac_sub32_sat(ixheaac_add32_sat(ixheaac_add32_sat(
140*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp40, fft_c[2]),
141*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp44, fft_c[0])),
142*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp48, fft_c[3])),
143*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp412, fft_c[1]));
144*15dc779aSAndroid Build Coastguard Worker
145*15dc779aSAndroid Build Coastguard Worker temp28 = ixheaac_add32_sat(ixheaac_sub32_sat(ixheaac_add32_sat(
146*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp40, fft_c[1]),
147*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp44, fft_c[3])),
148*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp48, fft_c[0])),
149*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp412, fft_c[2]));
150*15dc779aSAndroid Build Coastguard Worker
151*15dc779aSAndroid Build Coastguard Worker temp212 = ixheaac_sub32_sat(ixheaac_add32_sat(ixheaac_sub32_sat(
152*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp40, fft_c[0]),
153*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp44, fft_c[1])),
154*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp48, fft_c[2])),
155*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp412, fft_c[3]));
156*15dc779aSAndroid Build Coastguard Worker
157*15dc779aSAndroid Build Coastguard Worker temp21 = ixheaac_add32_sat(ixheaac_add32_sat(ixheaac_add32_sat(
158*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp41, fft_c[3]),
159*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp45, fft_c[2])),
160*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp49, fft_c[1])),
161*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp413, fft_c[0]));
162*15dc779aSAndroid Build Coastguard Worker
163*15dc779aSAndroid Build Coastguard Worker temp25 = ixheaac_sub32_sat(ixheaac_add32_sat(ixheaac_add32_sat(
164*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp41, fft_c[2]),
165*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp45, fft_c[0])),
166*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp49, fft_c[3])),
167*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp413, fft_c[1]));
168*15dc779aSAndroid Build Coastguard Worker
169*15dc779aSAndroid Build Coastguard Worker temp29 = ixheaac_add32_sat(ixheaac_sub32_sat(ixheaac_add32_sat(
170*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp41, fft_c[1]),
171*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp45, fft_c[3])),
172*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp49, fft_c[0])),
173*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp413, fft_c[2]));
174*15dc779aSAndroid Build Coastguard Worker
175*15dc779aSAndroid Build Coastguard Worker temp213 = ixheaac_sub32_sat(ixheaac_add32_sat(ixheaac_sub32_sat(
176*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp41, fft_c[0]),
177*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp45, fft_c[1])),
178*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp49, fft_c[2])),
179*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp413, fft_c[3]));
180*15dc779aSAndroid Build Coastguard Worker
181*15dc779aSAndroid Build Coastguard Worker temp22 = ixheaac_add32_sat(ixheaac_add32_sat(ixheaac_add32_sat(
182*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp42, fft_c[0]),
183*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp46, fft_c[1])),
184*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp410, fft_c[2])),
185*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp414, fft_c[3]));
186*15dc779aSAndroid Build Coastguard Worker
187*15dc779aSAndroid Build Coastguard Worker temp26 = ixheaac_sub32_sat(ixheaac_sub32_sat(ixheaac_sub32_sat(
188*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp42, fft_c[1]),
189*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp46, fft_c[3])),
190*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp410, fft_c[0])),
191*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp414, fft_c[2]));
192*15dc779aSAndroid Build Coastguard Worker
193*15dc779aSAndroid Build Coastguard Worker temp210 = ixheaac_add32_sat(ixheaac_add32_sat(ixheaac_sub32_sat(
194*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp42, fft_c[2]),
195*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp46, fft_c[0])),
196*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp410, fft_c[3])),
197*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp414, fft_c[1]));
198*15dc779aSAndroid Build Coastguard Worker
199*15dc779aSAndroid Build Coastguard Worker temp214 = ixheaac_sub32_sat(ixheaac_add32_sat(ixheaac_sub32_sat(
200*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp42, fft_c[3]),
201*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp46, fft_c[2])),
202*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp410, fft_c[1])),
203*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp414, fft_c[0]));
204*15dc779aSAndroid Build Coastguard Worker
205*15dc779aSAndroid Build Coastguard Worker temp23 = ixheaac_add32_sat(ixheaac_add32_sat(ixheaac_add32_sat(
206*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp43, fft_c[0]),
207*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp47, fft_c[1])),
208*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp411, fft_c[2])),
209*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp415, fft_c[3]));
210*15dc779aSAndroid Build Coastguard Worker
211*15dc779aSAndroid Build Coastguard Worker temp27 = ixheaac_sub32_sat(ixheaac_sub32_sat(ixheaac_sub32_sat(
212*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp43, fft_c[1]),
213*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp47, fft_c[3])),
214*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp411, fft_c[0])),
215*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp415, fft_c[2]));
216*15dc779aSAndroid Build Coastguard Worker
217*15dc779aSAndroid Build Coastguard Worker temp211 = ixheaac_add32_sat(ixheaac_add32_sat(ixheaac_sub32_sat(
218*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp43, fft_c[2]),
219*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp47, fft_c[0])),
220*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp411, fft_c[3])),
221*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp415, fft_c[1]));
222*15dc779aSAndroid Build Coastguard Worker
223*15dc779aSAndroid Build Coastguard Worker temp215 = ixheaac_sub32_sat(ixheaac_add32_sat(ixheaac_sub32_sat(
224*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp43, fft_c[3]),
225*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp47, fft_c[2])),
226*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp411, fft_c[1])),
227*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(temp415, fft_c[0]));
228*15dc779aSAndroid Build Coastguard Worker
229*15dc779aSAndroid Build Coastguard Worker temp40 = ixheaac_add32_sat(temp20, temp22);
230*15dc779aSAndroid Build Coastguard Worker temp414 = ixheaac_sub32_sat(temp20, temp22);
231*15dc779aSAndroid Build Coastguard Worker temp41 = ixheaac_add32_sat(temp21, temp23);
232*15dc779aSAndroid Build Coastguard Worker temp415 = ixheaac_sub32_sat(temp21, temp23);
233*15dc779aSAndroid Build Coastguard Worker temp42 = ixheaac_add32_sat(temp24, temp26);
234*15dc779aSAndroid Build Coastguard Worker temp412 = ixheaac_sub32_sat(temp24, temp26);
235*15dc779aSAndroid Build Coastguard Worker temp43 = ixheaac_add32_sat(temp25, temp27);
236*15dc779aSAndroid Build Coastguard Worker temp413 = ixheaac_sub32_sat(temp25, temp27);
237*15dc779aSAndroid Build Coastguard Worker temp44 = ixheaac_add32_sat(temp28, temp210);
238*15dc779aSAndroid Build Coastguard Worker temp410 = ixheaac_sub32_sat(temp28, temp210);
239*15dc779aSAndroid Build Coastguard Worker temp45 = ixheaac_add32_sat(temp29, temp211);
240*15dc779aSAndroid Build Coastguard Worker temp411 = ixheaac_sub32_sat(temp29, temp211);
241*15dc779aSAndroid Build Coastguard Worker temp46 = ixheaac_add32_sat(temp212, temp214);
242*15dc779aSAndroid Build Coastguard Worker temp48 = ixheaac_sub32_sat(temp212, temp214);
243*15dc779aSAndroid Build Coastguard Worker temp47 = ixheaac_add32_sat(temp213, temp215);
244*15dc779aSAndroid Build Coastguard Worker temp49 = ixheaac_sub32_sat(temp213, temp215);
245*15dc779aSAndroid Build Coastguard Worker
246*15dc779aSAndroid Build Coastguard Worker temp10 = ixheaac_add32_sat(temp30, temp316);
247*15dc779aSAndroid Build Coastguard Worker temp11 = ixheaac_add32_sat(temp31, temp317);
248*15dc779aSAndroid Build Coastguard Worker temp12 = ixheaac_add32_sat(temp32, temp318);
249*15dc779aSAndroid Build Coastguard Worker temp13 = ixheaac_add32_sat(temp33, temp319);
250*15dc779aSAndroid Build Coastguard Worker temp14 = ixheaac_add32_sat(temp34, temp320);
251*15dc779aSAndroid Build Coastguard Worker temp15 = ixheaac_add32_sat(temp35, temp321);
252*15dc779aSAndroid Build Coastguard Worker temp16 = ixheaac_add32_sat(temp36, temp322);
253*15dc779aSAndroid Build Coastguard Worker temp17 = ixheaac_add32_sat(temp37, temp323);
254*15dc779aSAndroid Build Coastguard Worker temp18 = ixheaac_add32_sat(temp38, temp324);
255*15dc779aSAndroid Build Coastguard Worker temp19 = ixheaac_add32_sat(temp39, temp325);
256*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_add32_sat(temp310, temp326);
257*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_add32_sat(temp311, temp327);
258*15dc779aSAndroid Build Coastguard Worker temp112 = ixheaac_add32_sat(temp312, temp328);
259*15dc779aSAndroid Build Coastguard Worker temp113 = ixheaac_add32_sat(temp313, temp329);
260*15dc779aSAndroid Build Coastguard Worker temp114 = ixheaac_add32_sat(temp314, temp330);
261*15dc779aSAndroid Build Coastguard Worker temp115 = ixheaac_add32_sat(temp315, temp331);
262*15dc779aSAndroid Build Coastguard Worker
263*15dc779aSAndroid Build Coastguard Worker tmp0 = ixheaac_add32_sat(temp10, temp18);
264*15dc779aSAndroid Build Coastguard Worker tmp2 = ixheaac_sub32_sat(temp10, temp18);
265*15dc779aSAndroid Build Coastguard Worker tmp1 = ixheaac_add32_sat(temp11, temp19);
266*15dc779aSAndroid Build Coastguard Worker tmp3 = ixheaac_sub32_sat(temp11, temp19);
267*15dc779aSAndroid Build Coastguard Worker tmp4 = ixheaac_add32_sat(temp12, temp110);
268*15dc779aSAndroid Build Coastguard Worker tmp6 = ixheaac_sub32_sat(temp12, temp110);
269*15dc779aSAndroid Build Coastguard Worker tmp5 = ixheaac_add32_sat(temp13, temp111);
270*15dc779aSAndroid Build Coastguard Worker tmp7 = ixheaac_sub32_sat(temp13, temp111);
271*15dc779aSAndroid Build Coastguard Worker tmp8 = ixheaac_add32_sat(temp14, temp112);
272*15dc779aSAndroid Build Coastguard Worker tmp10 = ixheaac_sub32_sat(temp14, temp112);
273*15dc779aSAndroid Build Coastguard Worker tmp9 = ixheaac_add32_sat(temp15, temp113);
274*15dc779aSAndroid Build Coastguard Worker tmp11 = ixheaac_sub32_sat(temp15, temp113);
275*15dc779aSAndroid Build Coastguard Worker tmp12 = ixheaac_add32_sat(temp16, temp114);
276*15dc779aSAndroid Build Coastguard Worker tmp14 = ixheaac_sub32_sat(temp16, temp114);
277*15dc779aSAndroid Build Coastguard Worker tmp13 = ixheaac_add32_sat(temp17, temp115);
278*15dc779aSAndroid Build Coastguard Worker tmp15 = ixheaac_sub32_sat(temp17, temp115);
279*15dc779aSAndroid Build Coastguard Worker
280*15dc779aSAndroid Build Coastguard Worker temp20 = ixheaac_add32_sat(tmp0, tmp8);
281*15dc779aSAndroid Build Coastguard Worker temp24 = ixheaac_sub32_sat(tmp0, tmp8);
282*15dc779aSAndroid Build Coastguard Worker temp21 = ixheaac_add32_sat(tmp1, tmp9);
283*15dc779aSAndroid Build Coastguard Worker temp25 = ixheaac_sub32_sat(tmp1, tmp9);
284*15dc779aSAndroid Build Coastguard Worker temp28 = ixheaac_sub32_sat(tmp2, tmp11);
285*15dc779aSAndroid Build Coastguard Worker temp210 = ixheaac_add32_sat(tmp2, tmp11);
286*15dc779aSAndroid Build Coastguard Worker temp29 = ixheaac_add32_sat(tmp3, tmp10);
287*15dc779aSAndroid Build Coastguard Worker temp211 = ixheaac_sub32_sat(tmp3, tmp10);
288*15dc779aSAndroid Build Coastguard Worker temp22 = ixheaac_add32_sat(tmp4, tmp12);
289*15dc779aSAndroid Build Coastguard Worker temp27 = ixheaac_sub32_sat(tmp4, tmp12);
290*15dc779aSAndroid Build Coastguard Worker temp23 = ixheaac_add32_sat(tmp5, tmp13);
291*15dc779aSAndroid Build Coastguard Worker temp26 = ixheaac_sub32_sat(tmp13, tmp5);
292*15dc779aSAndroid Build Coastguard Worker
293*15dc779aSAndroid Build Coastguard Worker tmp1 = ixheaac_add32_sat(tmp6, tmp14);
294*15dc779aSAndroid Build Coastguard Worker tmp2 = ixheaac_sub32_sat(tmp6, tmp14);
295*15dc779aSAndroid Build Coastguard Worker tmp0 = ixheaac_add32_sat(tmp7, tmp15);
296*15dc779aSAndroid Build Coastguard Worker tmp3 = ixheaac_sub32_sat(tmp7, tmp15);
297*15dc779aSAndroid Build Coastguard Worker
298*15dc779aSAndroid Build Coastguard Worker temp212 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(tmp0, tmp2), INV_SQRT2_Q15);
299*15dc779aSAndroid Build Coastguard Worker temp214 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(tmp0, tmp2), INV_SQRT2_Q15);
300*15dc779aSAndroid Build Coastguard Worker temp213 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(tmp3, tmp1), INV_SQRT2_Q15);
301*15dc779aSAndroid Build Coastguard Worker temp215 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(tmp1, tmp3), -INV_SQRT2_Q15);
302*15dc779aSAndroid Build Coastguard Worker
303*15dc779aSAndroid Build Coastguard Worker temp10 = ixheaac_sub32_sat(temp30, temp316);
304*15dc779aSAndroid Build Coastguard Worker temp11 = ixheaac_sub32_sat(temp31, temp317);
305*15dc779aSAndroid Build Coastguard Worker temp12 = ixheaac_sub32_sat(temp32, temp318);
306*15dc779aSAndroid Build Coastguard Worker temp13 = ixheaac_sub32_sat(temp33, temp319);
307*15dc779aSAndroid Build Coastguard Worker temp14 = ixheaac_sub32_sat(temp34, temp320);
308*15dc779aSAndroid Build Coastguard Worker temp15 = ixheaac_sub32_sat(temp35, temp321);
309*15dc779aSAndroid Build Coastguard Worker temp16 = ixheaac_sub32_sat(temp36, temp322);
310*15dc779aSAndroid Build Coastguard Worker temp17 = ixheaac_sub32_sat(temp37, temp323);
311*15dc779aSAndroid Build Coastguard Worker temp18 = ixheaac_sub32_sat(temp38, temp324);
312*15dc779aSAndroid Build Coastguard Worker temp19 = ixheaac_sub32_sat(temp39, temp325);
313*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_sub32_sat(temp310, temp326);
314*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_sub32_sat(temp311, temp327);
315*15dc779aSAndroid Build Coastguard Worker temp112 = ixheaac_sub32_sat(temp312, temp328);
316*15dc779aSAndroid Build Coastguard Worker temp113 = ixheaac_sub32_sat(temp313, temp329);
317*15dc779aSAndroid Build Coastguard Worker temp114 = ixheaac_sub32_sat(temp314, temp330);
318*15dc779aSAndroid Build Coastguard Worker temp115 = ixheaac_sub32_sat(temp315, temp331);
319*15dc779aSAndroid Build Coastguard Worker
320*15dc779aSAndroid Build Coastguard Worker temp30 = ixheaac_add32_sat(temp20, temp22);
321*15dc779aSAndroid Build Coastguard Worker temp316 = ixheaac_sub32_sat(temp20, temp22);
322*15dc779aSAndroid Build Coastguard Worker temp31 = ixheaac_add32_sat(temp21, temp23);
323*15dc779aSAndroid Build Coastguard Worker temp317 = ixheaac_sub32_sat(temp21, temp23);
324*15dc779aSAndroid Build Coastguard Worker temp38 = ixheaac_sub32_sat(temp24, temp26);
325*15dc779aSAndroid Build Coastguard Worker temp324 = ixheaac_add32_sat(temp24, temp26);
326*15dc779aSAndroid Build Coastguard Worker temp39 = ixheaac_sub32_sat(temp25, temp27);
327*15dc779aSAndroid Build Coastguard Worker temp325 = ixheaac_add32_sat(temp25, temp27);
328*15dc779aSAndroid Build Coastguard Worker temp312 = ixheaac_add32_sat(temp28, temp214);
329*15dc779aSAndroid Build Coastguard Worker temp328 = ixheaac_sub32_sat(temp28, temp214);
330*15dc779aSAndroid Build Coastguard Worker temp313 = ixheaac_add32_sat(temp29, temp215);
331*15dc779aSAndroid Build Coastguard Worker temp329 = ixheaac_sub32_sat(temp29, temp215);
332*15dc779aSAndroid Build Coastguard Worker temp34 = ixheaac_add32_sat(temp210, temp212);
333*15dc779aSAndroid Build Coastguard Worker temp320 = ixheaac_sub32_sat(temp210, temp212);
334*15dc779aSAndroid Build Coastguard Worker temp35 = ixheaac_add32_sat(temp211, temp213);
335*15dc779aSAndroid Build Coastguard Worker temp321 = ixheaac_sub32_sat(temp211, temp213);
336*15dc779aSAndroid Build Coastguard Worker
337*15dc779aSAndroid Build Coastguard Worker tmp9 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp12, temp114), -COS_3PI_BY_8_Q15);
338*15dc779aSAndroid Build Coastguard Worker tmp10 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp12, temp114), COS_PI_BY_8_Q15);
339*15dc779aSAndroid Build Coastguard Worker tmp8 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp13, temp115), COS_3PI_BY_8_Q15);
340*15dc779aSAndroid Build Coastguard Worker tmp11 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp13, temp115), COS_PI_BY_8_Q15);
341*15dc779aSAndroid Build Coastguard Worker tmp5 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp14, temp112), -INV_SQRT2_Q15);
342*15dc779aSAndroid Build Coastguard Worker tmp6 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp14, temp112), INV_SQRT2_Q15);
343*15dc779aSAndroid Build Coastguard Worker tmp4 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp15, temp113), INV_SQRT2_Q15);
344*15dc779aSAndroid Build Coastguard Worker tmp7 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp15, temp113), INV_SQRT2_Q15);
345*15dc779aSAndroid Build Coastguard Worker tmp13 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp16, temp110), -COS_PI_BY_8_Q15);
346*15dc779aSAndroid Build Coastguard Worker tmp14 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp16, temp110), COS_3PI_BY_8_Q15);
347*15dc779aSAndroid Build Coastguard Worker tmp12 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp17, temp111), COS_PI_BY_8_Q15);
348*15dc779aSAndroid Build Coastguard Worker tmp15 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp17, temp111), COS_3PI_BY_8_Q15);
349*15dc779aSAndroid Build Coastguard Worker
350*15dc779aSAndroid Build Coastguard Worker temp12 = ixheaac_sub32_sat(ixheaac_shl32(ixheaac_mult32x16in32(tmp8, SQRT2PLUS1_Q13), 3),
351*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(tmp12, SQRT2MINUS1_Q15));
352*15dc779aSAndroid Build Coastguard Worker temp13 = ixheaac_sub32_sat(ixheaac_shl32(ixheaac_mult32x16in32(tmp9, SQRT2PLUS1_Q13), 3),
353*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(tmp13, SQRT2MINUS1_Q15));
354*15dc779aSAndroid Build Coastguard Worker temp14 = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(tmp10, SQRT2MINUS1_Q15),
355*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32(ixheaac_mult32x16in32(tmp14, SQRT2PLUS1_Q13), 3));
356*15dc779aSAndroid Build Coastguard Worker temp15 = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(tmp11, SQRT2MINUS1_Q15),
357*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32(ixheaac_mult32x16in32(tmp15, SQRT2PLUS1_Q13), 3));
358*15dc779aSAndroid Build Coastguard Worker
359*15dc779aSAndroid Build Coastguard Worker tmp8 = ixheaac_add32_sat(tmp8, tmp12);
360*15dc779aSAndroid Build Coastguard Worker tmp9 = ixheaac_add32_sat(tmp9, tmp13);
361*15dc779aSAndroid Build Coastguard Worker tmp10 = ixheaac_add32_sat(tmp10, tmp14);
362*15dc779aSAndroid Build Coastguard Worker tmp11 = ixheaac_add32_sat(tmp11, tmp15);
363*15dc779aSAndroid Build Coastguard Worker temp16 = ixheaac_add32_sat(temp10, tmp4);
364*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_sub32_sat(temp10, tmp4);
365*15dc779aSAndroid Build Coastguard Worker temp17 = ixheaac_add32_sat(temp11, tmp5);
366*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_sub32_sat(temp11, tmp5);
367*15dc779aSAndroid Build Coastguard Worker
368*15dc779aSAndroid Build Coastguard Worker temp112 = ixheaac_sub32_sat(tmp6, temp19);
369*15dc779aSAndroid Build Coastguard Worker temp114 = ixheaac_add32_sat(tmp6, temp19);
370*15dc779aSAndroid Build Coastguard Worker temp113 = ixheaac_add32_sat(temp18, tmp7);
371*15dc779aSAndroid Build Coastguard Worker temp115 = ixheaac_sub32_sat(temp18, tmp7);
372*15dc779aSAndroid Build Coastguard Worker
373*15dc779aSAndroid Build Coastguard Worker tmp0 = ixheaac_sub32_sat(temp16, temp114);
374*15dc779aSAndroid Build Coastguard Worker tmp2 = ixheaac_add32_sat(temp16, temp114);
375*15dc779aSAndroid Build Coastguard Worker tmp1 = ixheaac_add32_sat(temp17, temp115);
376*15dc779aSAndroid Build Coastguard Worker tmp3 = ixheaac_sub32_sat(temp17, temp115);
377*15dc779aSAndroid Build Coastguard Worker tmp4 = ixheaac_add32_sat(temp110, temp112);
378*15dc779aSAndroid Build Coastguard Worker tmp6 = ixheaac_sub32_sat(temp110, temp112);
379*15dc779aSAndroid Build Coastguard Worker tmp5 = ixheaac_add32_sat(temp111, temp113);
380*15dc779aSAndroid Build Coastguard Worker tmp7 = ixheaac_sub32_sat(temp111, temp113);
381*15dc779aSAndroid Build Coastguard Worker
382*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_add32_sat(tmp8, tmp10);
383*15dc779aSAndroid Build Coastguard Worker tmp10 = ixheaac_sub32_sat(tmp8, tmp10);
384*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_add32_sat(tmp9, tmp11);
385*15dc779aSAndroid Build Coastguard Worker tmp11 = ixheaac_sub32_sat(tmp9, tmp11);
386*15dc779aSAndroid Build Coastguard Worker
387*15dc779aSAndroid Build Coastguard Worker tmp12 = ixheaac_add32_sat(temp12, temp14);
388*15dc779aSAndroid Build Coastguard Worker tmp14 = ixheaac_sub32_sat(temp12, temp14);
389*15dc779aSAndroid Build Coastguard Worker tmp13 = ixheaac_add32_sat(temp13, temp15);
390*15dc779aSAndroid Build Coastguard Worker tmp15 = ixheaac_sub32_sat(temp13, temp15);
391*15dc779aSAndroid Build Coastguard Worker
392*15dc779aSAndroid Build Coastguard Worker temp32 = ixheaac_add32_sat(tmp2, temp110);
393*15dc779aSAndroid Build Coastguard Worker temp318 = ixheaac_sub32_sat(tmp2, temp110);
394*15dc779aSAndroid Build Coastguard Worker temp33 = ixheaac_add32_sat(tmp3, temp111);
395*15dc779aSAndroid Build Coastguard Worker temp319 = ixheaac_sub32_sat(tmp3, temp111);
396*15dc779aSAndroid Build Coastguard Worker temp36 = ixheaac_add32_sat(tmp0, tmp12);
397*15dc779aSAndroid Build Coastguard Worker temp322 = ixheaac_sub32_sat(tmp0, tmp12);
398*15dc779aSAndroid Build Coastguard Worker temp37 = ixheaac_add32_sat(tmp1, tmp13);
399*15dc779aSAndroid Build Coastguard Worker temp323 = ixheaac_sub32_sat(tmp1, tmp13);
400*15dc779aSAndroid Build Coastguard Worker temp314 = ixheaac_add32_sat(tmp4, tmp10);
401*15dc779aSAndroid Build Coastguard Worker temp330 = ixheaac_sub32_sat(tmp4, tmp10);
402*15dc779aSAndroid Build Coastguard Worker temp315 = ixheaac_add32_sat(tmp5, tmp11);
403*15dc779aSAndroid Build Coastguard Worker temp331 = ixheaac_sub32_sat(tmp5, tmp11);
404*15dc779aSAndroid Build Coastguard Worker temp310 = ixheaac_add32_sat(tmp6, tmp14);
405*15dc779aSAndroid Build Coastguard Worker temp326 = ixheaac_sub32_sat(tmp6, tmp14);
406*15dc779aSAndroid Build Coastguard Worker temp311 = ixheaac_add32_sat(tmp7, tmp15);
407*15dc779aSAndroid Build Coastguard Worker temp327 = ixheaac_sub32_sat(tmp7, tmp15);
408*15dc779aSAndroid Build Coastguard Worker
409*15dc779aSAndroid Build Coastguard Worker temp10 = ixheaac_sub32_sat(vec[0], vec[32]);
410*15dc779aSAndroid Build Coastguard Worker temp11 = ixheaac_sub32_sat(vec[1], vec[33]);
411*15dc779aSAndroid Build Coastguard Worker temp12 = ixheaac_sub32_sat(vec[4], vec[36]);
412*15dc779aSAndroid Build Coastguard Worker temp13 = ixheaac_sub32_sat(vec[5], vec[37]);
413*15dc779aSAndroid Build Coastguard Worker temp14 = ixheaac_sub32_sat(vec[8], vec[40]);
414*15dc779aSAndroid Build Coastguard Worker temp15 = ixheaac_sub32_sat(vec[9], vec[41]);
415*15dc779aSAndroid Build Coastguard Worker temp16 = ixheaac_sub32_sat(vec[12], vec[44]);
416*15dc779aSAndroid Build Coastguard Worker temp17 = ixheaac_sub32_sat(vec[13], vec[45]);
417*15dc779aSAndroid Build Coastguard Worker temp18 = ixheaac_sub32_sat(vec[16], vec[48]);
418*15dc779aSAndroid Build Coastguard Worker temp19 = ixheaac_sub32_sat(vec[17], vec[49]);
419*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_sub32_sat(vec[20], vec[52]);
420*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_sub32_sat(vec[21], vec[53]);
421*15dc779aSAndroid Build Coastguard Worker temp112 = ixheaac_sub32_sat(vec[24], vec[56]);
422*15dc779aSAndroid Build Coastguard Worker temp113 = ixheaac_sub32_sat(vec[25], vec[57]);
423*15dc779aSAndroid Build Coastguard Worker temp114 = ixheaac_sub32_sat(vec[28], vec[60]);
424*15dc779aSAndroid Build Coastguard Worker temp115 = ixheaac_sub32_sat(vec[29], vec[61]);
425*15dc779aSAndroid Build Coastguard Worker
426*15dc779aSAndroid Build Coastguard Worker tmp9 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp12, temp114), -COS_3PI_BY_8_Q15);
427*15dc779aSAndroid Build Coastguard Worker tmp10 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp12, temp114), COS_PI_BY_8_Q15);
428*15dc779aSAndroid Build Coastguard Worker tmp8 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp13, temp115), COS_3PI_BY_8_Q15);
429*15dc779aSAndroid Build Coastguard Worker tmp11 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp13, temp115), COS_PI_BY_8_Q15);
430*15dc779aSAndroid Build Coastguard Worker tmp5 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp14, temp112), -INV_SQRT2_Q15);
431*15dc779aSAndroid Build Coastguard Worker tmp6 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp14, temp112), INV_SQRT2_Q15);
432*15dc779aSAndroid Build Coastguard Worker tmp4 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp15, temp113), INV_SQRT2_Q15);
433*15dc779aSAndroid Build Coastguard Worker tmp7 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp15, temp113), INV_SQRT2_Q15);
434*15dc779aSAndroid Build Coastguard Worker tmp13 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp16, temp110), -COS_PI_BY_8_Q15);
435*15dc779aSAndroid Build Coastguard Worker tmp14 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp16, temp110), COS_3PI_BY_8_Q15);
436*15dc779aSAndroid Build Coastguard Worker tmp12 = ixheaac_mult32x16in32_shl(ixheaac_add32_sat(temp17, temp111), COS_PI_BY_8_Q15);
437*15dc779aSAndroid Build Coastguard Worker tmp15 = ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(temp17, temp111), COS_3PI_BY_8_Q15);
438*15dc779aSAndroid Build Coastguard Worker
439*15dc779aSAndroid Build Coastguard Worker temp12 = ixheaac_sub32_sat(ixheaac_shl32(ixheaac_mult32x16in32(tmp8, SQRT2PLUS1_Q13), 3),
440*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(tmp12, SQRT2MINUS1_Q15));
441*15dc779aSAndroid Build Coastguard Worker temp13 = ixheaac_sub32_sat(ixheaac_shl32(ixheaac_mult32x16in32(tmp9, SQRT2PLUS1_Q13), 3),
442*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(tmp13, SQRT2MINUS1_Q15));
443*15dc779aSAndroid Build Coastguard Worker temp14 = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(tmp10, SQRT2MINUS1_Q15),
444*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32(ixheaac_mult32x16in32(tmp14, SQRT2PLUS1_Q13), 3));
445*15dc779aSAndroid Build Coastguard Worker temp15 = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(tmp11, SQRT2MINUS1_Q15),
446*15dc779aSAndroid Build Coastguard Worker ixheaac_shl32(ixheaac_mult32x16in32(tmp15, SQRT2PLUS1_Q13), 3));
447*15dc779aSAndroid Build Coastguard Worker
448*15dc779aSAndroid Build Coastguard Worker tmp8 = ixheaac_add32_sat(tmp8, tmp12);
449*15dc779aSAndroid Build Coastguard Worker tmp9 = ixheaac_add32_sat(tmp9, tmp13);
450*15dc779aSAndroid Build Coastguard Worker tmp10 = ixheaac_add32_sat(tmp10, tmp14);
451*15dc779aSAndroid Build Coastguard Worker tmp11 = ixheaac_add32_sat(tmp11, tmp15);
452*15dc779aSAndroid Build Coastguard Worker temp16 = ixheaac_add32_sat(temp10, tmp4);
453*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_sub32_sat(temp10, tmp4);
454*15dc779aSAndroid Build Coastguard Worker temp17 = ixheaac_add32_sat(temp11, tmp5);
455*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_sub32_sat(temp11, tmp5);
456*15dc779aSAndroid Build Coastguard Worker
457*15dc779aSAndroid Build Coastguard Worker temp112 = ixheaac_sub32_sat(tmp6, temp19);
458*15dc779aSAndroid Build Coastguard Worker temp114 = ixheaac_add32_sat(tmp6, temp19);
459*15dc779aSAndroid Build Coastguard Worker temp113 = ixheaac_add32_sat(temp18, tmp7);
460*15dc779aSAndroid Build Coastguard Worker temp115 = ixheaac_sub32_sat(temp18, tmp7);
461*15dc779aSAndroid Build Coastguard Worker
462*15dc779aSAndroid Build Coastguard Worker tmp0 = ixheaac_sub32_sat(temp16, temp114);
463*15dc779aSAndroid Build Coastguard Worker tmp2 = ixheaac_add32_sat(temp16, temp114);
464*15dc779aSAndroid Build Coastguard Worker tmp1 = ixheaac_add32_sat(temp17, temp115);
465*15dc779aSAndroid Build Coastguard Worker tmp3 = ixheaac_sub32_sat(temp17, temp115);
466*15dc779aSAndroid Build Coastguard Worker tmp4 = ixheaac_add32_sat(temp110, temp112);
467*15dc779aSAndroid Build Coastguard Worker tmp6 = ixheaac_sub32_sat(temp110, temp112);
468*15dc779aSAndroid Build Coastguard Worker tmp5 = ixheaac_add32_sat(temp111, temp113);
469*15dc779aSAndroid Build Coastguard Worker tmp7 = ixheaac_sub32_sat(temp111, temp113);
470*15dc779aSAndroid Build Coastguard Worker
471*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_add32_sat(tmp8, tmp10);
472*15dc779aSAndroid Build Coastguard Worker tmp10 = ixheaac_sub32_sat(tmp8, tmp10);
473*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_add32_sat(tmp9, tmp11);
474*15dc779aSAndroid Build Coastguard Worker tmp11 = ixheaac_sub32_sat(tmp9, tmp11);
475*15dc779aSAndroid Build Coastguard Worker
476*15dc779aSAndroid Build Coastguard Worker tmp12 = ixheaac_add32_sat(temp12, temp14);
477*15dc779aSAndroid Build Coastguard Worker tmp14 = ixheaac_sub32_sat(temp12, temp14);
478*15dc779aSAndroid Build Coastguard Worker tmp13 = ixheaac_add32_sat(temp13, temp15);
479*15dc779aSAndroid Build Coastguard Worker tmp15 = ixheaac_sub32_sat(temp13, temp15);
480*15dc779aSAndroid Build Coastguard Worker
481*15dc779aSAndroid Build Coastguard Worker temp10 = ixheaac_add32_sat(tmp2, temp110);
482*15dc779aSAndroid Build Coastguard Worker temp18 = ixheaac_sub32_sat(tmp2, temp110);
483*15dc779aSAndroid Build Coastguard Worker temp11 = ixheaac_add32_sat(tmp3, temp111);
484*15dc779aSAndroid Build Coastguard Worker temp19 = ixheaac_sub32_sat(tmp3, temp111);
485*15dc779aSAndroid Build Coastguard Worker temp12 = ixheaac_add32_sat(tmp0, tmp12);
486*15dc779aSAndroid Build Coastguard Worker temp110 = ixheaac_sub32_sat(tmp0, tmp12);
487*15dc779aSAndroid Build Coastguard Worker temp13 = ixheaac_add32_sat(tmp1, tmp13);
488*15dc779aSAndroid Build Coastguard Worker temp111 = ixheaac_sub32_sat(tmp1, tmp13);
489*15dc779aSAndroid Build Coastguard Worker temp16 = ixheaac_add32_sat(tmp4, tmp10);
490*15dc779aSAndroid Build Coastguard Worker temp114 = ixheaac_sub32_sat(tmp4, tmp10);
491*15dc779aSAndroid Build Coastguard Worker temp17 = ixheaac_add32_sat(tmp5, tmp11);
492*15dc779aSAndroid Build Coastguard Worker temp115 = ixheaac_sub32_sat(tmp5, tmp11);
493*15dc779aSAndroid Build Coastguard Worker temp14 = ixheaac_add32_sat(tmp6, tmp14);
494*15dc779aSAndroid Build Coastguard Worker temp112 = ixheaac_sub32_sat(tmp6, tmp14);
495*15dc779aSAndroid Build Coastguard Worker temp15 = ixheaac_add32_sat(tmp7, tmp15);
496*15dc779aSAndroid Build Coastguard Worker temp113 = ixheaac_sub32_sat(tmp7, tmp15);
497*15dc779aSAndroid Build Coastguard Worker
498*15dc779aSAndroid Build Coastguard Worker *vec++ = temp30;
499*15dc779aSAndroid Build Coastguard Worker *vec++ = temp31;
500*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp10, temp40);
501*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp11, temp41);
502*15dc779aSAndroid Build Coastguard Worker *vec++ = temp32;
503*15dc779aSAndroid Build Coastguard Worker *vec++ = temp33;
504*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp12, temp42);
505*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp13, temp43);
506*15dc779aSAndroid Build Coastguard Worker *vec++ = temp34;
507*15dc779aSAndroid Build Coastguard Worker *vec++ = temp35;
508*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp14, temp44);
509*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp15, temp45);
510*15dc779aSAndroid Build Coastguard Worker *vec++ = temp36;
511*15dc779aSAndroid Build Coastguard Worker *vec++ = temp37;
512*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp16, temp46);
513*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp17, temp47);
514*15dc779aSAndroid Build Coastguard Worker *vec++ = temp38;
515*15dc779aSAndroid Build Coastguard Worker *vec++ = temp39;
516*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp18, temp48);
517*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp19, temp49);
518*15dc779aSAndroid Build Coastguard Worker *vec++ = temp310;
519*15dc779aSAndroid Build Coastguard Worker *vec++ = temp311;
520*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp110, temp410);
521*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp111, temp411);
522*15dc779aSAndroid Build Coastguard Worker *vec++ = temp312;
523*15dc779aSAndroid Build Coastguard Worker *vec++ = temp313;
524*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp112, temp412);
525*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp113, temp413);
526*15dc779aSAndroid Build Coastguard Worker *vec++ = temp314;
527*15dc779aSAndroid Build Coastguard Worker *vec++ = temp315;
528*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp114, temp414);
529*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_add32_sat(temp115, temp415);
530*15dc779aSAndroid Build Coastguard Worker *vec++ = temp316;
531*15dc779aSAndroid Build Coastguard Worker *vec++ = temp317;
532*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp10, temp40);
533*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp11, temp41);
534*15dc779aSAndroid Build Coastguard Worker *vec++ = temp318;
535*15dc779aSAndroid Build Coastguard Worker *vec++ = temp319;
536*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp12, temp42);
537*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp13, temp43);
538*15dc779aSAndroid Build Coastguard Worker *vec++ = temp320;
539*15dc779aSAndroid Build Coastguard Worker *vec++ = temp321;
540*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp14, temp44);
541*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp15, temp45);
542*15dc779aSAndroid Build Coastguard Worker *vec++ = temp322;
543*15dc779aSAndroid Build Coastguard Worker *vec++ = temp323;
544*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp16, temp46);
545*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp17, temp47);
546*15dc779aSAndroid Build Coastguard Worker *vec++ = temp324;
547*15dc779aSAndroid Build Coastguard Worker *vec++ = temp325;
548*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp18, temp48);
549*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp19, temp49);
550*15dc779aSAndroid Build Coastguard Worker *vec++ = temp326;
551*15dc779aSAndroid Build Coastguard Worker *vec++ = temp327;
552*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp110, temp410);
553*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp111, temp411);
554*15dc779aSAndroid Build Coastguard Worker *vec++ = temp328;
555*15dc779aSAndroid Build Coastguard Worker *vec++ = temp329;
556*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp112, temp412);
557*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp113, temp413);
558*15dc779aSAndroid Build Coastguard Worker *vec++ = temp330;
559*15dc779aSAndroid Build Coastguard Worker *vec++ = temp331;
560*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp114, temp414);
561*15dc779aSAndroid Build Coastguard Worker *vec++ = ixheaac_sub32_sat(temp115, temp415);
562*15dc779aSAndroid Build Coastguard Worker }
563*15dc779aSAndroid Build Coastguard Worker
ixheaacd_cos_mod(WORD32 * subband,ia_mps_dec_qmf_tables_struct * qmf_table_ptr)564*15dc779aSAndroid Build Coastguard Worker static VOID ixheaacd_cos_mod(WORD32 *subband, ia_mps_dec_qmf_tables_struct *qmf_table_ptr) {
565*15dc779aSAndroid Build Coastguard Worker WORD32 i, m;
566*15dc779aSAndroid Build Coastguard Worker WORD16 wim, wre;
567*15dc779aSAndroid Build Coastguard Worker WORD32 temp_1;
568*15dc779aSAndroid Build Coastguard Worker const WORD16 *ptr1, *ptr2, *ptr3, *ptr4;
569*15dc779aSAndroid Build Coastguard Worker WORD32 re1, im1, re2, im2;
570*15dc779aSAndroid Build Coastguard Worker
571*15dc779aSAndroid Build Coastguard Worker m = WORD_LENGTH;
572*15dc779aSAndroid Build Coastguard Worker ptr1 = qmf_table_ptr->sbr_sin_twiddle;
573*15dc779aSAndroid Build Coastguard Worker ptr2 = qmf_table_ptr->sbr_cos_twiddle;
574*15dc779aSAndroid Build Coastguard Worker ptr3 = qmf_table_ptr->sbr_sin_twiddle + 31;
575*15dc779aSAndroid Build Coastguard Worker ptr4 = qmf_table_ptr->sbr_cos_twiddle + 31;
576*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 16; i++) {
577*15dc779aSAndroid Build Coastguard Worker temp_1 = (i << 1);
578*15dc779aSAndroid Build Coastguard Worker re1 = subband[temp_1];
579*15dc779aSAndroid Build Coastguard Worker im2 = subband[temp_1 + 1];
580*15dc779aSAndroid Build Coastguard Worker re2 = subband[62 - temp_1];
581*15dc779aSAndroid Build Coastguard Worker im1 = subband[63 - temp_1];
582*15dc779aSAndroid Build Coastguard Worker
583*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
584*15dc779aSAndroid Build Coastguard Worker wre = *ptr2++;
585*15dc779aSAndroid Build Coastguard Worker
586*15dc779aSAndroid Build Coastguard Worker subband[temp_1] = ixheaac_add32_sat(
587*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im1, wim), ixheaac_mult32x16in32_shl(re1, wre));
588*15dc779aSAndroid Build Coastguard Worker subband[temp_1 + 1] = ixheaac_sub32_sat(
589*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im1, wre), ixheaac_mult32x16in32_shl(re1, wim));
590*15dc779aSAndroid Build Coastguard Worker
591*15dc779aSAndroid Build Coastguard Worker wim = *ptr3--;
592*15dc779aSAndroid Build Coastguard Worker wre = *ptr4--;
593*15dc779aSAndroid Build Coastguard Worker
594*15dc779aSAndroid Build Coastguard Worker subband[62 - temp_1] = ixheaac_add32_sat(
595*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im2, wim), ixheaac_mult32x16in32_shl(re2, wre));
596*15dc779aSAndroid Build Coastguard Worker subband[63 - temp_1] = ixheaac_sub32_sat(
597*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im2, wre), ixheaac_mult32x16in32_shl(re2, wim));
598*15dc779aSAndroid Build Coastguard Worker }
599*15dc779aSAndroid Build Coastguard Worker
600*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft32(subband, qmf_table_ptr->fft_c);
601*15dc779aSAndroid Build Coastguard Worker
602*15dc779aSAndroid Build Coastguard Worker ptr1 = qmf_table_ptr->sbr_alt_sin_twiddle;
603*15dc779aSAndroid Build Coastguard Worker ptr2 = qmf_table_ptr->sbr_alt_sin_twiddle + m;
604*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
605*15dc779aSAndroid Build Coastguard Worker wre = *ptr2--;
606*15dc779aSAndroid Build Coastguard Worker
607*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 16; i++) {
608*15dc779aSAndroid Build Coastguard Worker temp_1 = (i << 1);
609*15dc779aSAndroid Build Coastguard Worker re1 = subband[temp_1];
610*15dc779aSAndroid Build Coastguard Worker im1 = subband[temp_1 + 1];
611*15dc779aSAndroid Build Coastguard Worker re2 = subband[62 - temp_1];
612*15dc779aSAndroid Build Coastguard Worker im2 = subband[63 - temp_1];
613*15dc779aSAndroid Build Coastguard Worker
614*15dc779aSAndroid Build Coastguard Worker subband[temp_1] = ixheaac_add32_sat(
615*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re1, wre), ixheaac_mult32x16in32_shl(im1, wim));
616*15dc779aSAndroid Build Coastguard Worker subband[63 - temp_1] = ixheaac_sub32_sat(
617*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re1, wim), ixheaac_mult32x16in32_shl(im1, wre));
618*15dc779aSAndroid Build Coastguard Worker
619*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
620*15dc779aSAndroid Build Coastguard Worker wre = *ptr2--;
621*15dc779aSAndroid Build Coastguard Worker
622*15dc779aSAndroid Build Coastguard Worker subband[62 - temp_1] = ixheaac_add32_sat(
623*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re2, wim), ixheaac_mult32x16in32_shl(im2, wre));
624*15dc779aSAndroid Build Coastguard Worker subband[temp_1 + 1] = ixheaac_sub32_sat(
625*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re2, wre), ixheaac_mult32x16in32_shl(im2, wim));
626*15dc779aSAndroid Build Coastguard Worker }
627*15dc779aSAndroid Build Coastguard Worker }
628*15dc779aSAndroid Build Coastguard Worker
ixheaacd_sin_mod(WORD32 * subband,ia_mps_dec_qmf_tables_struct * qmf_table_ptr)629*15dc779aSAndroid Build Coastguard Worker static VOID ixheaacd_sin_mod(WORD32 *subband, ia_mps_dec_qmf_tables_struct *qmf_table_ptr) {
630*15dc779aSAndroid Build Coastguard Worker WORD32 i, m;
631*15dc779aSAndroid Build Coastguard Worker WORD16 wre, wim;
632*15dc779aSAndroid Build Coastguard Worker WORD32 temp_1;
633*15dc779aSAndroid Build Coastguard Worker WORD32 re1, im1, re2, im2;
634*15dc779aSAndroid Build Coastguard Worker const WORD16 *ptr1, *ptr2, *ptr3, *ptr4;
635*15dc779aSAndroid Build Coastguard Worker
636*15dc779aSAndroid Build Coastguard Worker ptr1 = qmf_table_ptr->sbr_sin_twiddle;
637*15dc779aSAndroid Build Coastguard Worker ptr2 = qmf_table_ptr->sbr_cos_twiddle;
638*15dc779aSAndroid Build Coastguard Worker ptr3 = qmf_table_ptr->sbr_sin_twiddle + 31;
639*15dc779aSAndroid Build Coastguard Worker ptr4 = qmf_table_ptr->sbr_cos_twiddle + 31;
640*15dc779aSAndroid Build Coastguard Worker
641*15dc779aSAndroid Build Coastguard Worker m = WORD_LENGTH;
642*15dc779aSAndroid Build Coastguard Worker
643*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 16; i++) {
644*15dc779aSAndroid Build Coastguard Worker temp_1 = (i << 1);
645*15dc779aSAndroid Build Coastguard Worker
646*15dc779aSAndroid Build Coastguard Worker re1 = subband[temp_1];
647*15dc779aSAndroid Build Coastguard Worker im2 = subband[temp_1 + 1];
648*15dc779aSAndroid Build Coastguard Worker re2 = subband[62 - temp_1];
649*15dc779aSAndroid Build Coastguard Worker im1 = subband[63 - temp_1];
650*15dc779aSAndroid Build Coastguard Worker
651*15dc779aSAndroid Build Coastguard Worker wre = *ptr1++;
652*15dc779aSAndroid Build Coastguard Worker wim = *ptr2++;
653*15dc779aSAndroid Build Coastguard Worker
654*15dc779aSAndroid Build Coastguard Worker subband[temp_1 + 1] = ixheaac_add32_sat(
655*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im1, wim), ixheaac_mult32x16in32_shl(re1, wre));
656*15dc779aSAndroid Build Coastguard Worker subband[temp_1] = ixheaac_sub32_sat(
657*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im1, wre), ixheaac_mult32x16in32_shl(re1, wim));
658*15dc779aSAndroid Build Coastguard Worker
659*15dc779aSAndroid Build Coastguard Worker wre = *ptr3--;
660*15dc779aSAndroid Build Coastguard Worker wim = *ptr4--;
661*15dc779aSAndroid Build Coastguard Worker
662*15dc779aSAndroid Build Coastguard Worker subband[63 - temp_1] = ixheaac_add32_sat(
663*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im2, wim), ixheaac_mult32x16in32_shl(re2, wre));
664*15dc779aSAndroid Build Coastguard Worker subband[62 - temp_1] = ixheaac_sub32_sat(
665*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im2, wre), ixheaac_mult32x16in32_shl(re2, wim));
666*15dc779aSAndroid Build Coastguard Worker }
667*15dc779aSAndroid Build Coastguard Worker
668*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft32(subband, qmf_table_ptr->fft_c);
669*15dc779aSAndroid Build Coastguard Worker
670*15dc779aSAndroid Build Coastguard Worker ptr1 = qmf_table_ptr->sbr_alt_sin_twiddle;
671*15dc779aSAndroid Build Coastguard Worker ptr2 = qmf_table_ptr->sbr_alt_sin_twiddle + m;
672*15dc779aSAndroid Build Coastguard Worker
673*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
674*15dc779aSAndroid Build Coastguard Worker wre = *ptr2--;
675*15dc779aSAndroid Build Coastguard Worker
676*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 16; i++) {
677*15dc779aSAndroid Build Coastguard Worker temp_1 = (i << 1);
678*15dc779aSAndroid Build Coastguard Worker re1 = subband[temp_1];
679*15dc779aSAndroid Build Coastguard Worker im1 = subband[temp_1 + 1];
680*15dc779aSAndroid Build Coastguard Worker re2 = subband[62 - temp_1];
681*15dc779aSAndroid Build Coastguard Worker im2 = subband[63 - temp_1];
682*15dc779aSAndroid Build Coastguard Worker
683*15dc779aSAndroid Build Coastguard Worker subband[63 - temp_1] = -ixheaac_add32_sat(
684*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re1, wre), ixheaac_mult32x16in32_shl(im1, wim));
685*15dc779aSAndroid Build Coastguard Worker subband[temp_1] = -ixheaac_sub32_sat(
686*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re1, wim), ixheaac_mult32x16in32_shl(im1, wre));
687*15dc779aSAndroid Build Coastguard Worker
688*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
689*15dc779aSAndroid Build Coastguard Worker wre = *ptr2--;
690*15dc779aSAndroid Build Coastguard Worker
691*15dc779aSAndroid Build Coastguard Worker subband[temp_1 + 1] = -ixheaac_add32_sat(
692*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re2, wim), ixheaac_mult32x16in32_shl(im2, wre));
693*15dc779aSAndroid Build Coastguard Worker subband[62 - temp_1] = -ixheaac_sub32_sat(
694*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(re2, wre), ixheaac_mult32x16in32_shl(im2, wim));
695*15dc779aSAndroid Build Coastguard Worker }
696*15dc779aSAndroid Build Coastguard Worker }
697*15dc779aSAndroid Build Coastguard Worker
ixheaacd_inverse_modulation(WORD32 * qmf_real,WORD32 * qmf_imag,ia_mps_dec_qmf_tables_struct * qmf_table_ptr)698*15dc779aSAndroid Build Coastguard Worker static VOID ixheaacd_inverse_modulation(WORD32 *qmf_real, WORD32 *qmf_imag,
699*15dc779aSAndroid Build Coastguard Worker ia_mps_dec_qmf_tables_struct *qmf_table_ptr) {
700*15dc779aSAndroid Build Coastguard Worker WORD32 i;
701*15dc779aSAndroid Build Coastguard Worker
702*15dc779aSAndroid Build Coastguard Worker const WORD16 *ptr1, *ptr2, *ptr3, *ptr4;
703*15dc779aSAndroid Build Coastguard Worker const WORD16 *fft = qmf_table_ptr->fft_c;
704*15dc779aSAndroid Build Coastguard Worker WORD16 wre, wim;
705*15dc779aSAndroid Build Coastguard Worker WORD32 re1, im1, re2, im2;
706*15dc779aSAndroid Build Coastguard Worker WORD32 re12, im12, re22, im22;
707*15dc779aSAndroid Build Coastguard Worker WORD32 temp_1;
708*15dc779aSAndroid Build Coastguard Worker
709*15dc779aSAndroid Build Coastguard Worker ptr1 = qmf_table_ptr->sbr_sin_twiddle;
710*15dc779aSAndroid Build Coastguard Worker ptr2 = qmf_table_ptr->sbr_cos_twiddle;
711*15dc779aSAndroid Build Coastguard Worker ptr3 = ptr1 + 31;
712*15dc779aSAndroid Build Coastguard Worker ptr4 = ptr2 + 31;
713*15dc779aSAndroid Build Coastguard Worker
714*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 16; i++) {
715*15dc779aSAndroid Build Coastguard Worker temp_1 = (i << 1);
716*15dc779aSAndroid Build Coastguard Worker
717*15dc779aSAndroid Build Coastguard Worker re1 = qmf_real[temp_1];
718*15dc779aSAndroid Build Coastguard Worker im1 = qmf_real[63 - temp_1];
719*15dc779aSAndroid Build Coastguard Worker
720*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
721*15dc779aSAndroid Build Coastguard Worker wre = *ptr2++;
722*15dc779aSAndroid Build Coastguard Worker
723*15dc779aSAndroid Build Coastguard Worker qmf_real[temp_1] = ixheaac_add32_sat(
724*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im1, wim), ixheaac_mult32x16in32_shl(re1, wre));
725*15dc779aSAndroid Build Coastguard Worker
726*15dc779aSAndroid Build Coastguard Worker re12 = qmf_imag[temp_1];
727*15dc779aSAndroid Build Coastguard Worker im12 = qmf_imag[63 - temp_1];
728*15dc779aSAndroid Build Coastguard Worker
729*15dc779aSAndroid Build Coastguard Worker qmf_imag[temp_1] = ixheaac_sub32_sat(
730*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im12, wim), ixheaac_mult32x16in32_shl(re12, wre));
731*15dc779aSAndroid Build Coastguard Worker
732*15dc779aSAndroid Build Coastguard Worker im2 = qmf_real[temp_1 + 1];
733*15dc779aSAndroid Build Coastguard Worker
734*15dc779aSAndroid Build Coastguard Worker qmf_real[temp_1 + 1] = ixheaac_sub32_sat(
735*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im1, wre), ixheaac_mult32x16in32_shl(re1, wim));
736*15dc779aSAndroid Build Coastguard Worker
737*15dc779aSAndroid Build Coastguard Worker im22 = qmf_imag[temp_1 + 1];
738*15dc779aSAndroid Build Coastguard Worker
739*15dc779aSAndroid Build Coastguard Worker qmf_imag[temp_1 + 1] = ixheaac_add32_sat(
740*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im12, wre), ixheaac_mult32x16in32_shl(re12, wim));
741*15dc779aSAndroid Build Coastguard Worker
742*15dc779aSAndroid Build Coastguard Worker wim = *ptr3--;
743*15dc779aSAndroid Build Coastguard Worker wre = *ptr4--;
744*15dc779aSAndroid Build Coastguard Worker
745*15dc779aSAndroid Build Coastguard Worker re2 = qmf_real[62 - temp_1];
746*15dc779aSAndroid Build Coastguard Worker
747*15dc779aSAndroid Build Coastguard Worker qmf_real[62 - temp_1] = ixheaac_add32_sat(
748*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im2, wim), ixheaac_mult32x16in32_shl(re2, wre));
749*15dc779aSAndroid Build Coastguard Worker
750*15dc779aSAndroid Build Coastguard Worker re22 = qmf_imag[62 - temp_1];
751*15dc779aSAndroid Build Coastguard Worker
752*15dc779aSAndroid Build Coastguard Worker qmf_imag[62 - temp_1] = ixheaac_sub32_sat(
753*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im22, wim), ixheaac_mult32x16in32_shl(re22, wre));
754*15dc779aSAndroid Build Coastguard Worker
755*15dc779aSAndroid Build Coastguard Worker qmf_real[63 - temp_1] = ixheaac_sub32_sat(
756*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im2, wre), ixheaac_mult32x16in32_shl(re2, wim));
757*15dc779aSAndroid Build Coastguard Worker qmf_imag[63 - temp_1] = ixheaac_add32_sat(
758*15dc779aSAndroid Build Coastguard Worker ixheaac_mult32x16in32_shl(im22, wre), ixheaac_mult32x16in32_shl(re22, wim));
759*15dc779aSAndroid Build Coastguard Worker }
760*15dc779aSAndroid Build Coastguard Worker
761*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft32(qmf_real, fft);
762*15dc779aSAndroid Build Coastguard Worker ixheaacd_fft32(qmf_imag, fft);
763*15dc779aSAndroid Build Coastguard Worker
764*15dc779aSAndroid Build Coastguard Worker ptr1 = qmf_table_ptr->sbr_alt_sin_twiddle;
765*15dc779aSAndroid Build Coastguard Worker ptr2 = ptr1 + 32;
766*15dc779aSAndroid Build Coastguard Worker
767*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
768*15dc779aSAndroid Build Coastguard Worker wre = *ptr2--;
769*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 16; i++) {
770*15dc779aSAndroid Build Coastguard Worker temp_1 = (i << 1);
771*15dc779aSAndroid Build Coastguard Worker re1 = qmf_real[temp_1];
772*15dc779aSAndroid Build Coastguard Worker im1 = qmf_real[temp_1 + 1];
773*15dc779aSAndroid Build Coastguard Worker re12 = qmf_imag[temp_1];
774*15dc779aSAndroid Build Coastguard Worker im12 = qmf_imag[temp_1 + 1];
775*15dc779aSAndroid Build Coastguard Worker
776*15dc779aSAndroid Build Coastguard Worker qmf_real[temp_1] = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(
777*15dc779aSAndroid Build Coastguard Worker im12, re1), wre), ixheaac_mult32x16in32_shl(ixheaac_add32_sat(im1, re12), wim));
778*15dc779aSAndroid Build Coastguard Worker qmf_imag[temp_1] = ixheaac_add32_sat(ixheaac_mult32x16in32_shl((ixheaac_add32_sat(
779*15dc779aSAndroid Build Coastguard Worker im12, re1)), wre), ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(im1, re12), wim));
780*15dc779aSAndroid Build Coastguard Worker
781*15dc779aSAndroid Build Coastguard Worker im2 = qmf_real[63 - temp_1];
782*15dc779aSAndroid Build Coastguard Worker im22 = qmf_imag[63 - temp_1];
783*15dc779aSAndroid Build Coastguard Worker
784*15dc779aSAndroid Build Coastguard Worker qmf_real[63 - temp_1] = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(
785*15dc779aSAndroid Build Coastguard Worker im1, re12), wre), ixheaac_mult32x16in32_shl(ixheaac_add32_sat(im12, re1), wim));
786*15dc779aSAndroid Build Coastguard Worker qmf_imag[63 - temp_1] = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(
787*15dc779aSAndroid Build Coastguard Worker re1, im12), wim), ixheaac_mult32x16in32_shl(ixheaac_add32_sat(im1, re12), wre));
788*15dc779aSAndroid Build Coastguard Worker
789*15dc779aSAndroid Build Coastguard Worker wim = *ptr1++;
790*15dc779aSAndroid Build Coastguard Worker wre = *ptr2--;
791*15dc779aSAndroid Build Coastguard Worker re2 = qmf_real[62 - temp_1];
792*15dc779aSAndroid Build Coastguard Worker re22 = qmf_imag[62 - temp_1];
793*15dc779aSAndroid Build Coastguard Worker
794*15dc779aSAndroid Build Coastguard Worker qmf_real[temp_1 + 1] = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(
795*15dc779aSAndroid Build Coastguard Worker im2, re22), wim), ixheaac_mult32x16in32_shl(ixheaac_add32_sat(im22, re2), wre));
796*15dc779aSAndroid Build Coastguard Worker qmf_imag[temp_1 + 1] = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(
797*15dc779aSAndroid Build Coastguard Worker re2, im22), wre), ixheaac_mult32x16in32_shl(ixheaac_add32_sat(im2, re22), wim));
798*15dc779aSAndroid Build Coastguard Worker
799*15dc779aSAndroid Build Coastguard Worker qmf_real[62 - temp_1] = ixheaac_sub32_sat(ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(
800*15dc779aSAndroid Build Coastguard Worker im22, re2), wim), ixheaac_mult32x16in32_shl(ixheaac_add32_sat(im2, re22), wre));
801*15dc779aSAndroid Build Coastguard Worker qmf_imag[62 - temp_1] = ixheaac_add32_sat(ixheaac_mult32x16in32_shl(ixheaac_add32_sat(
802*15dc779aSAndroid Build Coastguard Worker re2, im22), wim), ixheaac_mult32x16in32_shl(ixheaac_sub32_sat(im2, re22), wre));
803*15dc779aSAndroid Build Coastguard Worker }
804*15dc779aSAndroid Build Coastguard Worker }
805*15dc779aSAndroid Build Coastguard Worker
ixheaacd_calculate_syn_filt_bank_res64(ia_mps_dec_qmf_syn_filter_bank * syn,WORD32 * sr,WORD32 * si,WORD32 * time_sig,WORD32 channel,WORD32 resolution,WORD32 nr_samples,ia_mps_dec_qmf_tables_struct * qmf_table_ptr)806*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_calculate_syn_filt_bank_res64(ia_mps_dec_qmf_syn_filter_bank *syn, WORD32 *sr,
807*15dc779aSAndroid Build Coastguard Worker WORD32 *si, WORD32 *time_sig, WORD32 channel,
808*15dc779aSAndroid Build Coastguard Worker WORD32 resolution, WORD32 nr_samples,
809*15dc779aSAndroid Build Coastguard Worker ia_mps_dec_qmf_tables_struct *qmf_table_ptr) {
810*15dc779aSAndroid Build Coastguard Worker WORD32 j, k;
811*15dc779aSAndroid Build Coastguard Worker WORD32 *synth_buf;
812*15dc779aSAndroid Build Coastguard Worker WORD32 *syn_buf_p1, *syn_buf_p2, *syn_buf_p3;
813*15dc779aSAndroid Build Coastguard Worker WORD32 val;
814*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_1, *p_filter_6;
815*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_2, *p_filter_7;
816*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_3, *p_filter_8;
817*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_4, *p_filter_9;
818*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_5, *p_filter_10;
819*15dc779aSAndroid Build Coastguard Worker
820*15dc779aSAndroid Build Coastguard Worker WORD32 *p_sr, *p_si;
821*15dc779aSAndroid Build Coastguard Worker
822*15dc779aSAndroid Build Coastguard Worker WORD32 *sbr_qmf_states_synthesis = syn->sbr_qmf_states_synthesis;
823*15dc779aSAndroid Build Coastguard Worker synth_buf = &(sbr_qmf_states_synthesis[channel * QMF_FILTER_STATE_SYN_SIZE_MPS]);
824*15dc779aSAndroid Build Coastguard Worker
825*15dc779aSAndroid Build Coastguard Worker p_sr = sr;
826*15dc779aSAndroid Build Coastguard Worker p_si = si;
827*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < nr_samples; k++) {
828*15dc779aSAndroid Build Coastguard Worker WORD32 *new_samp = p_si;
829*15dc779aSAndroid Build Coastguard Worker WORD32 *new_samp1, *new_samp2;
830*15dc779aSAndroid Build Coastguard Worker
831*15dc779aSAndroid Build Coastguard Worker ixheaacd_inverse_modulation(p_sr, p_si, qmf_table_ptr);
832*15dc779aSAndroid Build Coastguard Worker
833*15dc779aSAndroid Build Coastguard Worker p_filter_1 = syn->p_filter_syn;
834*15dc779aSAndroid Build Coastguard Worker p_filter_2 = p_filter_1 + 64;
835*15dc779aSAndroid Build Coastguard Worker p_filter_3 = p_filter_2 + 65;
836*15dc779aSAndroid Build Coastguard Worker p_filter_4 = p_filter_3 + 65;
837*15dc779aSAndroid Build Coastguard Worker p_filter_5 = p_filter_4 + 65;
838*15dc779aSAndroid Build Coastguard Worker
839*15dc779aSAndroid Build Coastguard Worker syn_buf_p1 = &synth_buf[63];
840*15dc779aSAndroid Build Coastguard Worker val = *(p_sr);
841*15dc779aSAndroid Build Coastguard Worker
842*15dc779aSAndroid Build Coastguard Worker {
843*15dc779aSAndroid Build Coastguard Worker WORD32 val1 = *(p_si + 63);
844*15dc779aSAndroid Build Coastguard Worker syn_buf_p2 = &synth_buf[63];
845*15dc779aSAndroid Build Coastguard Worker
846*15dc779aSAndroid Build Coastguard Worker *time_sig++ = ixheaac_add32_sat(syn_buf_p1[512],
847*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*(p_filter_5 + 65), val));
848*15dc779aSAndroid Build Coastguard Worker syn_buf_p1[512] = ixheaac_add32_sat(syn_buf_p2[448],
849*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*(p_filter_5 + 64), val1));
850*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[448] = ixheaac_add32_sat(syn_buf_p1[384],
851*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_5++, val));
852*15dc779aSAndroid Build Coastguard Worker syn_buf_p1[384] = ixheaac_add32_sat(syn_buf_p2[320],
853*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*(p_filter_4 + 64), val1));
854*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[320] = ixheaac_add32_sat(syn_buf_p1[256],
855*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_4++, val));
856*15dc779aSAndroid Build Coastguard Worker syn_buf_p1[256] = ixheaac_add32_sat(syn_buf_p2[192],
857*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*(p_filter_3 + 64), val1));
858*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[192] = ixheaac_add32_sat(syn_buf_p1[128],
859*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_3++, val));
860*15dc779aSAndroid Build Coastguard Worker syn_buf_p1[128] = ixheaac_add32_sat(syn_buf_p2[64],
861*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*(p_filter_2 + 64), val1));
862*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[64] = ixheaac_add32_sat(syn_buf_p1[0],
863*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_2++, val));
864*15dc779aSAndroid Build Coastguard Worker syn_buf_p1[0] = ixheaacd_mps_mult32_shr_30(*(p_filter_1 + 63), val1);
865*15dc779aSAndroid Build Coastguard Worker }
866*15dc779aSAndroid Build Coastguard Worker p_filter_6 = p_filter_1 + 62;
867*15dc779aSAndroid Build Coastguard Worker p_filter_7 = p_filter_2 + 62;
868*15dc779aSAndroid Build Coastguard Worker p_filter_8 = p_filter_3 + 62;
869*15dc779aSAndroid Build Coastguard Worker p_filter_9 = p_filter_4 + 62;
870*15dc779aSAndroid Build Coastguard Worker p_filter_10 = p_filter_5 + 62;
871*15dc779aSAndroid Build Coastguard Worker time_sig += 62;
872*15dc779aSAndroid Build Coastguard Worker
873*15dc779aSAndroid Build Coastguard Worker syn_buf_p2 = synth_buf;
874*15dc779aSAndroid Build Coastguard Worker syn_buf_p3 = syn_buf_p2;
875*15dc779aSAndroid Build Coastguard Worker new_samp1 = p_sr + 1;
876*15dc779aSAndroid Build Coastguard Worker new_samp2 = p_sr + 63;
877*15dc779aSAndroid Build Coastguard Worker for (j = 0; j < resolution - 1; j++) {
878*15dc779aSAndroid Build Coastguard Worker *time_sig-- = ixheaac_add32_sat(syn_buf_p3[512],
879*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_6--, (*new_samp2)));
880*15dc779aSAndroid Build Coastguard Worker syn_buf_p3[512] = ixheaac_add32_sat(syn_buf_p2[448],
881*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_5++, (*new_samp)));
882*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[448] = ixheaac_add32_sat(syn_buf_p3[384],
883*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_7--, (*new_samp2)));
884*15dc779aSAndroid Build Coastguard Worker syn_buf_p3[384] = ixheaac_add32_sat(syn_buf_p2[320],
885*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_4++, (*new_samp)));
886*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[320] = ixheaac_add32_sat(syn_buf_p3[256],
887*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_8--, (*new_samp2)));
888*15dc779aSAndroid Build Coastguard Worker syn_buf_p3[256] = ixheaac_add32_sat(syn_buf_p2[192],
889*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_3++, (*new_samp)));
890*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[192] = ixheaac_add32_sat(syn_buf_p3[128],
891*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_9--, (*new_samp2)));
892*15dc779aSAndroid Build Coastguard Worker syn_buf_p3[128] = ixheaac_add32_sat(syn_buf_p2[64],
893*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_2++, (*new_samp)));
894*15dc779aSAndroid Build Coastguard Worker syn_buf_p2[64] = ixheaac_add32_sat(syn_buf_p3[0],
895*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_10--, (*new_samp2)));
896*15dc779aSAndroid Build Coastguard Worker syn_buf_p3[0] = ixheaacd_mps_mult32_shr_30(*p_filter_1++, (*new_samp));
897*15dc779aSAndroid Build Coastguard Worker
898*15dc779aSAndroid Build Coastguard Worker new_samp++;
899*15dc779aSAndroid Build Coastguard Worker syn_buf_p2++;
900*15dc779aSAndroid Build Coastguard Worker
901*15dc779aSAndroid Build Coastguard Worker new_samp1++;
902*15dc779aSAndroid Build Coastguard Worker new_samp2--;
903*15dc779aSAndroid Build Coastguard Worker syn_buf_p3++;
904*15dc779aSAndroid Build Coastguard Worker }
905*15dc779aSAndroid Build Coastguard Worker
906*15dc779aSAndroid Build Coastguard Worker time_sig += 64;
907*15dc779aSAndroid Build Coastguard Worker
908*15dc779aSAndroid Build Coastguard Worker p_sr += MAX_HYBRID_BANDS;
909*15dc779aSAndroid Build Coastguard Worker p_si += MAX_HYBRID_BANDS;
910*15dc779aSAndroid Build Coastguard Worker }
911*15dc779aSAndroid Build Coastguard Worker }
912*15dc779aSAndroid Build Coastguard Worker
ixheaacd_calculate_syn_filt_bank(ia_mps_dec_qmf_syn_filter_bank * syn,WORD32 * sr,WORD32 * si,WORD32 * time_sig,WORD32 channel,WORD32 resolution,WORD32 nr_samples,ia_mps_dec_qmf_tables_struct * qmf_table_ptr)913*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_calculate_syn_filt_bank(ia_mps_dec_qmf_syn_filter_bank *syn, WORD32 *sr, WORD32 *si,
914*15dc779aSAndroid Build Coastguard Worker WORD32 *time_sig, WORD32 channel, WORD32 resolution,
915*15dc779aSAndroid Build Coastguard Worker WORD32 nr_samples,
916*15dc779aSAndroid Build Coastguard Worker ia_mps_dec_qmf_tables_struct *qmf_table_ptr) {
917*15dc779aSAndroid Build Coastguard Worker WORD32 j, k;
918*15dc779aSAndroid Build Coastguard Worker WORD32 *synth_buf;
919*15dc779aSAndroid Build Coastguard Worker WORD32 *p_sr, *p_si;
920*15dc779aSAndroid Build Coastguard Worker WORD32 *buf_ptr;
921*15dc779aSAndroid Build Coastguard Worker WORD32 resx2 = resolution << 1;
922*15dc779aSAndroid Build Coastguard Worker WORD32 *sbr_qmf_states_synthesis = syn->sbr_qmf_states_synthesis;
923*15dc779aSAndroid Build Coastguard Worker
924*15dc779aSAndroid Build Coastguard Worker synth_buf = &(sbr_qmf_states_synthesis[channel * QMF_FILTER_STATE_SYN_SIZE_MPS]);
925*15dc779aSAndroid Build Coastguard Worker
926*15dc779aSAndroid Build Coastguard Worker p_sr = sr;
927*15dc779aSAndroid Build Coastguard Worker p_si = si;
928*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < nr_samples; k++) {
929*15dc779aSAndroid Build Coastguard Worker WORD32 *new_samp = p_si + 63;
930*15dc779aSAndroid Build Coastguard Worker
931*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_1 = syn->p_filter_syn;
932*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_2 = p_filter_1 + 65;
933*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_3 = p_filter_2 + 65;
934*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_4 = p_filter_3 + 65;
935*15dc779aSAndroid Build Coastguard Worker const WORD32 *p_filter_5 = p_filter_4 + 65;
936*15dc779aSAndroid Build Coastguard Worker
937*15dc779aSAndroid Build Coastguard Worker ixheaacd_inverse_modulation(p_sr, p_si, qmf_table_ptr);
938*15dc779aSAndroid Build Coastguard Worker
939*15dc779aSAndroid Build Coastguard Worker for (j = 0; j < resolution; j++) {
940*15dc779aSAndroid Build Coastguard Worker synth_buf[j] = ixheaacd_mps_mult32_shr_30(*p_filter_1++, (*new_samp));
941*15dc779aSAndroid Build Coastguard Worker synth_buf[resx2 + j] = ixheaac_add32_sat(synth_buf[resx2 + j],
942*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_2++, (*new_samp)));
943*15dc779aSAndroid Build Coastguard Worker synth_buf[resx2 * 2 + j] = ixheaac_add32_sat(synth_buf[resx2 * 2 + j],
944*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_3++, (*new_samp)));
945*15dc779aSAndroid Build Coastguard Worker synth_buf[resx2 * 3 + j] = ixheaac_add32_sat(synth_buf[resx2 * 3 + j],
946*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_4++, (*new_samp)));
947*15dc779aSAndroid Build Coastguard Worker synth_buf[resx2 * 4 + j] = ixheaac_add32_sat(synth_buf[resx2 * 4 + j],
948*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_5++, (*new_samp)));
949*15dc779aSAndroid Build Coastguard Worker
950*15dc779aSAndroid Build Coastguard Worker new_samp--;
951*15dc779aSAndroid Build Coastguard Worker }
952*15dc779aSAndroid Build Coastguard Worker
953*15dc779aSAndroid Build Coastguard Worker synth_buf[resx2 - 1] = ixheaac_add32_sat(synth_buf[resx2 - 1],
954*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_1++, *p_sr));
955*15dc779aSAndroid Build Coastguard Worker synth_buf[resx2 * 2 - 1] = ixheaac_add32_sat(synth_buf[resx2 * 2 - 1],
956*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_2++, *p_sr));
957*15dc779aSAndroid Build Coastguard Worker synth_buf[3 * resx2 - 1] = ixheaac_add32_sat(synth_buf[3 * resx2 - 1],
958*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_3++, *p_sr));
959*15dc779aSAndroid Build Coastguard Worker synth_buf[4 * resx2 - 1] = ixheaac_add32_sat(synth_buf[4 * resx2 - 1],
960*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_4++, *p_sr));
961*15dc779aSAndroid Build Coastguard Worker *time_sig++ = ixheaac_add32_sat(synth_buf[5 * resx2 - 1],
962*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*p_filter_5++, *p_sr));
963*15dc779aSAndroid Build Coastguard Worker
964*15dc779aSAndroid Build Coastguard Worker p_filter_1 -= 2;
965*15dc779aSAndroid Build Coastguard Worker p_filter_2 -= 2;
966*15dc779aSAndroid Build Coastguard Worker p_filter_3 -= 2;
967*15dc779aSAndroid Build Coastguard Worker p_filter_4 -= 2;
968*15dc779aSAndroid Build Coastguard Worker p_filter_5 -= 2;
969*15dc779aSAndroid Build Coastguard Worker
970*15dc779aSAndroid Build Coastguard Worker new_samp = p_sr + resolution - 1;
971*15dc779aSAndroid Build Coastguard Worker
972*15dc779aSAndroid Build Coastguard Worker for (j = 0; j < resolution - 1; j++) {
973*15dc779aSAndroid Build Coastguard Worker synth_buf[resolution + j] = ixheaac_add32_sat(synth_buf[resolution + j],
974*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*--p_filter_5, (*new_samp)));
975*15dc779aSAndroid Build Coastguard Worker synth_buf[resolution * (3) + j] =
976*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(synth_buf[resolution * (3) + j],
977*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*--p_filter_4, (*new_samp)));
978*15dc779aSAndroid Build Coastguard Worker synth_buf[resolution * (5) + j] =
979*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(synth_buf[resolution * (5) + j],
980*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*--p_filter_3, (*new_samp)));
981*15dc779aSAndroid Build Coastguard Worker synth_buf[resolution * (7) + j] =
982*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(synth_buf[resolution * (7) + j],
983*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*--p_filter_2, (*new_samp)));
984*15dc779aSAndroid Build Coastguard Worker synth_buf[resolution * (9) + j] =
985*15dc779aSAndroid Build Coastguard Worker ixheaac_add32_sat(synth_buf[resolution * (9) + j],
986*15dc779aSAndroid Build Coastguard Worker ixheaacd_mps_mult32_shr_30(*--p_filter_1, (*new_samp)));
987*15dc779aSAndroid Build Coastguard Worker new_samp--;
988*15dc779aSAndroid Build Coastguard Worker }
989*15dc779aSAndroid Build Coastguard Worker
990*15dc779aSAndroid Build Coastguard Worker buf_ptr = synth_buf + 9 * resolution + resolution - 2;
991*15dc779aSAndroid Build Coastguard Worker for (j = 0; j < resolution - 1; j++) {
992*15dc779aSAndroid Build Coastguard Worker *time_sig++ = *buf_ptr--;
993*15dc779aSAndroid Build Coastguard Worker }
994*15dc779aSAndroid Build Coastguard Worker
995*15dc779aSAndroid Build Coastguard Worker memmove((synth_buf + resolution), synth_buf, (9 * resolution) * sizeof(WORD32));
996*15dc779aSAndroid Build Coastguard Worker
997*15dc779aSAndroid Build Coastguard Worker p_sr += MAX_HYBRID_BANDS;
998*15dc779aSAndroid Build Coastguard Worker p_si += MAX_HYBRID_BANDS;
999*15dc779aSAndroid Build Coastguard Worker }
1000*15dc779aSAndroid Build Coastguard Worker }
1001*15dc779aSAndroid Build Coastguard Worker
1002*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE
ixheaacd_syn_filt_bank_init(ia_mps_dec_synthesis_interface_handle self,WORD32 resolution)1003*15dc779aSAndroid Build Coastguard Worker ixheaacd_syn_filt_bank_init(ia_mps_dec_synthesis_interface_handle self, WORD32 resolution) {
1004*15dc779aSAndroid Build Coastguard Worker switch (resolution) {
1005*15dc779aSAndroid Build Coastguard Worker case QMF_BANDS_32:
1006*15dc779aSAndroid Build Coastguard Worker self->syn_filter_bank = ixheaacd_calculate_syn_filt_bank;
1007*15dc779aSAndroid Build Coastguard Worker break;
1008*15dc779aSAndroid Build Coastguard Worker case QMF_BANDS_64:
1009*15dc779aSAndroid Build Coastguard Worker self->syn_filter_bank = ixheaacd_calculate_syn_filt_bank_res64;
1010*15dc779aSAndroid Build Coastguard Worker break;
1011*15dc779aSAndroid Build Coastguard Worker case QMF_BANDS_128:
1012*15dc779aSAndroid Build Coastguard Worker self->syn_filter_bank = ixheaacd_calculate_syn_filt_bank;
1013*15dc779aSAndroid Build Coastguard Worker break;
1014*15dc779aSAndroid Build Coastguard Worker default:
1015*15dc779aSAndroid Build Coastguard Worker return IA_XHEAAC_MPS_DEC_INIT_NONFATAL_INVALID_QMF_BAND;
1016*15dc779aSAndroid Build Coastguard Worker break;
1017*15dc779aSAndroid Build Coastguard Worker }
1018*15dc779aSAndroid Build Coastguard Worker return IA_NO_ERROR;
1019*15dc779aSAndroid Build Coastguard Worker }
1020*15dc779aSAndroid Build Coastguard Worker
ia_mps_enc_fwd_mod(WORD32 * time_in,WORD32 * r_subband,WORD32 * i_subband,ia_mps_dec_qmf_tables_struct * qmf_table_ptr)1021*15dc779aSAndroid Build Coastguard Worker static VOID ia_mps_enc_fwd_mod(WORD32 *time_in, WORD32 *r_subband, WORD32 *i_subband,
1022*15dc779aSAndroid Build Coastguard Worker ia_mps_dec_qmf_tables_struct *qmf_table_ptr) {
1023*15dc779aSAndroid Build Coastguard Worker WORD32 i;
1024*15dc779aSAndroid Build Coastguard Worker
1025*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < 64; i++) {
1026*15dc779aSAndroid Build Coastguard Worker r_subband[i] = time_in[i] - time_in[127 - i];
1027*15dc779aSAndroid Build Coastguard Worker i_subband[i] = time_in[i] + time_in[127 - i];
1028*15dc779aSAndroid Build Coastguard Worker }
1029*15dc779aSAndroid Build Coastguard Worker ixheaacd_cos_mod(r_subband, qmf_table_ptr);
1030*15dc779aSAndroid Build Coastguard Worker ixheaacd_sin_mod(i_subband, qmf_table_ptr);
1031*15dc779aSAndroid Build Coastguard Worker }
1032*15dc779aSAndroid Build Coastguard Worker
ixheaacd_calc_ana_filt_bank(ia_heaac_mps_state_struct * pstr_mps_state,WORD16 * time_in,WORD32 * r_analysis,WORD32 * i_analysis,WORD32 channel)1033*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_calc_ana_filt_bank(ia_heaac_mps_state_struct *pstr_mps_state, WORD16 *time_in,
1034*15dc779aSAndroid Build Coastguard Worker WORD32 *r_analysis, WORD32 *i_analysis, WORD32 channel) {
1035*15dc779aSAndroid Build Coastguard Worker ia_mps_dec_qmf_ana_filter_bank *qmf_bank = &pstr_mps_state->qmf_bank[channel];
1036*15dc779aSAndroid Build Coastguard Worker ia_mps_dec_qmf_tables_struct *qmf_table_ptr =
1037*15dc779aSAndroid Build Coastguard Worker pstr_mps_state->ia_mps_dec_mps_table.qmf_table_ptr;
1038*15dc779aSAndroid Build Coastguard Worker WORD32 i, k, m;
1039*15dc779aSAndroid Build Coastguard Worker
1040*15dc779aSAndroid Build Coastguard Worker WORD32 *syn_buffer = pstr_mps_state->mps_scratch_mem_v;
1041*15dc779aSAndroid Build Coastguard Worker WORD64 accu1 = 0, accu2 = 0;
1042*15dc779aSAndroid Build Coastguard Worker WORD16 flag;
1043*15dc779aSAndroid Build Coastguard Worker WORD32 *fp1;
1044*15dc779aSAndroid Build Coastguard Worker WORD32 *fp2;
1045*15dc779aSAndroid Build Coastguard Worker WORD32 *temp;
1046*15dc779aSAndroid Build Coastguard Worker const WORD32 *start_co_eff_ptr_l;
1047*15dc779aSAndroid Build Coastguard Worker const WORD32 *start_co_eff_ptr_r;
1048*15dc779aSAndroid Build Coastguard Worker const WORD32 *ptr_pf_l, *ptr_pf_r;
1049*15dc779aSAndroid Build Coastguard Worker WORD32 *qmf_states_curr_pos;
1050*15dc779aSAndroid Build Coastguard Worker WORD32 offset = 0;
1051*15dc779aSAndroid Build Coastguard Worker WORD32 n_channels = pstr_mps_state->num_input_channels;
1052*15dc779aSAndroid Build Coastguard Worker WORD32 nr_samples = pstr_mps_state->time_slots;
1053*15dc779aSAndroid Build Coastguard Worker WORD32 qmf_bands = pstr_mps_state->qmf_bands;
1054*15dc779aSAndroid Build Coastguard Worker WORD32 shift = pstr_mps_state->bits_per_sample - 16;
1055*15dc779aSAndroid Build Coastguard Worker WORD32 gain = pstr_mps_state->clip_protect_gain;
1056*15dc779aSAndroid Build Coastguard Worker
1057*15dc779aSAndroid Build Coastguard Worker WORD32 *p_ana_real = r_analysis;
1058*15dc779aSAndroid Build Coastguard Worker WORD32 *p_ana_imag = i_analysis;
1059*15dc779aSAndroid Build Coastguard Worker
1060*15dc779aSAndroid Build Coastguard Worker WORD32 *p_ana_re, *p_ana_im;
1061*15dc779aSAndroid Build Coastguard Worker
1062*15dc779aSAndroid Build Coastguard Worker flag = qmf_bank->flag;
1063*15dc779aSAndroid Build Coastguard Worker if (!flag) {
1064*15dc779aSAndroid Build Coastguard Worker fp1 = qmf_bank->qmf_states_buffer;
1065*15dc779aSAndroid Build Coastguard Worker fp2 = qmf_bank->qmf_states_buffer + qmf_bands;
1066*15dc779aSAndroid Build Coastguard Worker } else {
1067*15dc779aSAndroid Build Coastguard Worker fp2 = qmf_bank->qmf_states_buffer;
1068*15dc779aSAndroid Build Coastguard Worker fp1 = qmf_bank->qmf_states_buffer + qmf_bands;
1069*15dc779aSAndroid Build Coastguard Worker }
1070*15dc779aSAndroid Build Coastguard Worker
1071*15dc779aSAndroid Build Coastguard Worker qmf_bank->qmf_states_curr_pos =
1072*15dc779aSAndroid Build Coastguard Worker ((WORD32 *)(qmf_bank->qmf_states_buffer) + (qmf_bank->offset * qmf_bands));
1073*15dc779aSAndroid Build Coastguard Worker
1074*15dc779aSAndroid Build Coastguard Worker offset = qmf_bank->offset;
1075*15dc779aSAndroid Build Coastguard Worker start_co_eff_ptr_l = qmf_bank->ref_co_eff_ptr_l + qmf_bank->offset_l;
1076*15dc779aSAndroid Build Coastguard Worker start_co_eff_ptr_r = qmf_bank->ref_co_eff_ptr_r - qmf_bank->offset_r;
1077*15dc779aSAndroid Build Coastguard Worker
1078*15dc779aSAndroid Build Coastguard Worker for (i = 0; i < nr_samples; i++) {
1079*15dc779aSAndroid Build Coastguard Worker const WORD16 *pcoz = qmf_table_ptr->ia_qmf_anl_addt_cos,
1080*15dc779aSAndroid Build Coastguard Worker *psin = qmf_table_ptr->ia_qmf_anl_addt_sin;
1081*15dc779aSAndroid Build Coastguard Worker qmf_states_curr_pos = qmf_bank->qmf_states_curr_pos;
1082*15dc779aSAndroid Build Coastguard Worker
1083*15dc779aSAndroid Build Coastguard Worker p_ana_re = p_ana_real;
1084*15dc779aSAndroid Build Coastguard Worker p_ana_im = p_ana_imag;
1085*15dc779aSAndroid Build Coastguard Worker
1086*15dc779aSAndroid Build Coastguard Worker temp = fp1;
1087*15dc779aSAndroid Build Coastguard Worker fp1 = fp2;
1088*15dc779aSAndroid Build Coastguard Worker fp2 = temp;
1089*15dc779aSAndroid Build Coastguard Worker
1090*15dc779aSAndroid Build Coastguard Worker if (flag) {
1091*15dc779aSAndroid Build Coastguard Worker start_co_eff_ptr_l--;
1092*15dc779aSAndroid Build Coastguard Worker
1093*15dc779aSAndroid Build Coastguard Worker if (start_co_eff_ptr_l == qmf_bank->ref_co_eff_ptr_l) start_co_eff_ptr_l += 5;
1094*15dc779aSAndroid Build Coastguard Worker } else {
1095*15dc779aSAndroid Build Coastguard Worker start_co_eff_ptr_r++;
1096*15dc779aSAndroid Build Coastguard Worker if (start_co_eff_ptr_r == qmf_bank->ref_co_eff_ptr_r) start_co_eff_ptr_r -= 5;
1097*15dc779aSAndroid Build Coastguard Worker }
1098*15dc779aSAndroid Build Coastguard Worker
1099*15dc779aSAndroid Build Coastguard Worker flag++;
1100*15dc779aSAndroid Build Coastguard Worker if ((flag & ONE_BIT_MASK) == 0) flag = 0;
1101*15dc779aSAndroid Build Coastguard Worker
1102*15dc779aSAndroid Build Coastguard Worker if (shift == 0) {
1103*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < qmf_bands; k++) {
1104*15dc779aSAndroid Build Coastguard Worker qmf_states_curr_pos[k] = ixheaacd_mps_mult32_shr_15(
1105*15dc779aSAndroid Build Coastguard Worker (WORD32)time_in[n_channels * (i * qmf_bands + k) + channel], gain);
1106*15dc779aSAndroid Build Coastguard Worker }
1107*15dc779aSAndroid Build Coastguard Worker } else {
1108*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < qmf_bands; k++) {
1109*15dc779aSAndroid Build Coastguard Worker WORD32 temp;
1110*15dc779aSAndroid Build Coastguard Worker temp = ixheaacd_mps_mult32_shr_15(
1111*15dc779aSAndroid Build Coastguard Worker (WORD32)time_in[n_channels * (i * qmf_bands + k) + channel], gain);
1112*15dc779aSAndroid Build Coastguard Worker
1113*15dc779aSAndroid Build Coastguard Worker qmf_states_curr_pos[k] = temp >> shift;
1114*15dc779aSAndroid Build Coastguard Worker }
1115*15dc779aSAndroid Build Coastguard Worker }
1116*15dc779aSAndroid Build Coastguard Worker
1117*15dc779aSAndroid Build Coastguard Worker ptr_pf_l = start_co_eff_ptr_l;
1118*15dc779aSAndroid Build Coastguard Worker ptr_pf_r = start_co_eff_ptr_r;
1119*15dc779aSAndroid Build Coastguard Worker
1120*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < qmf_bands; k++) {
1121*15dc779aSAndroid Build Coastguard Worker {
1122*15dc779aSAndroid Build Coastguard Worker accu1 = (WORD64)((WORD64)ptr_pf_l[0] * (WORD64)fp1[k]);
1123*15dc779aSAndroid Build Coastguard Worker accu1 += (WORD64)((WORD64)ptr_pf_l[1] * (WORD64)fp1[128 + k]);
1124*15dc779aSAndroid Build Coastguard Worker accu1 += (WORD64)((WORD64)ptr_pf_l[2] * (WORD64)fp1[256 + k]);
1125*15dc779aSAndroid Build Coastguard Worker accu1 += (WORD64)((WORD64)ptr_pf_l[3] * (WORD64)fp1[384 + k]);
1126*15dc779aSAndroid Build Coastguard Worker accu1 += (WORD64)((WORD64)ptr_pf_l[4] * (WORD64)fp1[512 + k]);
1127*15dc779aSAndroid Build Coastguard Worker
1128*15dc779aSAndroid Build Coastguard Worker accu2 = (WORD64)((WORD64)ptr_pf_r[-1] * (WORD64)fp2[k]);
1129*15dc779aSAndroid Build Coastguard Worker accu2 += (WORD64)((WORD64)ptr_pf_r[-2] * (WORD64)fp2[128 + k]);
1130*15dc779aSAndroid Build Coastguard Worker accu2 += (WORD64)((WORD64)ptr_pf_r[-3] * (WORD64)fp2[256 + k]);
1131*15dc779aSAndroid Build Coastguard Worker accu2 += (WORD64)((WORD64)ptr_pf_r[-4] * (WORD64)fp2[384 + k]);
1132*15dc779aSAndroid Build Coastguard Worker accu2 += (WORD64)((WORD64)ptr_pf_r[-5] * (WORD64)fp2[512 + k]);
1133*15dc779aSAndroid Build Coastguard Worker }
1134*15dc779aSAndroid Build Coastguard Worker syn_buffer[(qmf_bands << 1) - 1 - k] = (WORD32)((WORD64)accu1 >> 21);
1135*15dc779aSAndroid Build Coastguard Worker syn_buffer[qmf_bands - 1 - k] = (WORD32)((WORD64)accu2 >> 21);
1136*15dc779aSAndroid Build Coastguard Worker ptr_pf_l += 10;
1137*15dc779aSAndroid Build Coastguard Worker ptr_pf_r -= 10;
1138*15dc779aSAndroid Build Coastguard Worker }
1139*15dc779aSAndroid Build Coastguard Worker
1140*15dc779aSAndroid Build Coastguard Worker ia_mps_enc_fwd_mod(syn_buffer, p_ana_re, p_ana_im, qmf_table_ptr);
1141*15dc779aSAndroid Build Coastguard Worker
1142*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < (qmf_bands >> 1); m++) {
1143*15dc779aSAndroid Build Coastguard Worker WORD32 a_cos, b_cos, a_sin, b_sin;
1144*15dc779aSAndroid Build Coastguard Worker WORD32 a_cos1, b_cos1, a_sin1, b_sin1;
1145*15dc779aSAndroid Build Coastguard Worker
1146*15dc779aSAndroid Build Coastguard Worker WORD16 coz = *pcoz++, sin = *psin++;
1147*15dc779aSAndroid Build Coastguard Worker
1148*15dc779aSAndroid Build Coastguard Worker a_cos = ixheaac_mult32x16in32(p_ana_re[m], coz);
1149*15dc779aSAndroid Build Coastguard Worker b_sin = ixheaac_mult32x16in32(p_ana_im[m], sin);
1150*15dc779aSAndroid Build Coastguard Worker b_cos = ixheaac_mult32x16in32(p_ana_im[m], coz);
1151*15dc779aSAndroid Build Coastguard Worker a_sin = ixheaac_mult32x16in32(p_ana_re[m], sin);
1152*15dc779aSAndroid Build Coastguard Worker
1153*15dc779aSAndroid Build Coastguard Worker p_ana_re[m] = ((a_cos + b_sin) << 1);
1154*15dc779aSAndroid Build Coastguard Worker p_ana_im[m] = ((b_cos - a_sin) << 1);
1155*15dc779aSAndroid Build Coastguard Worker
1156*15dc779aSAndroid Build Coastguard Worker a_cos1 = ixheaac_mult32x16in32(p_ana_re[qmf_bands - 1 - m], coz);
1157*15dc779aSAndroid Build Coastguard Worker b_sin1 = ixheaac_mult32x16in32(p_ana_im[qmf_bands - 1 - m], sin);
1158*15dc779aSAndroid Build Coastguard Worker
1159*15dc779aSAndroid Build Coastguard Worker a_sin1 = ixheaac_mult32x16in32(p_ana_re[qmf_bands - 1 - m], sin);
1160*15dc779aSAndroid Build Coastguard Worker p_ana_re[qmf_bands - 1 - m] = ((-a_cos1 + b_sin1) << 1);
1161*15dc779aSAndroid Build Coastguard Worker b_cos1 = ixheaac_mult32x16in32(p_ana_im[qmf_bands - 1 - m], coz);
1162*15dc779aSAndroid Build Coastguard Worker
1163*15dc779aSAndroid Build Coastguard Worker p_ana_im[qmf_bands - 1 - m] = ((-b_cos1 - a_sin1) << 1);
1164*15dc779aSAndroid Build Coastguard Worker }
1165*15dc779aSAndroid Build Coastguard Worker
1166*15dc779aSAndroid Build Coastguard Worker qmf_bank->qmf_states_curr_pos = qmf_bank->qmf_states_curr_pos + qmf_bands;
1167*15dc779aSAndroid Build Coastguard Worker offset++;
1168*15dc779aSAndroid Build Coastguard Worker if (offset == 10) {
1169*15dc779aSAndroid Build Coastguard Worker offset = 0;
1170*15dc779aSAndroid Build Coastguard Worker qmf_bank->qmf_states_curr_pos = qmf_bank->qmf_states_buffer;
1171*15dc779aSAndroid Build Coastguard Worker }
1172*15dc779aSAndroid Build Coastguard Worker
1173*15dc779aSAndroid Build Coastguard Worker p_ana_real += MAX_NUM_QMF_BANDS;
1174*15dc779aSAndroid Build Coastguard Worker p_ana_imag += MAX_NUM_QMF_BANDS;
1175*15dc779aSAndroid Build Coastguard Worker }
1176*15dc779aSAndroid Build Coastguard Worker
1177*15dc779aSAndroid Build Coastguard Worker qmf_bank->offset_l = (WORD32)(start_co_eff_ptr_l - qmf_bank->ref_co_eff_ptr_l);
1178*15dc779aSAndroid Build Coastguard Worker qmf_bank->offset_r = (WORD32)(qmf_bank->ref_co_eff_ptr_r - start_co_eff_ptr_r);
1179*15dc779aSAndroid Build Coastguard Worker
1180*15dc779aSAndroid Build Coastguard Worker qmf_bank->flag = flag;
1181*15dc779aSAndroid Build Coastguard Worker qmf_bank->offset = offset;
1182*15dc779aSAndroid Build Coastguard Worker }
1183