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
21*15dc779aSAndroid Build Coastguard Worker #include <string.h>
22*15dc779aSAndroid Build Coastguard Worker #include <math.h>
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_common_fix.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_defines.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_common_define.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_bitbuffer.h"
28*15dc779aSAndroid Build Coastguard Worker
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_struct_def.h"
30*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_sac_polyphase.h"
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_sac_hybfilter.h"
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_spatial_bitstream.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_bitstream.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_param_extract.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_tree.h"
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_mps_rom.h"
37*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_bit_reversal(FLOAT32 * a,FLOAT32 * b)38*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_bit_reversal(FLOAT32 *a, FLOAT32 *b) {
39*15dc779aSAndroid Build Coastguard Worker FLOAT32 temp;
40*15dc779aSAndroid Build Coastguard Worker temp = *a;
41*15dc779aSAndroid Build Coastguard Worker *a = *b;
42*15dc779aSAndroid Build Coastguard Worker *b = temp;
43*15dc779aSAndroid Build Coastguard Worker }
44*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_bit_add_sub1(FLOAT32 * a,FLOAT32 * b)45*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_bit_add_sub1(FLOAT32 *a, FLOAT32 *b) {
46*15dc779aSAndroid Build Coastguard Worker FLOAT32 temp;
47*15dc779aSAndroid Build Coastguard Worker temp = *a + *b;
48*15dc779aSAndroid Build Coastguard Worker *b = *b - *a;
49*15dc779aSAndroid Build Coastguard Worker *a = temp;
50*15dc779aSAndroid Build Coastguard Worker }
51*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_bit_add_sub2(FLOAT32 * a,FLOAT32 * b)52*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_bit_add_sub2(FLOAT32 *a, FLOAT32 *b) {
53*15dc779aSAndroid Build Coastguard Worker FLOAT32 temp;
54*15dc779aSAndroid Build Coastguard Worker temp = *a + *b;
55*15dc779aSAndroid Build Coastguard Worker *b = *a - *b;
56*15dc779aSAndroid Build Coastguard Worker *a = temp;
57*15dc779aSAndroid Build Coastguard Worker }
58*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_fft32(FLOAT32 * subband)59*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_fft32(FLOAT32 *subband) {
60*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_0, val_1, val_2, val_3, val_4, val_5, val_6, val_7, val_8, val_9, val_10, val_11,
61*15dc779aSAndroid Build Coastguard Worker val_12, val_13, val_14, val_15;
62*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_1_0, val_1_1, val_1_2, val_1_3, val_1_4, val_1_5, val_1_6, val_1_7, val_1_8,
63*15dc779aSAndroid Build Coastguard Worker val_1_9, val_1_10, val_1_11, val_1_12, val_1_13, val_1_14, val_1_15;
64*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_2_0, val_2_1, val_2_2, val_2_3, val_2_4, val_2_5, val_2_6, val_2_7, val_2_8,
65*15dc779aSAndroid Build Coastguard Worker val_2_9, val_2_10, val_2_11, val_2_12, val_2_13, val_2_14, val_2_15;
66*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_3_0, val_3_1, val_3_2, val_3_3, val_3_4, val_3_5, val_3_6, val_3_7, val_3_8,
67*15dc779aSAndroid Build Coastguard Worker val_3_9, val_3_10, val_3_11, val_3_12, val_3_13, val_3_14, val_3_15;
68*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_3_16, val_3_17, val_3_18, val_3_19, val_3_20, val_3_21, val_3_22, val_3_23,
69*15dc779aSAndroid Build Coastguard Worker val_3_24, val_3_25, val_3_26, val_3_27, val_3_28, val_3_29, val_3_30, val_3_31;
70*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_4_0, val_4_1, val_4_2, val_4_3, val_4_4, val_4_5, val_4_6, val_4_7, val_4_8,
71*15dc779aSAndroid Build Coastguard Worker val_4_9, val_4_10, val_4_11, val_4_12, val_4_13, val_4_14, val_4_15;
72*15dc779aSAndroid Build Coastguard Worker
73*15dc779aSAndroid Build Coastguard Worker val_2_0 = subband[2] - subband[34];
74*15dc779aSAndroid Build Coastguard Worker val_2_1 = subband[3] - subband[35];
75*15dc779aSAndroid Build Coastguard Worker val_3_0 = subband[0] + subband[32];
76*15dc779aSAndroid Build Coastguard Worker val_3_1 = subband[1] + subband[33];
77*15dc779aSAndroid Build Coastguard Worker val_3_2 = subband[2] + subband[34];
78*15dc779aSAndroid Build Coastguard Worker val_3_3 = subband[3] + subband[35];
79*15dc779aSAndroid Build Coastguard Worker
80*15dc779aSAndroid Build Coastguard Worker val_2_2 = subband[6] - subband[38];
81*15dc779aSAndroid Build Coastguard Worker val_2_3 = subband[7] - subband[39];
82*15dc779aSAndroid Build Coastguard Worker val_3_4 = subband[4] + subband[36];
83*15dc779aSAndroid Build Coastguard Worker val_3_5 = subband[5] + subband[37];
84*15dc779aSAndroid Build Coastguard Worker val_3_6 = subband[6] + subband[38];
85*15dc779aSAndroid Build Coastguard Worker val_3_7 = subband[7] + subband[39];
86*15dc779aSAndroid Build Coastguard Worker
87*15dc779aSAndroid Build Coastguard Worker val_2_4 = subband[10] - subband[42];
88*15dc779aSAndroid Build Coastguard Worker val_2_5 = subband[11] - subband[43];
89*15dc779aSAndroid Build Coastguard Worker val_3_8 = subband[8] + subband[40];
90*15dc779aSAndroid Build Coastguard Worker val_3_9 = subband[9] + subband[41];
91*15dc779aSAndroid Build Coastguard Worker val_3_10 = subband[10] + subband[42];
92*15dc779aSAndroid Build Coastguard Worker val_3_11 = subband[11] + subband[43];
93*15dc779aSAndroid Build Coastguard Worker
94*15dc779aSAndroid Build Coastguard Worker val_2_6 = subband[14] - subband[46];
95*15dc779aSAndroid Build Coastguard Worker val_2_7 = subband[15] - subband[47];
96*15dc779aSAndroid Build Coastguard Worker val_3_12 = subband[12] + subband[44];
97*15dc779aSAndroid Build Coastguard Worker val_3_13 = subband[13] + subband[45];
98*15dc779aSAndroid Build Coastguard Worker val_3_14 = subband[14] + subband[46];
99*15dc779aSAndroid Build Coastguard Worker val_3_15 = subband[15] + subband[47];
100*15dc779aSAndroid Build Coastguard Worker
101*15dc779aSAndroid Build Coastguard Worker val_2_8 = subband[18] - subband[50];
102*15dc779aSAndroid Build Coastguard Worker val_2_9 = subband[19] - subband[51];
103*15dc779aSAndroid Build Coastguard Worker val_3_16 = subband[16] + subband[48];
104*15dc779aSAndroid Build Coastguard Worker val_3_17 = subband[17] + subband[49];
105*15dc779aSAndroid Build Coastguard Worker val_3_18 = subband[18] + subband[50];
106*15dc779aSAndroid Build Coastguard Worker val_3_19 = subband[19] + subband[51];
107*15dc779aSAndroid Build Coastguard Worker
108*15dc779aSAndroid Build Coastguard Worker val_2_10 = subband[22] - subband[54];
109*15dc779aSAndroid Build Coastguard Worker val_2_11 = subband[23] - subband[55];
110*15dc779aSAndroid Build Coastguard Worker val_3_20 = subband[20] + subband[52];
111*15dc779aSAndroid Build Coastguard Worker val_3_21 = subband[21] + subband[53];
112*15dc779aSAndroid Build Coastguard Worker val_3_22 = subband[22] + subband[54];
113*15dc779aSAndroid Build Coastguard Worker val_3_23 = subband[23] + subband[55];
114*15dc779aSAndroid Build Coastguard Worker
115*15dc779aSAndroid Build Coastguard Worker val_2_12 = subband[26] - subband[58];
116*15dc779aSAndroid Build Coastguard Worker val_2_13 = subband[27] - subband[59];
117*15dc779aSAndroid Build Coastguard Worker val_3_24 = subband[24] + subband[56];
118*15dc779aSAndroid Build Coastguard Worker val_3_25 = subband[25] + subband[57];
119*15dc779aSAndroid Build Coastguard Worker val_3_26 = subband[26] + subband[58];
120*15dc779aSAndroid Build Coastguard Worker val_3_27 = subband[27] + subband[59];
121*15dc779aSAndroid Build Coastguard Worker
122*15dc779aSAndroid Build Coastguard Worker val_2_14 = subband[30] - subband[62];
123*15dc779aSAndroid Build Coastguard Worker val_2_15 = subband[31] - subband[63];
124*15dc779aSAndroid Build Coastguard Worker val_3_28 = subband[28] + subband[60];
125*15dc779aSAndroid Build Coastguard Worker val_3_29 = subband[29] + subband[61];
126*15dc779aSAndroid Build Coastguard Worker val_3_30 = subband[30] + subband[62];
127*15dc779aSAndroid Build Coastguard Worker val_3_31 = subband[31] + subband[63];
128*15dc779aSAndroid Build Coastguard Worker
129*15dc779aSAndroid Build Coastguard Worker val_4_1 = -(val_2_0 + val_2_14);
130*15dc779aSAndroid Build Coastguard Worker val_4_2 = val_2_0 - val_2_14;
131*15dc779aSAndroid Build Coastguard Worker val_4_0 = val_2_1 + val_2_15;
132*15dc779aSAndroid Build Coastguard Worker val_4_3 = val_2_1 - val_2_15;
133*15dc779aSAndroid Build Coastguard Worker val_4_5 = -(val_2_2 + val_2_12);
134*15dc779aSAndroid Build Coastguard Worker val_4_6 = val_2_2 - val_2_12;
135*15dc779aSAndroid Build Coastguard Worker val_4_4 = val_2_3 + val_2_13;
136*15dc779aSAndroid Build Coastguard Worker val_4_7 = val_2_3 - val_2_13;
137*15dc779aSAndroid Build Coastguard Worker val_4_9 = -(val_2_4 + val_2_10);
138*15dc779aSAndroid Build Coastguard Worker val_4_10 = val_2_4 - val_2_10;
139*15dc779aSAndroid Build Coastguard Worker val_4_8 = val_2_5 + val_2_11;
140*15dc779aSAndroid Build Coastguard Worker val_4_11 = val_2_5 - val_2_11;
141*15dc779aSAndroid Build Coastguard Worker val_4_13 = -(val_2_6 + val_2_8);
142*15dc779aSAndroid Build Coastguard Worker val_4_14 = val_2_6 - val_2_8;
143*15dc779aSAndroid Build Coastguard Worker val_4_12 = val_2_7 + val_2_9;
144*15dc779aSAndroid Build Coastguard Worker val_4_15 = val_2_7 - val_2_9;
145*15dc779aSAndroid Build Coastguard Worker
146*15dc779aSAndroid Build Coastguard Worker val_2_0 = val_4_0 * fft_c[3] + val_4_4 * fft_c[2] + val_4_8 * fft_c[1] + val_4_12 * fft_c[0];
147*15dc779aSAndroid Build Coastguard Worker
148*15dc779aSAndroid Build Coastguard Worker val_2_4 = val_4_0 * fft_c[2] + val_4_4 * fft_c[0] + val_4_8 * fft_c[3] - val_4_12 * fft_c[1];
149*15dc779aSAndroid Build Coastguard Worker val_2_8 = val_4_0 * fft_c[1] + val_4_4 * fft_c[3] - val_4_8 * fft_c[0] + val_4_12 * fft_c[2];
150*15dc779aSAndroid Build Coastguard Worker
151*15dc779aSAndroid Build Coastguard Worker val_2_12 = val_4_0 * fft_c[0] - val_4_4 * fft_c[1] + val_4_8 * fft_c[2] - val_4_12 * fft_c[3];
152*15dc779aSAndroid Build Coastguard Worker
153*15dc779aSAndroid Build Coastguard Worker val_2_1 = val_4_1 * fft_c[3] + val_4_5 * fft_c[2] + val_4_9 * fft_c[1] + val_4_13 * fft_c[0];
154*15dc779aSAndroid Build Coastguard Worker
155*15dc779aSAndroid Build Coastguard Worker val_2_5 = val_4_1 * fft_c[2] + val_4_5 * fft_c[0] + val_4_9 * fft_c[3] - val_4_13 * fft_c[1];
156*15dc779aSAndroid Build Coastguard Worker val_2_9 = val_4_1 * fft_c[1] + val_4_5 * fft_c[3] - val_4_9 * fft_c[0] + val_4_13 * fft_c[2];
157*15dc779aSAndroid Build Coastguard Worker
158*15dc779aSAndroid Build Coastguard Worker val_2_13 = val_4_1 * fft_c[0] - val_4_5 * fft_c[1] + val_4_9 * fft_c[2] - val_4_13 * fft_c[3];
159*15dc779aSAndroid Build Coastguard Worker
160*15dc779aSAndroid Build Coastguard Worker val_2_2 = val_4_2 * fft_c[0] + val_4_6 * fft_c[1] + val_4_10 * fft_c[2] + val_4_14 * fft_c[3];
161*15dc779aSAndroid Build Coastguard Worker
162*15dc779aSAndroid Build Coastguard Worker val_2_6 = val_4_2 * fft_c[1] - val_4_6 * fft_c[3] - val_4_10 * fft_c[0] - val_4_14 * fft_c[2];
163*15dc779aSAndroid Build Coastguard Worker
164*15dc779aSAndroid Build Coastguard Worker val_2_10 = val_4_2 * fft_c[2] - val_4_6 * fft_c[0] + val_4_10 * fft_c[3] + val_4_14 * fft_c[1];
165*15dc779aSAndroid Build Coastguard Worker
166*15dc779aSAndroid Build Coastguard Worker val_2_14 = val_4_2 * fft_c[3] - val_4_6 * fft_c[2] + val_4_10 * fft_c[1] - val_4_14 * fft_c[0];
167*15dc779aSAndroid Build Coastguard Worker
168*15dc779aSAndroid Build Coastguard Worker val_2_3 = val_4_3 * fft_c[0] + val_4_7 * fft_c[1] + val_4_11 * fft_c[2] + val_4_15 * fft_c[3];
169*15dc779aSAndroid Build Coastguard Worker
170*15dc779aSAndroid Build Coastguard Worker val_2_7 = val_4_3 * fft_c[1] - val_4_7 * fft_c[3] - val_4_11 * fft_c[0] - val_4_15 * fft_c[2];
171*15dc779aSAndroid Build Coastguard Worker
172*15dc779aSAndroid Build Coastguard Worker val_2_11 = val_4_3 * fft_c[2] - val_4_7 * fft_c[0] + val_4_11 * fft_c[3] + val_4_15 * fft_c[1];
173*15dc779aSAndroid Build Coastguard Worker
174*15dc779aSAndroid Build Coastguard Worker val_2_15 = val_4_3 * fft_c[3] - val_4_7 * fft_c[2] + val_4_11 * fft_c[1] - val_4_15 * fft_c[0];
175*15dc779aSAndroid Build Coastguard Worker
176*15dc779aSAndroid Build Coastguard Worker val_4_0 = val_2_0 + val_2_2;
177*15dc779aSAndroid Build Coastguard Worker val_4_14 = val_2_0 - val_2_2;
178*15dc779aSAndroid Build Coastguard Worker val_4_1 = val_2_1 + val_2_3;
179*15dc779aSAndroid Build Coastguard Worker val_4_15 = val_2_1 - val_2_3;
180*15dc779aSAndroid Build Coastguard Worker val_4_2 = val_2_4 + val_2_6;
181*15dc779aSAndroid Build Coastguard Worker val_4_12 = val_2_4 - val_2_6;
182*15dc779aSAndroid Build Coastguard Worker val_4_3 = val_2_5 + val_2_7;
183*15dc779aSAndroid Build Coastguard Worker val_4_13 = val_2_5 - val_2_7;
184*15dc779aSAndroid Build Coastguard Worker val_4_4 = val_2_8 + val_2_10;
185*15dc779aSAndroid Build Coastguard Worker val_4_10 = val_2_8 - val_2_10;
186*15dc779aSAndroid Build Coastguard Worker val_4_5 = val_2_9 + val_2_11;
187*15dc779aSAndroid Build Coastguard Worker val_4_11 = val_2_9 - val_2_11;
188*15dc779aSAndroid Build Coastguard Worker val_4_6 = val_2_12 + val_2_14;
189*15dc779aSAndroid Build Coastguard Worker val_4_8 = val_2_12 - val_2_14;
190*15dc779aSAndroid Build Coastguard Worker val_4_7 = val_2_13 + val_2_15;
191*15dc779aSAndroid Build Coastguard Worker val_4_9 = val_2_13 - val_2_15;
192*15dc779aSAndroid Build Coastguard Worker
193*15dc779aSAndroid Build Coastguard Worker val_1_0 = val_3_0 + val_3_16;
194*15dc779aSAndroid Build Coastguard Worker val_1_1 = val_3_1 + val_3_17;
195*15dc779aSAndroid Build Coastguard Worker val_1_2 = val_3_2 + val_3_18;
196*15dc779aSAndroid Build Coastguard Worker val_1_3 = val_3_3 + val_3_19;
197*15dc779aSAndroid Build Coastguard Worker val_1_4 = val_3_4 + val_3_20;
198*15dc779aSAndroid Build Coastguard Worker val_1_5 = val_3_5 + val_3_21;
199*15dc779aSAndroid Build Coastguard Worker val_1_6 = val_3_6 + val_3_22;
200*15dc779aSAndroid Build Coastguard Worker val_1_7 = val_3_7 + val_3_23;
201*15dc779aSAndroid Build Coastguard Worker val_1_8 = val_3_8 + val_3_24;
202*15dc779aSAndroid Build Coastguard Worker val_1_9 = val_3_9 + val_3_25;
203*15dc779aSAndroid Build Coastguard Worker val_1_10 = val_3_10 + val_3_26;
204*15dc779aSAndroid Build Coastguard Worker val_1_11 = val_3_11 + val_3_27;
205*15dc779aSAndroid Build Coastguard Worker val_1_12 = val_3_12 + val_3_28;
206*15dc779aSAndroid Build Coastguard Worker val_1_13 = val_3_13 + val_3_29;
207*15dc779aSAndroid Build Coastguard Worker val_1_14 = val_3_14 + val_3_30;
208*15dc779aSAndroid Build Coastguard Worker val_1_15 = val_3_15 + val_3_31;
209*15dc779aSAndroid Build Coastguard Worker
210*15dc779aSAndroid Build Coastguard Worker val_0 = val_1_0 + val_1_8;
211*15dc779aSAndroid Build Coastguard Worker val_2 = val_1_0 - val_1_8;
212*15dc779aSAndroid Build Coastguard Worker val_1 = val_1_1 + val_1_9;
213*15dc779aSAndroid Build Coastguard Worker val_3 = val_1_1 - val_1_9;
214*15dc779aSAndroid Build Coastguard Worker val_4 = val_1_2 + val_1_10;
215*15dc779aSAndroid Build Coastguard Worker val_6 = val_1_2 - val_1_10;
216*15dc779aSAndroid Build Coastguard Worker val_5 = val_1_3 + val_1_11;
217*15dc779aSAndroid Build Coastguard Worker val_7 = val_1_3 - val_1_11;
218*15dc779aSAndroid Build Coastguard Worker val_8 = val_1_4 + val_1_12;
219*15dc779aSAndroid Build Coastguard Worker val_10 = val_1_4 - val_1_12;
220*15dc779aSAndroid Build Coastguard Worker val_9 = val_1_5 + val_1_13;
221*15dc779aSAndroid Build Coastguard Worker val_11 = val_1_5 - val_1_13;
222*15dc779aSAndroid Build Coastguard Worker val_12 = val_1_6 + val_1_14;
223*15dc779aSAndroid Build Coastguard Worker val_14 = val_1_6 - val_1_14;
224*15dc779aSAndroid Build Coastguard Worker val_13 = val_1_7 + val_1_15;
225*15dc779aSAndroid Build Coastguard Worker val_15 = val_1_7 - val_1_15;
226*15dc779aSAndroid Build Coastguard Worker
227*15dc779aSAndroid Build Coastguard Worker val_2_0 = val_0 + val_8;
228*15dc779aSAndroid Build Coastguard Worker val_2_4 = val_0 - val_8;
229*15dc779aSAndroid Build Coastguard Worker val_2_1 = val_1 + val_9;
230*15dc779aSAndroid Build Coastguard Worker val_2_5 = val_1 - val_9;
231*15dc779aSAndroid Build Coastguard Worker val_2_8 = val_2 - val_11;
232*15dc779aSAndroid Build Coastguard Worker val_2_10 = val_2 + val_11;
233*15dc779aSAndroid Build Coastguard Worker val_2_9 = val_3 + val_10;
234*15dc779aSAndroid Build Coastguard Worker val_2_11 = val_3 - val_10;
235*15dc779aSAndroid Build Coastguard Worker val_2_2 = val_4 + val_12;
236*15dc779aSAndroid Build Coastguard Worker val_2_7 = val_4 - val_12;
237*15dc779aSAndroid Build Coastguard Worker val_2_3 = val_5 + val_13;
238*15dc779aSAndroid Build Coastguard Worker val_2_6 = val_13 - val_5;
239*15dc779aSAndroid Build Coastguard Worker
240*15dc779aSAndroid Build Coastguard Worker val_1 = val_6 + val_14;
241*15dc779aSAndroid Build Coastguard Worker val_2 = val_6 - val_14;
242*15dc779aSAndroid Build Coastguard Worker val_0 = val_7 + val_15;
243*15dc779aSAndroid Build Coastguard Worker val_3 = val_7 - val_15;
244*15dc779aSAndroid Build Coastguard Worker
245*15dc779aSAndroid Build Coastguard Worker val_2_12 = (val_0 + val_2) * MPS_INV_SQRT2;
246*15dc779aSAndroid Build Coastguard Worker val_2_14 = (val_0 - val_2) * MPS_INV_SQRT2;
247*15dc779aSAndroid Build Coastguard Worker val_2_13 = (val_3 - val_1) * MPS_INV_SQRT2;
248*15dc779aSAndroid Build Coastguard Worker val_2_15 = (val_1 + val_3) * -MPS_INV_SQRT2;
249*15dc779aSAndroid Build Coastguard Worker
250*15dc779aSAndroid Build Coastguard Worker val_1_0 = val_3_0 - val_3_16;
251*15dc779aSAndroid Build Coastguard Worker val_1_1 = val_3_1 - val_3_17;
252*15dc779aSAndroid Build Coastguard Worker val_1_2 = val_3_2 - val_3_18;
253*15dc779aSAndroid Build Coastguard Worker val_1_3 = val_3_3 - val_3_19;
254*15dc779aSAndroid Build Coastguard Worker val_1_4 = val_3_4 - val_3_20;
255*15dc779aSAndroid Build Coastguard Worker val_1_5 = val_3_5 - val_3_21;
256*15dc779aSAndroid Build Coastguard Worker val_1_6 = val_3_6 - val_3_22;
257*15dc779aSAndroid Build Coastguard Worker val_1_7 = val_3_7 - val_3_23;
258*15dc779aSAndroid Build Coastguard Worker val_1_8 = val_3_8 - val_3_24;
259*15dc779aSAndroid Build Coastguard Worker val_1_9 = val_3_9 - val_3_25;
260*15dc779aSAndroid Build Coastguard Worker val_1_10 = val_3_10 - val_3_26;
261*15dc779aSAndroid Build Coastguard Worker val_1_11 = val_3_11 - val_3_27;
262*15dc779aSAndroid Build Coastguard Worker val_1_12 = val_3_12 - val_3_28;
263*15dc779aSAndroid Build Coastguard Worker val_1_13 = val_3_13 - val_3_29;
264*15dc779aSAndroid Build Coastguard Worker val_1_14 = val_3_14 - val_3_30;
265*15dc779aSAndroid Build Coastguard Worker val_1_15 = val_3_15 - val_3_31;
266*15dc779aSAndroid Build Coastguard Worker
267*15dc779aSAndroid Build Coastguard Worker val_3_0 = val_2_0 + val_2_2;
268*15dc779aSAndroid Build Coastguard Worker val_3_16 = val_2_0 - val_2_2;
269*15dc779aSAndroid Build Coastguard Worker val_3_1 = val_2_1 + val_2_3;
270*15dc779aSAndroid Build Coastguard Worker val_3_17 = val_2_1 - val_2_3;
271*15dc779aSAndroid Build Coastguard Worker val_3_8 = val_2_4 - val_2_6;
272*15dc779aSAndroid Build Coastguard Worker val_3_24 = val_2_4 + val_2_6;
273*15dc779aSAndroid Build Coastguard Worker val_3_9 = val_2_5 - val_2_7;
274*15dc779aSAndroid Build Coastguard Worker val_3_25 = val_2_5 + val_2_7;
275*15dc779aSAndroid Build Coastguard Worker val_3_12 = val_2_8 + val_2_14;
276*15dc779aSAndroid Build Coastguard Worker val_3_28 = val_2_8 - val_2_14;
277*15dc779aSAndroid Build Coastguard Worker val_3_13 = val_2_9 + val_2_15;
278*15dc779aSAndroid Build Coastguard Worker val_3_29 = val_2_9 - val_2_15;
279*15dc779aSAndroid Build Coastguard Worker val_3_4 = val_2_10 + val_2_12;
280*15dc779aSAndroid Build Coastguard Worker val_3_20 = val_2_10 - val_2_12;
281*15dc779aSAndroid Build Coastguard Worker val_3_5 = val_2_11 + val_2_13;
282*15dc779aSAndroid Build Coastguard Worker val_3_21 = val_2_11 - val_2_13;
283*15dc779aSAndroid Build Coastguard Worker
284*15dc779aSAndroid Build Coastguard Worker val_9 = (val_1_2 + val_1_14) * -MPS_COS_3PI_DIV8;
285*15dc779aSAndroid Build Coastguard Worker val_10 = (val_1_2 - val_1_14) * MPS_COS_PI_DIV8;
286*15dc779aSAndroid Build Coastguard Worker val_8 = (val_1_3 + val_1_15) * MPS_COS_3PI_DIV8;
287*15dc779aSAndroid Build Coastguard Worker val_11 = (val_1_3 - val_1_15) * MPS_COS_PI_DIV8;
288*15dc779aSAndroid Build Coastguard Worker val_5 = (val_1_4 + val_1_12) * -MPS_INV_SQRT2;
289*15dc779aSAndroid Build Coastguard Worker val_6 = (val_1_4 - val_1_12) * MPS_INV_SQRT2;
290*15dc779aSAndroid Build Coastguard Worker val_4 = (val_1_5 + val_1_13) * MPS_INV_SQRT2;
291*15dc779aSAndroid Build Coastguard Worker val_7 = (val_1_5 - val_1_13) * MPS_INV_SQRT2;
292*15dc779aSAndroid Build Coastguard Worker val_13 = (val_1_6 + val_1_10) * -MPS_COS_PI_DIV8;
293*15dc779aSAndroid Build Coastguard Worker val_14 = (val_1_6 - val_1_10) * MPS_COS_3PI_DIV8;
294*15dc779aSAndroid Build Coastguard Worker val_12 = (val_1_7 + val_1_11) * MPS_COS_PI_DIV8;
295*15dc779aSAndroid Build Coastguard Worker val_15 = (val_1_7 - val_1_11) * MPS_COS_3PI_DIV8;
296*15dc779aSAndroid Build Coastguard Worker
297*15dc779aSAndroid Build Coastguard Worker val_1_2 = val_8 * MPS_SQRT2PLUS1 - val_12 * MPS_SQRT2MINUS1;
298*15dc779aSAndroid Build Coastguard Worker val_1_3 = val_9 * MPS_SQRT2PLUS1 - val_13 * MPS_SQRT2MINUS1;
299*15dc779aSAndroid Build Coastguard Worker val_1_4 = val_10 * MPS_SQRT2MINUS1 - val_14 * MPS_SQRT2PLUS1;
300*15dc779aSAndroid Build Coastguard Worker val_1_5 = val_11 * MPS_SQRT2MINUS1 - val_15 * MPS_SQRT2PLUS1;
301*15dc779aSAndroid Build Coastguard Worker
302*15dc779aSAndroid Build Coastguard Worker val_8 += val_12;
303*15dc779aSAndroid Build Coastguard Worker val_9 += val_13;
304*15dc779aSAndroid Build Coastguard Worker val_10 += val_14;
305*15dc779aSAndroid Build Coastguard Worker val_11 += val_15;
306*15dc779aSAndroid Build Coastguard Worker val_1_6 = val_1_0 + val_4;
307*15dc779aSAndroid Build Coastguard Worker val_1_10 = val_1_0 - val_4;
308*15dc779aSAndroid Build Coastguard Worker val_1_7 = val_1_1 + val_5;
309*15dc779aSAndroid Build Coastguard Worker val_1_11 = val_1_1 - val_5;
310*15dc779aSAndroid Build Coastguard Worker
311*15dc779aSAndroid Build Coastguard Worker val_1_12 = val_6 - val_1_9;
312*15dc779aSAndroid Build Coastguard Worker val_1_14 = val_6 + val_1_9;
313*15dc779aSAndroid Build Coastguard Worker val_1_13 = val_1_8 + val_7;
314*15dc779aSAndroid Build Coastguard Worker val_1_15 = val_1_8 - val_7;
315*15dc779aSAndroid Build Coastguard Worker
316*15dc779aSAndroid Build Coastguard Worker val_0 = val_1_6 - val_1_14;
317*15dc779aSAndroid Build Coastguard Worker val_2 = val_1_6 + val_1_14;
318*15dc779aSAndroid Build Coastguard Worker val_1 = val_1_7 + val_1_15;
319*15dc779aSAndroid Build Coastguard Worker val_3 = val_1_7 - val_1_15;
320*15dc779aSAndroid Build Coastguard Worker val_4 = val_1_10 + val_1_12;
321*15dc779aSAndroid Build Coastguard Worker val_6 = val_1_10 - val_1_12;
322*15dc779aSAndroid Build Coastguard Worker val_5 = val_1_11 + val_1_13;
323*15dc779aSAndroid Build Coastguard Worker val_7 = val_1_11 - val_1_13;
324*15dc779aSAndroid Build Coastguard Worker
325*15dc779aSAndroid Build Coastguard Worker val_1_10 = val_8 + val_10;
326*15dc779aSAndroid Build Coastguard Worker val_10 = val_8 - val_10;
327*15dc779aSAndroid Build Coastguard Worker val_1_11 = val_9 + val_11;
328*15dc779aSAndroid Build Coastguard Worker val_11 = val_9 - val_11;
329*15dc779aSAndroid Build Coastguard Worker
330*15dc779aSAndroid Build Coastguard Worker val_12 = val_1_2 + val_1_4;
331*15dc779aSAndroid Build Coastguard Worker val_14 = val_1_2 - val_1_4;
332*15dc779aSAndroid Build Coastguard Worker val_13 = val_1_3 + val_1_5;
333*15dc779aSAndroid Build Coastguard Worker val_15 = val_1_3 - val_1_5;
334*15dc779aSAndroid Build Coastguard Worker
335*15dc779aSAndroid Build Coastguard Worker val_3_2 = val_2 + val_1_10;
336*15dc779aSAndroid Build Coastguard Worker val_3_18 = val_2 - val_1_10;
337*15dc779aSAndroid Build Coastguard Worker val_3_3 = val_3 + val_1_11;
338*15dc779aSAndroid Build Coastguard Worker val_3_19 = val_3 - val_1_11;
339*15dc779aSAndroid Build Coastguard Worker val_3_6 = val_0 + val_12;
340*15dc779aSAndroid Build Coastguard Worker val_3_22 = val_0 - val_12;
341*15dc779aSAndroid Build Coastguard Worker val_3_7 = val_1 + val_13;
342*15dc779aSAndroid Build Coastguard Worker val_3_23 = val_1 - val_13;
343*15dc779aSAndroid Build Coastguard Worker val_3_14 = val_4 + val_10;
344*15dc779aSAndroid Build Coastguard Worker val_3_30 = val_4 - val_10;
345*15dc779aSAndroid Build Coastguard Worker val_3_15 = val_5 + val_11;
346*15dc779aSAndroid Build Coastguard Worker val_3_31 = val_5 - val_11;
347*15dc779aSAndroid Build Coastguard Worker val_3_10 = val_6 + val_14;
348*15dc779aSAndroid Build Coastguard Worker val_3_26 = val_6 - val_14;
349*15dc779aSAndroid Build Coastguard Worker val_3_11 = val_7 + val_15;
350*15dc779aSAndroid Build Coastguard Worker val_3_27 = val_7 - val_15;
351*15dc779aSAndroid Build Coastguard Worker
352*15dc779aSAndroid Build Coastguard Worker val_1_0 = subband[0] - subband[32];
353*15dc779aSAndroid Build Coastguard Worker val_1_1 = subband[1] - subband[33];
354*15dc779aSAndroid Build Coastguard Worker val_1_2 = subband[4] - subband[36];
355*15dc779aSAndroid Build Coastguard Worker val_1_3 = subband[5] - subband[37];
356*15dc779aSAndroid Build Coastguard Worker val_1_4 = subband[8] - subband[40];
357*15dc779aSAndroid Build Coastguard Worker val_1_5 = subband[9] - subband[41];
358*15dc779aSAndroid Build Coastguard Worker val_1_6 = subband[12] - subband[44];
359*15dc779aSAndroid Build Coastguard Worker val_1_7 = subband[13] - subband[45];
360*15dc779aSAndroid Build Coastguard Worker val_1_8 = subband[16] - subband[48];
361*15dc779aSAndroid Build Coastguard Worker val_1_9 = subband[17] - subband[49];
362*15dc779aSAndroid Build Coastguard Worker val_1_10 = subband[20] - subband[52];
363*15dc779aSAndroid Build Coastguard Worker val_1_11 = subband[21] - subband[53];
364*15dc779aSAndroid Build Coastguard Worker val_1_12 = subband[24] - subband[56];
365*15dc779aSAndroid Build Coastguard Worker val_1_13 = subband[25] - subband[57];
366*15dc779aSAndroid Build Coastguard Worker val_1_14 = subband[28] - subband[60];
367*15dc779aSAndroid Build Coastguard Worker val_1_15 = subband[29] - subband[61];
368*15dc779aSAndroid Build Coastguard Worker
369*15dc779aSAndroid Build Coastguard Worker val_9 = (val_1_2 + val_1_14) * -MPS_COS_3PI_DIV8;
370*15dc779aSAndroid Build Coastguard Worker val_10 = (val_1_2 - val_1_14) * MPS_COS_PI_DIV8;
371*15dc779aSAndroid Build Coastguard Worker val_8 = (val_1_3 + val_1_15) * MPS_COS_3PI_DIV8;
372*15dc779aSAndroid Build Coastguard Worker val_11 = (val_1_3 - val_1_15) * MPS_COS_PI_DIV8;
373*15dc779aSAndroid Build Coastguard Worker val_5 = (val_1_4 + val_1_12) * -MPS_INV_SQRT2;
374*15dc779aSAndroid Build Coastguard Worker val_6 = (val_1_4 - val_1_12) * MPS_INV_SQRT2;
375*15dc779aSAndroid Build Coastguard Worker val_4 = (val_1_5 + val_1_13) * MPS_INV_SQRT2;
376*15dc779aSAndroid Build Coastguard Worker val_7 = (val_1_5 - val_1_13) * MPS_INV_SQRT2;
377*15dc779aSAndroid Build Coastguard Worker val_13 = (val_1_6 + val_1_10) * -MPS_COS_PI_DIV8;
378*15dc779aSAndroid Build Coastguard Worker val_14 = (val_1_6 - val_1_10) * MPS_COS_3PI_DIV8;
379*15dc779aSAndroid Build Coastguard Worker val_12 = (val_1_7 + val_1_11) * MPS_COS_PI_DIV8;
380*15dc779aSAndroid Build Coastguard Worker val_15 = (val_1_7 - val_1_11) * MPS_COS_3PI_DIV8;
381*15dc779aSAndroid Build Coastguard Worker
382*15dc779aSAndroid Build Coastguard Worker val_1_2 = val_8 * MPS_SQRT2PLUS1 - val_12 * MPS_SQRT2MINUS1;
383*15dc779aSAndroid Build Coastguard Worker val_1_3 = val_9 * MPS_SQRT2PLUS1 - val_13 * MPS_SQRT2MINUS1;
384*15dc779aSAndroid Build Coastguard Worker val_1_4 = val_10 * MPS_SQRT2MINUS1 - val_14 * MPS_SQRT2PLUS1;
385*15dc779aSAndroid Build Coastguard Worker val_1_5 = val_11 * MPS_SQRT2MINUS1 - val_15 * MPS_SQRT2PLUS1;
386*15dc779aSAndroid Build Coastguard Worker
387*15dc779aSAndroid Build Coastguard Worker val_8 += val_12;
388*15dc779aSAndroid Build Coastguard Worker val_9 += val_13;
389*15dc779aSAndroid Build Coastguard Worker val_10 += val_14;
390*15dc779aSAndroid Build Coastguard Worker val_11 += val_15;
391*15dc779aSAndroid Build Coastguard Worker val_1_6 = val_1_0 + val_4;
392*15dc779aSAndroid Build Coastguard Worker val_1_10 = val_1_0 - val_4;
393*15dc779aSAndroid Build Coastguard Worker val_1_7 = val_1_1 + val_5;
394*15dc779aSAndroid Build Coastguard Worker val_1_11 = val_1_1 - val_5;
395*15dc779aSAndroid Build Coastguard Worker
396*15dc779aSAndroid Build Coastguard Worker val_1_12 = val_6 - val_1_9;
397*15dc779aSAndroid Build Coastguard Worker val_1_14 = val_6 + val_1_9;
398*15dc779aSAndroid Build Coastguard Worker val_1_13 = val_1_8 + val_7;
399*15dc779aSAndroid Build Coastguard Worker val_1_15 = val_1_8 - val_7;
400*15dc779aSAndroid Build Coastguard Worker
401*15dc779aSAndroid Build Coastguard Worker val_0 = val_1_6 - val_1_14;
402*15dc779aSAndroid Build Coastguard Worker val_2 = val_1_6 + val_1_14;
403*15dc779aSAndroid Build Coastguard Worker val_1 = val_1_7 + val_1_15;
404*15dc779aSAndroid Build Coastguard Worker val_3 = val_1_7 - val_1_15;
405*15dc779aSAndroid Build Coastguard Worker val_4 = val_1_10 + val_1_12;
406*15dc779aSAndroid Build Coastguard Worker val_6 = val_1_10 - val_1_12;
407*15dc779aSAndroid Build Coastguard Worker val_5 = val_1_11 + val_1_13;
408*15dc779aSAndroid Build Coastguard Worker val_7 = val_1_11 - val_1_13;
409*15dc779aSAndroid Build Coastguard Worker
410*15dc779aSAndroid Build Coastguard Worker val_1_10 = val_8 + val_10;
411*15dc779aSAndroid Build Coastguard Worker val_10 = val_8 - val_10;
412*15dc779aSAndroid Build Coastguard Worker val_1_11 = val_9 + val_11;
413*15dc779aSAndroid Build Coastguard Worker val_11 = val_9 - val_11;
414*15dc779aSAndroid Build Coastguard Worker
415*15dc779aSAndroid Build Coastguard Worker val_12 = val_1_2 + val_1_4;
416*15dc779aSAndroid Build Coastguard Worker val_14 = val_1_2 - val_1_4;
417*15dc779aSAndroid Build Coastguard Worker val_13 = val_1_3 + val_1_5;
418*15dc779aSAndroid Build Coastguard Worker val_15 = val_1_3 - val_1_5;
419*15dc779aSAndroid Build Coastguard Worker
420*15dc779aSAndroid Build Coastguard Worker val_1_0 = val_2 + val_1_10;
421*15dc779aSAndroid Build Coastguard Worker val_1_8 = val_2 - val_1_10;
422*15dc779aSAndroid Build Coastguard Worker val_1_1 = val_3 + val_1_11;
423*15dc779aSAndroid Build Coastguard Worker val_1_9 = val_3 - val_1_11;
424*15dc779aSAndroid Build Coastguard Worker val_1_2 = val_0 + val_12;
425*15dc779aSAndroid Build Coastguard Worker val_1_10 = val_0 - val_12;
426*15dc779aSAndroid Build Coastguard Worker val_1_3 = val_1 + val_13;
427*15dc779aSAndroid Build Coastguard Worker val_1_11 = val_1 - val_13;
428*15dc779aSAndroid Build Coastguard Worker val_1_6 = val_4 + val_10;
429*15dc779aSAndroid Build Coastguard Worker val_1_14 = val_4 - val_10;
430*15dc779aSAndroid Build Coastguard Worker val_1_7 = val_5 + val_11;
431*15dc779aSAndroid Build Coastguard Worker val_1_15 = val_5 - val_11;
432*15dc779aSAndroid Build Coastguard Worker val_1_4 = val_6 + val_14;
433*15dc779aSAndroid Build Coastguard Worker val_1_12 = val_6 - val_14;
434*15dc779aSAndroid Build Coastguard Worker val_1_5 = val_7 + val_15;
435*15dc779aSAndroid Build Coastguard Worker val_1_13 = val_7 - val_15;
436*15dc779aSAndroid Build Coastguard Worker
437*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_0;
438*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_1;
439*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_0 + val_4_0;
440*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_1 + val_4_1;
441*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_2;
442*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_3;
443*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_2 + val_4_2;
444*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_3 + val_4_3;
445*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_4;
446*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_5;
447*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_4 + val_4_4;
448*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_5 + val_4_5;
449*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_6;
450*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_7;
451*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_6 + val_4_6;
452*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_7 + val_4_7;
453*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_8;
454*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_9;
455*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_8 + val_4_8;
456*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_9 + val_4_9;
457*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_10;
458*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_11;
459*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_10 + val_4_10;
460*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_11 + val_4_11;
461*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_12;
462*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_13;
463*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_12 + val_4_12;
464*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_13 + val_4_13;
465*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_14;
466*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_15;
467*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_14 + val_4_14;
468*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_15 + val_4_15;
469*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_16;
470*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_17;
471*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_0 - val_4_0;
472*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_1 - val_4_1;
473*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_18;
474*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_19;
475*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_2 - val_4_2;
476*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_3 - val_4_3;
477*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_20;
478*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_21;
479*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_4 - val_4_4;
480*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_5 - val_4_5;
481*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_22;
482*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_23;
483*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_6 - val_4_6;
484*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_7 - val_4_7;
485*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_24;
486*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_25;
487*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_8 - val_4_8;
488*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_9 - val_4_9;
489*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_26;
490*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_27;
491*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_10 - val_4_10;
492*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_11 - val_4_11;
493*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_28;
494*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_29;
495*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_12 - val_4_12;
496*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_13 - val_4_13;
497*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_30;
498*15dc779aSAndroid Build Coastguard Worker *subband++ = val_3_31;
499*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_14 - val_4_14;
500*15dc779aSAndroid Build Coastguard Worker *subband++ = val_1_15 - val_4_15;
501*15dc779aSAndroid Build Coastguard Worker }
502*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_cos_mod(FLOAT32 * subband,ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank)503*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_cos_mod(
504*15dc779aSAndroid Build Coastguard Worker FLOAT32 *subband, ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank) {
505*15dc779aSAndroid Build Coastguard Worker WORD32 idx, length;
506*15dc779aSAndroid Build Coastguard Worker FLOAT32 weight_imag, weight_real;
507*15dc779aSAndroid Build Coastguard Worker FLOAT32 real_1, real_2;
508*15dc779aSAndroid Build Coastguard Worker FLOAT32 imag_1, imag_2;
509*15dc779aSAndroid Build Coastguard Worker FLOAT32 accu1, accu2;
510*15dc779aSAndroid Build Coastguard Worker
511*15dc779aSAndroid Build Coastguard Worker length = 32;
512*15dc779aSAndroid Build Coastguard Worker
513*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < (length / 2); idx++) {
514*15dc779aSAndroid Build Coastguard Worker real_1 = subband[2 * idx];
515*15dc779aSAndroid Build Coastguard Worker imag_2 = subband[2 * idx + 1];
516*15dc779aSAndroid Build Coastguard Worker real_2 = subband[2 * length - 2 - 2 * idx];
517*15dc779aSAndroid Build Coastguard Worker imag_1 = subband[2 * length - 1 - 2 * idx];
518*15dc779aSAndroid Build Coastguard Worker
519*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->sin_twiddle[idx];
520*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->cos_twiddle[idx];
521*15dc779aSAndroid Build Coastguard Worker
522*15dc779aSAndroid Build Coastguard Worker accu1 = imag_1 * weight_imag + real_1 * weight_real;
523*15dc779aSAndroid Build Coastguard Worker accu2 = imag_1 * weight_real - real_1 * weight_imag;
524*15dc779aSAndroid Build Coastguard Worker
525*15dc779aSAndroid Build Coastguard Worker subband[2 * idx] = accu1;
526*15dc779aSAndroid Build Coastguard Worker subband[2 * idx + 1] = accu2;
527*15dc779aSAndroid Build Coastguard Worker
528*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->sin_twiddle[length - 1 - idx];
529*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->cos_twiddle[length - 1 - idx];
530*15dc779aSAndroid Build Coastguard Worker
531*15dc779aSAndroid Build Coastguard Worker accu1 = imag_2 * weight_imag + real_2 * weight_real;
532*15dc779aSAndroid Build Coastguard Worker accu2 = imag_2 * weight_real - real_2 * weight_imag;
533*15dc779aSAndroid Build Coastguard Worker
534*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 2 - 2 * idx] = accu1;
535*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 1 - 2 * idx] = accu2;
536*15dc779aSAndroid Build Coastguard Worker }
537*15dc779aSAndroid Build Coastguard Worker
538*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fft32(subband);
539*15dc779aSAndroid Build Coastguard Worker
540*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->alt_sin_twiddle[0];
541*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->alt_sin_twiddle[length];
542*15dc779aSAndroid Build Coastguard Worker
543*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < length / 2; idx++) {
544*15dc779aSAndroid Build Coastguard Worker real_1 = subband[2 * idx];
545*15dc779aSAndroid Build Coastguard Worker imag_1 = subband[2 * idx + 1];
546*15dc779aSAndroid Build Coastguard Worker real_2 = subband[2 * length - 2 - 2 * idx];
547*15dc779aSAndroid Build Coastguard Worker imag_2 = subband[2 * length - 1 - 2 * idx];
548*15dc779aSAndroid Build Coastguard Worker
549*15dc779aSAndroid Build Coastguard Worker accu1 = real_1 * weight_real + imag_1 * weight_imag;
550*15dc779aSAndroid Build Coastguard Worker accu2 = real_1 * weight_imag - imag_1 * weight_real;
551*15dc779aSAndroid Build Coastguard Worker
552*15dc779aSAndroid Build Coastguard Worker subband[2 * idx] = accu1;
553*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 1 - 2 * idx] = accu2;
554*15dc779aSAndroid Build Coastguard Worker
555*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->alt_sin_twiddle[idx + 1];
556*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->alt_sin_twiddle[length - 1 - idx];
557*15dc779aSAndroid Build Coastguard Worker
558*15dc779aSAndroid Build Coastguard Worker accu1 = real_2 * weight_imag + imag_2 * weight_real;
559*15dc779aSAndroid Build Coastguard Worker accu2 = real_2 * weight_real - imag_2 * weight_imag;
560*15dc779aSAndroid Build Coastguard Worker
561*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 2 - 2 * idx] = accu1;
562*15dc779aSAndroid Build Coastguard Worker subband[2 * idx + 1] = accu2;
563*15dc779aSAndroid Build Coastguard Worker }
564*15dc779aSAndroid Build Coastguard Worker }
565*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_sin_mod(FLOAT32 * subband,ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank)566*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_sin_mod(
567*15dc779aSAndroid Build Coastguard Worker FLOAT32 *subband, ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank) {
568*15dc779aSAndroid Build Coastguard Worker WORD32 idx, length;
569*15dc779aSAndroid Build Coastguard Worker FLOAT32 weight_real, weight_imag;
570*15dc779aSAndroid Build Coastguard Worker FLOAT32 real_1, imag_1, real_2, imag_2;
571*15dc779aSAndroid Build Coastguard Worker FLOAT32 accu1, accu2;
572*15dc779aSAndroid Build Coastguard Worker
573*15dc779aSAndroid Build Coastguard Worker length = 32;
574*15dc779aSAndroid Build Coastguard Worker
575*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < length / 2; idx++) {
576*15dc779aSAndroid Build Coastguard Worker real_1 = subband[2 * idx];
577*15dc779aSAndroid Build Coastguard Worker imag_2 = subband[2 * idx + 1];
578*15dc779aSAndroid Build Coastguard Worker real_2 = subband[2 * length - 2 - 2 * idx];
579*15dc779aSAndroid Build Coastguard Worker imag_1 = subband[2 * length - 1 - 2 * idx];
580*15dc779aSAndroid Build Coastguard Worker
581*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->sin_twiddle[idx];
582*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->cos_twiddle[idx];
583*15dc779aSAndroid Build Coastguard Worker
584*15dc779aSAndroid Build Coastguard Worker accu1 = imag_1 * weight_imag + real_1 * weight_real;
585*15dc779aSAndroid Build Coastguard Worker accu2 = imag_1 * weight_real - real_1 * weight_imag;
586*15dc779aSAndroid Build Coastguard Worker
587*15dc779aSAndroid Build Coastguard Worker subband[2 * idx + 1] = accu1;
588*15dc779aSAndroid Build Coastguard Worker subband[2 * idx] = accu2;
589*15dc779aSAndroid Build Coastguard Worker
590*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->sin_twiddle[length - 1 - idx];
591*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->cos_twiddle[length - 1 - idx];
592*15dc779aSAndroid Build Coastguard Worker
593*15dc779aSAndroid Build Coastguard Worker accu1 = imag_2 * weight_imag + real_2 * weight_real;
594*15dc779aSAndroid Build Coastguard Worker accu2 = imag_2 * weight_real - real_2 * weight_imag;
595*15dc779aSAndroid Build Coastguard Worker
596*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 1 - 2 * idx] = accu1;
597*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 2 - 2 * idx] = accu2;
598*15dc779aSAndroid Build Coastguard Worker }
599*15dc779aSAndroid Build Coastguard Worker
600*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fft32(subband);
601*15dc779aSAndroid Build Coastguard Worker
602*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->alt_sin_twiddle[0];
603*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->alt_sin_twiddle[length];
604*15dc779aSAndroid Build Coastguard Worker
605*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < length / 2; idx++) {
606*15dc779aSAndroid Build Coastguard Worker real_1 = subband[2 * idx];
607*15dc779aSAndroid Build Coastguard Worker imag_1 = subband[2 * idx + 1];
608*15dc779aSAndroid Build Coastguard Worker real_2 = subband[2 * length - 2 - 2 * idx];
609*15dc779aSAndroid Build Coastguard Worker imag_2 = subband[2 * length - 1 - 2 * idx];
610*15dc779aSAndroid Build Coastguard Worker
611*15dc779aSAndroid Build Coastguard Worker accu1 = -(real_1 * weight_real + imag_1 * weight_imag);
612*15dc779aSAndroid Build Coastguard Worker accu2 = -(real_1 * weight_imag - imag_1 * weight_real);
613*15dc779aSAndroid Build Coastguard Worker
614*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 1 - 2 * idx] = accu1;
615*15dc779aSAndroid Build Coastguard Worker subband[2 * idx] = accu2;
616*15dc779aSAndroid Build Coastguard Worker
617*15dc779aSAndroid Build Coastguard Worker weight_imag = pstr_qmf_synth_filter_bank->alt_sin_twiddle[idx + 1];
618*15dc779aSAndroid Build Coastguard Worker weight_real = pstr_qmf_synth_filter_bank->alt_sin_twiddle[length - 1 - idx];
619*15dc779aSAndroid Build Coastguard Worker
620*15dc779aSAndroid Build Coastguard Worker accu1 = -(real_2 * weight_imag + imag_2 * weight_real);
621*15dc779aSAndroid Build Coastguard Worker accu2 = -(real_2 * weight_real - imag_2 * weight_imag);
622*15dc779aSAndroid Build Coastguard Worker
623*15dc779aSAndroid Build Coastguard Worker subband[2 * idx + 1] = accu1;
624*15dc779aSAndroid Build Coastguard Worker subband[2 * length - 2 - 2 * idx] = accu2;
625*15dc779aSAndroid Build Coastguard Worker }
626*15dc779aSAndroid Build Coastguard Worker }
627*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_inverse_modulation(FLOAT32 * qmf_real,FLOAT32 * qmf_imag,ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank)628*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_inverse_modulation(
629*15dc779aSAndroid Build Coastguard Worker FLOAT32 *qmf_real, FLOAT32 *qmf_imag,
630*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank) {
631*15dc779aSAndroid Build Coastguard Worker WORD32 idx, no_synthesis_channels, length;
632*15dc779aSAndroid Build Coastguard Worker
633*15dc779aSAndroid Build Coastguard Worker FLOAT32 r1, i1, r2, i2;
634*15dc779aSAndroid Build Coastguard Worker
635*15dc779aSAndroid Build Coastguard Worker no_synthesis_channels = NUM_QMF_BANDS;
636*15dc779aSAndroid Build Coastguard Worker
637*15dc779aSAndroid Build Coastguard Worker length = no_synthesis_channels / 2;
638*15dc779aSAndroid Build Coastguard Worker
639*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_cos_mod(qmf_real, pstr_qmf_synth_filter_bank);
640*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_sin_mod(qmf_imag, pstr_qmf_synth_filter_bank);
641*15dc779aSAndroid Build Coastguard Worker
642*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < length; idx++) {
643*15dc779aSAndroid Build Coastguard Worker r1 = qmf_real[idx];
644*15dc779aSAndroid Build Coastguard Worker i2 = qmf_imag[no_synthesis_channels - 1 - idx];
645*15dc779aSAndroid Build Coastguard Worker r2 = qmf_real[no_synthesis_channels - idx - 1];
646*15dc779aSAndroid Build Coastguard Worker i1 = qmf_imag[idx];
647*15dc779aSAndroid Build Coastguard Worker
648*15dc779aSAndroid Build Coastguard Worker qmf_real[idx] = (r1 - i1);
649*15dc779aSAndroid Build Coastguard Worker qmf_imag[no_synthesis_channels - 1 - idx] = -(r1 + i1);
650*15dc779aSAndroid Build Coastguard Worker qmf_real[no_synthesis_channels - idx - 1] = (r2 - i2);
651*15dc779aSAndroid Build Coastguard Worker qmf_imag[idx] = -(r2 + i2);
652*15dc779aSAndroid Build Coastguard Worker }
653*15dc779aSAndroid Build Coastguard Worker }
654*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_fct3_4(FLOAT32 * subband)655*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_fct3_4(FLOAT32 *subband) {
656*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_00, val_01, val_10, val_11;
657*15dc779aSAndroid Build Coastguard Worker
658*15dc779aSAndroid Build Coastguard Worker subband[1] *= MPS_INV_SQRT2;
659*15dc779aSAndroid Build Coastguard Worker
660*15dc779aSAndroid Build Coastguard Worker val_00 = subband[0] + subband[1];
661*15dc779aSAndroid Build Coastguard Worker val_01 = subband[0] - subband[1];
662*15dc779aSAndroid Build Coastguard Worker
663*15dc779aSAndroid Build Coastguard Worker val_10 = subband[2] * MPS_COS_6_PI_BY_16 + subband[3] * MPS_SIN_6_PI_BY_16;
664*15dc779aSAndroid Build Coastguard Worker val_11 = subband[2] * MPS_SIN_6_PI_BY_16 - subband[3] * MPS_COS_6_PI_BY_16;
665*15dc779aSAndroid Build Coastguard Worker
666*15dc779aSAndroid Build Coastguard Worker subband[0] = val_00 + val_10;
667*15dc779aSAndroid Build Coastguard Worker subband[3] = val_00 - val_10;
668*15dc779aSAndroid Build Coastguard Worker subband[1] = val_01 + val_11;
669*15dc779aSAndroid Build Coastguard Worker subband[2] = val_01 - val_11;
670*15dc779aSAndroid Build Coastguard Worker }
671*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_fst3_4r(FLOAT32 * subband)672*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_fst3_4r(FLOAT32 *subband) {
673*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_00, val_01, val_10, val_11;
674*15dc779aSAndroid Build Coastguard Worker
675*15dc779aSAndroid Build Coastguard Worker subband[2] *= MPS_INV_SQRT2;
676*15dc779aSAndroid Build Coastguard Worker
677*15dc779aSAndroid Build Coastguard Worker val_00 = subband[3] + subband[2];
678*15dc779aSAndroid Build Coastguard Worker val_01 = subband[3] - subband[2];
679*15dc779aSAndroid Build Coastguard Worker
680*15dc779aSAndroid Build Coastguard Worker val_10 = subband[1] * MPS_COS_6_PI_BY_16 + subband[0] * MPS_SIN_6_PI_BY_16;
681*15dc779aSAndroid Build Coastguard Worker val_11 = subband[0] * MPS_COS_6_PI_BY_16 - subband[1] * MPS_SIN_6_PI_BY_16;
682*15dc779aSAndroid Build Coastguard Worker
683*15dc779aSAndroid Build Coastguard Worker subband[3] = val_00 + val_10;
684*15dc779aSAndroid Build Coastguard Worker subband[0] = val_10 - val_00;
685*15dc779aSAndroid Build Coastguard Worker subband[2] = val_11 - val_01;
686*15dc779aSAndroid Build Coastguard Worker subband[1] = val_11 + val_01;
687*15dc779aSAndroid Build Coastguard Worker }
688*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_fct4_4r(FLOAT32 * subband)689*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_fct4_4r(FLOAT32 *subband) {
690*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_00, val_01, val_10, val_11;
691*15dc779aSAndroid Build Coastguard Worker subband[1] *= MPS_INV_SQRT2;
692*15dc779aSAndroid Build Coastguard Worker
693*15dc779aSAndroid Build Coastguard Worker val_00 = subband[0] + subband[1];
694*15dc779aSAndroid Build Coastguard Worker val_01 = subband[0] - subband[1];
695*15dc779aSAndroid Build Coastguard Worker
696*15dc779aSAndroid Build Coastguard Worker subband[2] *= MPS_INV_SQRT2;
697*15dc779aSAndroid Build Coastguard Worker
698*15dc779aSAndroid Build Coastguard Worker val_11 = subband[3] - subband[2];
699*15dc779aSAndroid Build Coastguard Worker val_10 = subband[3] + subband[2];
700*15dc779aSAndroid Build Coastguard Worker
701*15dc779aSAndroid Build Coastguard Worker subband[3] = val_00 * MPS_COS_PI_BY_16 + val_10 * MPS_SIN_PI_BY_16;
702*15dc779aSAndroid Build Coastguard Worker subband[0] = val_00 * MPS_SIN_PI_BY_16 - val_10 * MPS_COS_PI_BY_16;
703*15dc779aSAndroid Build Coastguard Worker
704*15dc779aSAndroid Build Coastguard Worker subband[2] = val_01 * MPS_COS_3_PI_BY_16 - val_11 * MPS_SIN_3_PI_BY_16;
705*15dc779aSAndroid Build Coastguard Worker subband[1] = val_01 * MPS_SIN_3_PI_BY_16 + val_11 * MPS_COS_3_PI_BY_16;
706*15dc779aSAndroid Build Coastguard Worker }
707*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_fst4_4(FLOAT32 * subband)708*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_fst4_4(FLOAT32 *subband) {
709*15dc779aSAndroid Build Coastguard Worker FLOAT32 val_00, val_01, val_10, val_11;
710*15dc779aSAndroid Build Coastguard Worker
711*15dc779aSAndroid Build Coastguard Worker subband[1] *= MPS_INV_SQRT2;
712*15dc779aSAndroid Build Coastguard Worker
713*15dc779aSAndroid Build Coastguard Worker val_10 = subband[0] + subband[1];
714*15dc779aSAndroid Build Coastguard Worker val_11 = subband[0] - subband[1];
715*15dc779aSAndroid Build Coastguard Worker
716*15dc779aSAndroid Build Coastguard Worker subband[2] *= MPS_INV_SQRT2;
717*15dc779aSAndroid Build Coastguard Worker
718*15dc779aSAndroid Build Coastguard Worker val_01 = subband[3] - subband[2];
719*15dc779aSAndroid Build Coastguard Worker val_00 = subband[3] + subband[2];
720*15dc779aSAndroid Build Coastguard Worker
721*15dc779aSAndroid Build Coastguard Worker subband[0] = val_00 * MPS_COS_PI_BY_16 + val_10 * MPS_SIN_PI_BY_16;
722*15dc779aSAndroid Build Coastguard Worker subband[3] = val_10 * MPS_COS_PI_BY_16 - val_00 * MPS_SIN_PI_BY_16;
723*15dc779aSAndroid Build Coastguard Worker
724*15dc779aSAndroid Build Coastguard Worker subband[1] = val_11 * MPS_SIN_3_PI_BY_16 - val_01 * MPS_COS_3_PI_BY_16;
725*15dc779aSAndroid Build Coastguard Worker subband[2] = val_01 * MPS_SIN_3_PI_BY_16 + val_11 * MPS_COS_3_PI_BY_16;
726*15dc779aSAndroid Build Coastguard Worker }
727*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_fct3_64(FLOAT32 * subband)728*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_fct3_64(FLOAT32 *subband) {
729*15dc779aSAndroid Build Coastguard Worker WORD32 idx;
730*15dc779aSAndroid Build Coastguard Worker const FLOAT32 *t_ptr;
731*15dc779aSAndroid Build Coastguard Worker FLOAT32 cos_val, sine_val;
732*15dc779aSAndroid Build Coastguard Worker FLOAT32 xp;
733*15dc779aSAndroid Build Coastguard Worker
734*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[1], &subband[32]);
735*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[2], &subband[16]);
736*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[3], &subband[48]);
737*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[4], &subband[8]);
738*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[5], &subband[40]);
739*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[6], &subband[24]);
740*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[7], &subband[56]);
741*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[9], &subband[36]);
742*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[10], &subband[20]);
743*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[11], &subband[52]);
744*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[13], &subband[44]);
745*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[14], &subband[28]);
746*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[15], &subband[60]);
747*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[17], &subband[34]);
748*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[19], &subband[50]);
749*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[21], &subband[42]);
750*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[22], &subband[26]);
751*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[23], &subband[58]);
752*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[25], &subband[38]);
753*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[27], &subband[54]);
754*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[29], &subband[46]);
755*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[31], &subband[62]);
756*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[35], &subband[49]);
757*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[37], &subband[41]);
758*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[39], &subband[57]);
759*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[43], &subband[53]);
760*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[47], &subband[61]);
761*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[55], &subband[59]);
762*15dc779aSAndroid Build Coastguard Worker
763*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[33], &subband[62]);
764*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[34], &subband[60]);
765*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[35], &subband[61]);
766*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[36], &subband[56]);
767*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[37], &subband[57]);
768*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[38], &subband[58]);
769*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[39], &subband[59]);
770*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[40], &subband[48]);
771*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[41], &subband[49]);
772*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[42], &subband[50]);
773*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[43], &subband[51]);
774*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[44], &subband[52]);
775*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[45], &subband[53]);
776*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[46], &subband[54]);
777*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[47], &subband[55]);
778*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[17], &subband[30]);
779*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[18], &subband[28]);
780*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[19], &subband[29]);
781*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[20], &subband[24]);
782*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[21], &subband[25]);
783*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[22], &subband[26]);
784*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[23], &subband[27]);
785*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[9], &subband[14]);
786*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[10], &subband[12]);
787*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[11], &subband[13]);
788*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[41], &subband[46]);
789*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[42], &subband[44]);
790*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[43], &subband[45]);
791*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[54], &subband[49]);
792*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[52], &subband[50]);
793*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[53], &subband[51]);
794*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[5], &subband[6]);
795*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[21], &subband[22]);
796*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[26], &subband[25]);
797*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[37], &subband[38]);
798*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[58], &subband[57]);
799*15dc779aSAndroid Build Coastguard Worker
800*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_4(subband);
801*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct4_4r(subband + 4);
802*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_4(subband + 8);
803*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst3_4r(subband + 12);
804*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_4(subband + 16);
805*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct4_4r(subband + 20);
806*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst4_4(subband + 24);
807*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst3_4r(subband + 28);
808*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_4(subband + 32);
809*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct4_4r(subband + 36);
810*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_4(subband + 40);
811*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst3_4r(subband + 44);
812*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_4(subband + 48);
813*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst3_4r(subband + 52);
814*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst4_4(subband + 56);
815*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst3_4r(subband + 60);
816*15dc779aSAndroid Build Coastguard Worker
817*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 4; idx++) {
818*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub2(&subband[idx], &subband[7 - idx]);
819*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub2(&subband[16 + idx], &subband[23 - idx]);
820*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[31 - idx], &subband[24 + idx]);
821*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub2(&subband[32 + idx], &subband[39 - idx]);
822*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[63 - idx], &subband[56 + idx]);
823*15dc779aSAndroid Build Coastguard Worker }
824*15dc779aSAndroid Build Coastguard Worker t_ptr = trig_data_fct4_8;
825*15dc779aSAndroid Build Coastguard Worker
826*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 4; idx++) {
827*15dc779aSAndroid Build Coastguard Worker cos_val = *t_ptr++;
828*15dc779aSAndroid Build Coastguard Worker sine_val = *t_ptr++;
829*15dc779aSAndroid Build Coastguard Worker
830*15dc779aSAndroid Build Coastguard Worker xp = subband[8 + idx] * cos_val + subband[15 - idx] * sine_val;
831*15dc779aSAndroid Build Coastguard Worker subband[8 + idx] = subband[8 + idx] * sine_val - subband[15 - idx] * cos_val;
832*15dc779aSAndroid Build Coastguard Worker subband[15 - idx] = xp;
833*15dc779aSAndroid Build Coastguard Worker xp = subband[40 + idx] * cos_val + subband[47 - idx] * sine_val;
834*15dc779aSAndroid Build Coastguard Worker subband[40 + idx] = subband[40 + idx] * sine_val - subband[47 - idx] * cos_val;
835*15dc779aSAndroid Build Coastguard Worker subband[47 - idx] = xp;
836*15dc779aSAndroid Build Coastguard Worker xp = subband[48 + idx] * sine_val + subband[55 - idx] * cos_val;
837*15dc779aSAndroid Build Coastguard Worker subband[55 - idx] = subband[48 + idx] * cos_val - subband[55 - idx] * sine_val;
838*15dc779aSAndroid Build Coastguard Worker subband[48 + idx] = xp;
839*15dc779aSAndroid Build Coastguard Worker }
840*15dc779aSAndroid Build Coastguard Worker
841*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 8; idx++) {
842*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub2(&subband[idx], &subband[15 - idx]);
843*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub2(&subband[32 + idx], &subband[47 - idx]);
844*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub1(&subband[63 - idx], &subband[48 + idx]);
845*15dc779aSAndroid Build Coastguard Worker }
846*15dc779aSAndroid Build Coastguard Worker
847*15dc779aSAndroid Build Coastguard Worker t_ptr = trig_data_fct4_16;
848*15dc779aSAndroid Build Coastguard Worker
849*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 8; idx++) {
850*15dc779aSAndroid Build Coastguard Worker cos_val = *t_ptr++;
851*15dc779aSAndroid Build Coastguard Worker sine_val = *t_ptr++;
852*15dc779aSAndroid Build Coastguard Worker
853*15dc779aSAndroid Build Coastguard Worker xp = subband[16 + idx] * cos_val + subband[31 - idx] * sine_val;
854*15dc779aSAndroid Build Coastguard Worker subband[16 + idx] = subband[16 + idx] * sine_val - subband[31 - idx] * cos_val;
855*15dc779aSAndroid Build Coastguard Worker subband[31 - idx] = xp;
856*15dc779aSAndroid Build Coastguard Worker }
857*15dc779aSAndroid Build Coastguard Worker
858*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 16; idx++) {
859*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub2(&subband[idx], &subband[31 - idx]);
860*15dc779aSAndroid Build Coastguard Worker }
861*15dc779aSAndroid Build Coastguard Worker
862*15dc779aSAndroid Build Coastguard Worker t_ptr = trig_data_fct4_32;
863*15dc779aSAndroid Build Coastguard Worker
864*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 16; idx++) {
865*15dc779aSAndroid Build Coastguard Worker cos_val = *t_ptr++;
866*15dc779aSAndroid Build Coastguard Worker sine_val = *t_ptr++;
867*15dc779aSAndroid Build Coastguard Worker
868*15dc779aSAndroid Build Coastguard Worker xp = subband[32 + idx] * cos_val + subband[63 - idx] * sine_val;
869*15dc779aSAndroid Build Coastguard Worker subband[32 + idx] = subband[32 + idx] * sine_val - subband[63 - idx] * cos_val;
870*15dc779aSAndroid Build Coastguard Worker subband[63 - idx] = xp;
871*15dc779aSAndroid Build Coastguard Worker }
872*15dc779aSAndroid Build Coastguard Worker
873*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 32; idx++) {
874*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_add_sub2(&subband[idx], &subband[63 - idx]);
875*15dc779aSAndroid Build Coastguard Worker }
876*15dc779aSAndroid Build Coastguard Worker }
877*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_fst3_64(FLOAT32 * subband)878*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_fst3_64(FLOAT32 *subband) {
879*15dc779aSAndroid Build Coastguard Worker WORD32 k;
880*15dc779aSAndroid Build Coastguard Worker
881*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < 32; k++) {
882*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_bit_reversal(&subband[k], &subband[63 - k]);
883*15dc779aSAndroid Build Coastguard Worker }
884*15dc779aSAndroid Build Coastguard Worker
885*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_64(subband);
886*15dc779aSAndroid Build Coastguard Worker
887*15dc779aSAndroid Build Coastguard Worker for (k = 1; k < NUM_QMF_BANDS; k += 2) {
888*15dc779aSAndroid Build Coastguard Worker subband[k] = -subband[k];
889*15dc779aSAndroid Build Coastguard Worker }
890*15dc779aSAndroid Build Coastguard Worker }
891*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_forward_modulation(const FLOAT32 * time_in,FLOAT32 * real_subband,FLOAT32 * imag_subband)892*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_mps_forward_modulation(const FLOAT32 *time_in, FLOAT32 *real_subband,
893*15dc779aSAndroid Build Coastguard Worker FLOAT32 *imag_subband) {
894*15dc779aSAndroid Build Coastguard Worker WORD32 idx;
895*15dc779aSAndroid Build Coastguard Worker real_subband[0] = time_in[0];
896*15dc779aSAndroid Build Coastguard Worker
897*15dc779aSAndroid Build Coastguard Worker for (idx = 1; idx < NUM_QMF_BANDS; idx++) {
898*15dc779aSAndroid Build Coastguard Worker real_subband[idx] = time_in[idx] - time_in[(NUM_QMF_BANDS * 2) - idx];
899*15dc779aSAndroid Build Coastguard Worker imag_subband[idx - 1] = time_in[idx] + time_in[(NUM_QMF_BANDS * 2) - idx];
900*15dc779aSAndroid Build Coastguard Worker }
901*15dc779aSAndroid Build Coastguard Worker
902*15dc779aSAndroid Build Coastguard Worker imag_subband[63] = time_in[NUM_QMF_BANDS];
903*15dc779aSAndroid Build Coastguard Worker
904*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fct3_64(real_subband);
905*15dc779aSAndroid Build Coastguard Worker
906*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_fst3_64(imag_subband);
907*15dc779aSAndroid Build Coastguard Worker }
908*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_515_calculate_sbr_syn_filterbank(FLOAT32 * real_subband,FLOAT32 * imag_subband,FLOAT32 * time_sig,WORD32 channel,ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank,WORD32 slots,FLOAT32 * sbr_qmf_states_synthesis_per)909*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_mps_515_calculate_sbr_syn_filterbank(
910*15dc779aSAndroid Build Coastguard Worker FLOAT32 *real_subband, FLOAT32 *imag_subband, FLOAT32 *time_sig, WORD32 channel,
911*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_sac_pstr_qmf_synth_filter_bank pstr_qmf_synth_filter_bank, WORD32 slots,
912*15dc779aSAndroid Build Coastguard Worker FLOAT32 *sbr_qmf_states_synthesis_per) {
913*15dc779aSAndroid Build Coastguard Worker WORD32 idx, subband, slot;
914*15dc779aSAndroid Build Coastguard Worker const FLOAT32 *ptr_filter;
915*15dc779aSAndroid Build Coastguard Worker FLOAT32 accumlate;
916*15dc779aSAndroid Build Coastguard Worker FLOAT32 *synth_buf;
917*15dc779aSAndroid Build Coastguard Worker
918*15dc779aSAndroid Build Coastguard Worker synth_buf = &(sbr_qmf_states_synthesis_per[channel * QMF_FILTER_STATE_SYN_SIZE]);
919*15dc779aSAndroid Build Coastguard Worker
920*15dc779aSAndroid Build Coastguard Worker for (slot = 0; slot < slots; slot++) {
921*15dc779aSAndroid Build Coastguard Worker ptr_filter = pstr_qmf_synth_filter_bank->p_filter;
922*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_inverse_modulation(real_subband + NUM_QMF_BANDS * slot,
923*15dc779aSAndroid Build Coastguard Worker imag_subband + NUM_QMF_BANDS * slot,
924*15dc779aSAndroid Build Coastguard Worker pstr_qmf_synth_filter_bank);
925*15dc779aSAndroid Build Coastguard Worker
926*15dc779aSAndroid Build Coastguard Worker for (subband = 0; subband < NUM_QMF_BANDS; subband++) {
927*15dc779aSAndroid Build Coastguard Worker real_subband[NUM_QMF_BANDS * slot + subband] =
928*15dc779aSAndroid Build Coastguard Worker real_subband[NUM_QMF_BANDS * slot + subband] * (-0.015625f);
929*15dc779aSAndroid Build Coastguard Worker imag_subband[NUM_QMF_BANDS * slot + subband] =
930*15dc779aSAndroid Build Coastguard Worker imag_subband[NUM_QMF_BANDS * slot + subband] * (-0.015625f);
931*15dc779aSAndroid Build Coastguard Worker }
932*15dc779aSAndroid Build Coastguard Worker
933*15dc779aSAndroid Build Coastguard Worker for (subband = 0; subband < NUM_QMF_BANDS; subband++) {
934*15dc779aSAndroid Build Coastguard Worker FLOAT32 new_sample;
935*15dc779aSAndroid Build Coastguard Worker new_sample = imag_subband[NUM_QMF_BANDS * slot + 63 - subband];
936*15dc779aSAndroid Build Coastguard Worker
937*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 5; idx++) {
938*15dc779aSAndroid Build Coastguard Worker accumlate = synth_buf[2 * idx * NUM_QMF_BANDS + subband] + (*ptr_filter++) * new_sample;
939*15dc779aSAndroid Build Coastguard Worker synth_buf[2 * idx * NUM_QMF_BANDS + subband] = accumlate;
940*15dc779aSAndroid Build Coastguard Worker }
941*15dc779aSAndroid Build Coastguard Worker }
942*15dc779aSAndroid Build Coastguard Worker
943*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 5; idx++) {
944*15dc779aSAndroid Build Coastguard Worker accumlate = synth_buf[2 * idx * NUM_QMF_BANDS + NUM_QMF_BANDS + (NUM_QMF_BANDS - 1)] +
945*15dc779aSAndroid Build Coastguard Worker (*ptr_filter++) * real_subband[NUM_QMF_BANDS * slot];
946*15dc779aSAndroid Build Coastguard Worker synth_buf[2 * idx * NUM_QMF_BANDS + NUM_QMF_BANDS + (NUM_QMF_BANDS - 1)] = accumlate;
947*15dc779aSAndroid Build Coastguard Worker }
948*15dc779aSAndroid Build Coastguard Worker time_sig[0] = accumlate;
949*15dc779aSAndroid Build Coastguard Worker
950*15dc779aSAndroid Build Coastguard Worker ptr_filter -= 10;
951*15dc779aSAndroid Build Coastguard Worker
952*15dc779aSAndroid Build Coastguard Worker for (subband = 0; subband < 63; subband++) {
953*15dc779aSAndroid Build Coastguard Worker FLOAT32 new_sample;
954*15dc779aSAndroid Build Coastguard Worker
955*15dc779aSAndroid Build Coastguard Worker new_sample = real_subband[NUM_QMF_BANDS * slot + 63 - subband];
956*15dc779aSAndroid Build Coastguard Worker
957*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 5; idx++) {
958*15dc779aSAndroid Build Coastguard Worker accumlate = synth_buf[2 * idx * NUM_QMF_BANDS + NUM_QMF_BANDS + subband] +
959*15dc779aSAndroid Build Coastguard Worker (*--ptr_filter) * new_sample;
960*15dc779aSAndroid Build Coastguard Worker synth_buf[2 * idx * NUM_QMF_BANDS + NUM_QMF_BANDS + subband] = accumlate;
961*15dc779aSAndroid Build Coastguard Worker }
962*15dc779aSAndroid Build Coastguard Worker
963*15dc779aSAndroid Build Coastguard Worker time_sig[NUM_QMF_BANDS - 1 - subband] = accumlate;
964*15dc779aSAndroid Build Coastguard Worker }
965*15dc779aSAndroid Build Coastguard Worker
966*15dc779aSAndroid Build Coastguard Worker time_sig += NUM_QMF_BANDS;
967*15dc779aSAndroid Build Coastguard Worker
968*15dc779aSAndroid Build Coastguard Worker memmove((synth_buf + NUM_QMF_BANDS), synth_buf, (640 - NUM_QMF_BANDS) * sizeof(FLOAT32));
969*15dc779aSAndroid Build Coastguard Worker
970*15dc779aSAndroid Build Coastguard Worker memset((synth_buf), 0, NUM_QMF_BANDS * sizeof(FLOAT32));
971*15dc779aSAndroid Build Coastguard Worker }
972*15dc779aSAndroid Build Coastguard Worker }
973*15dc779aSAndroid Build Coastguard Worker
ixheaace_mps_515_calculate_ana_filterbank(ixheaace_mps_sac_sbr_encoder_ana_filter_bank * pstr_sbr_enc_ana_filter_bank,FLOAT32 * time_sig,FLOAT32 * real_subband,FLOAT32 * imag_subband,ixheaace_mps_sac_pstr_qmf_ana_filter_bank pstr_qmf_synth_filter_bank)974*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_mps_515_calculate_ana_filterbank(
975*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_sac_sbr_encoder_ana_filter_bank *pstr_sbr_enc_ana_filter_bank, FLOAT32 *time_sig,
976*15dc779aSAndroid Build Coastguard Worker FLOAT32 *real_subband, FLOAT32 *imag_subband,
977*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_sac_pstr_qmf_ana_filter_bank pstr_qmf_synth_filter_bank) {
978*15dc779aSAndroid Build Coastguard Worker WORD32 idx;
979*15dc779aSAndroid Build Coastguard Worker FLOAT32 temp_array[128];
980*15dc779aSAndroid Build Coastguard Worker const FLOAT32 *ptr_filter = pstr_qmf_synth_filter_bank->p_filter;
981*15dc779aSAndroid Build Coastguard Worker FLOAT32 accumlate;
982*15dc779aSAndroid Build Coastguard Worker
983*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 576; idx++) {
984*15dc779aSAndroid Build Coastguard Worker pstr_sbr_enc_ana_filter_bank->x[idx] = pstr_sbr_enc_ana_filter_bank->x[idx + NUM_QMF_BANDS];
985*15dc779aSAndroid Build Coastguard Worker }
986*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < NUM_QMF_BANDS; idx++) {
987*15dc779aSAndroid Build Coastguard Worker pstr_sbr_enc_ana_filter_bank->x[idx + 576] = time_sig[idx];
988*15dc779aSAndroid Build Coastguard Worker }
989*15dc779aSAndroid Build Coastguard Worker
990*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < NUM_QMF_BANDS; idx++) {
991*15dc779aSAndroid Build Coastguard Worker accumlate = 0.0f;
992*15dc779aSAndroid Build Coastguard Worker accumlate += (*ptr_filter++ * pstr_sbr_enc_ana_filter_bank->x[idx]);
993*15dc779aSAndroid Build Coastguard Worker accumlate += (*ptr_filter++ * pstr_sbr_enc_ana_filter_bank->x[idx + (NUM_QMF_BANDS * 2)]);
994*15dc779aSAndroid Build Coastguard Worker accumlate += (*ptr_filter++ * pstr_sbr_enc_ana_filter_bank->x[idx + (NUM_QMF_BANDS * 4)]);
995*15dc779aSAndroid Build Coastguard Worker accumlate += (*ptr_filter++ * pstr_sbr_enc_ana_filter_bank->x[idx + (NUM_QMF_BANDS * 6)]);
996*15dc779aSAndroid Build Coastguard Worker accumlate += (*ptr_filter++ * pstr_sbr_enc_ana_filter_bank->x[idx + (NUM_QMF_BANDS * 8)]);
997*15dc779aSAndroid Build Coastguard Worker temp_array[127 - idx] = accumlate;
998*15dc779aSAndroid Build Coastguard Worker }
999*15dc779aSAndroid Build Coastguard Worker
1000*15dc779aSAndroid Build Coastguard Worker accumlate = 0.0f;
1001*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 5; idx++) {
1002*15dc779aSAndroid Build Coastguard Worker accumlate +=
1003*15dc779aSAndroid Build Coastguard Worker (*ptr_filter++ * pstr_sbr_enc_ana_filter_bank->x[127 + idx * (NUM_QMF_BANDS * 2)]);
1004*15dc779aSAndroid Build Coastguard Worker }
1005*15dc779aSAndroid Build Coastguard Worker temp_array[0] = accumlate;
1006*15dc779aSAndroid Build Coastguard Worker
1007*15dc779aSAndroid Build Coastguard Worker ptr_filter -= 10;
1008*15dc779aSAndroid Build Coastguard Worker for (idx = 0; idx < 63; idx++) {
1009*15dc779aSAndroid Build Coastguard Worker accumlate = 0.0f;
1010*15dc779aSAndroid Build Coastguard Worker accumlate += (*--ptr_filter * pstr_sbr_enc_ana_filter_bank->x[NUM_QMF_BANDS + idx]);
1011*15dc779aSAndroid Build Coastguard Worker accumlate += (*--ptr_filter *
1012*15dc779aSAndroid Build Coastguard Worker pstr_sbr_enc_ana_filter_bank->x[NUM_QMF_BANDS + idx + (NUM_QMF_BANDS * 2)]);
1013*15dc779aSAndroid Build Coastguard Worker accumlate += (*--ptr_filter *
1014*15dc779aSAndroid Build Coastguard Worker pstr_sbr_enc_ana_filter_bank->x[NUM_QMF_BANDS + idx + (NUM_QMF_BANDS * 4)]);
1015*15dc779aSAndroid Build Coastguard Worker accumlate += (*--ptr_filter *
1016*15dc779aSAndroid Build Coastguard Worker pstr_sbr_enc_ana_filter_bank->x[NUM_QMF_BANDS + idx + (NUM_QMF_BANDS * 6)]);
1017*15dc779aSAndroid Build Coastguard Worker accumlate += (*--ptr_filter *
1018*15dc779aSAndroid Build Coastguard Worker pstr_sbr_enc_ana_filter_bank->x[NUM_QMF_BANDS + idx + (NUM_QMF_BANDS * 8)]);
1019*15dc779aSAndroid Build Coastguard Worker temp_array[63 - idx] = accumlate;
1020*15dc779aSAndroid Build Coastguard Worker }
1021*15dc779aSAndroid Build Coastguard Worker
1022*15dc779aSAndroid Build Coastguard Worker ixheaace_mps_forward_modulation(temp_array, real_subband, imag_subband);
1023*15dc779aSAndroid Build Coastguard Worker }
1024