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 "ixheaac_type_def.h"
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_psy_const.h"
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_tns.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_tns_params.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_rom.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_common_rom.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_aac_constants.h"
30*15dc779aSAndroid Build Coastguard Worker
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_fft.h"
32*15dc779aSAndroid Build Coastguard Worker
ia_aac_ld_enc_rearrange(WORD32 * ip,WORD32 * op,WORD32 N,UWORD8 * re_arr_tab)33*15dc779aSAndroid Build Coastguard Worker void ia_aac_ld_enc_rearrange(WORD32 *ip, WORD32 *op, WORD32 N, UWORD8 *re_arr_tab) {
34*15dc779aSAndroid Build Coastguard Worker WORD32 n, i = 0;
35*15dc779aSAndroid Build Coastguard Worker
36*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < N; n++) {
37*15dc779aSAndroid Build Coastguard Worker WORD32 idx = re_arr_tab[n] << 1;
38*15dc779aSAndroid Build Coastguard Worker
39*15dc779aSAndroid Build Coastguard Worker op[i++] = ip[idx];
40*15dc779aSAndroid Build Coastguard Worker op[i++] = ip[idx + 1];
41*15dc779aSAndroid Build Coastguard Worker }
42*15dc779aSAndroid Build Coastguard Worker
43*15dc779aSAndroid Build Coastguard Worker return;
44*15dc779aSAndroid Build Coastguard Worker }
45*15dc779aSAndroid Build Coastguard Worker
ia_enhaacplus_enc_fft15(FLOAT32 * ptr_vec)46*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_fft15(FLOAT32 *ptr_vec) {
47*15dc779aSAndroid Build Coastguard Worker FLOAT32 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, i0, i1,
48*15dc779aSAndroid Build Coastguard Worker i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, tmp0, tmp1, tmp2,
49*15dc779aSAndroid Build Coastguard Worker tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16,
50*15dc779aSAndroid Build Coastguard Worker tmp17, tmp18, tmp19, tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27, tmp28, tmp29;
51*15dc779aSAndroid Build Coastguard Worker
52*15dc779aSAndroid Build Coastguard Worker /* Pre-additions real part */
53*15dc779aSAndroid Build Coastguard Worker r1 = ptr_vec[2] + ptr_vec[8];
54*15dc779aSAndroid Build Coastguard Worker r2 = ptr_vec[2] - ptr_vec[8];
55*15dc779aSAndroid Build Coastguard Worker r3 = ptr_vec[4] + ptr_vec[16];
56*15dc779aSAndroid Build Coastguard Worker r4 = ptr_vec[4] - ptr_vec[16];
57*15dc779aSAndroid Build Coastguard Worker r5 = ptr_vec[6] + ptr_vec[24];
58*15dc779aSAndroid Build Coastguard Worker r6 = ptr_vec[6] - ptr_vec[24];
59*15dc779aSAndroid Build Coastguard Worker r7 = ptr_vec[10] + ptr_vec[20];
60*15dc779aSAndroid Build Coastguard Worker r8 = ptr_vec[10] - ptr_vec[20];
61*15dc779aSAndroid Build Coastguard Worker r9 = ptr_vec[12] + ptr_vec[18];
62*15dc779aSAndroid Build Coastguard Worker r10 = ptr_vec[12] - ptr_vec[18];
63*15dc779aSAndroid Build Coastguard Worker r11 = ptr_vec[14] + ptr_vec[26];
64*15dc779aSAndroid Build Coastguard Worker r12 = ptr_vec[14] - ptr_vec[26];
65*15dc779aSAndroid Build Coastguard Worker r13 = ptr_vec[22] + ptr_vec[28];
66*15dc779aSAndroid Build Coastguard Worker r14 = ptr_vec[22] - ptr_vec[28];
67*15dc779aSAndroid Build Coastguard Worker
68*15dc779aSAndroid Build Coastguard Worker tmp2 = r1 + r3;
69*15dc779aSAndroid Build Coastguard Worker tmp4 = r1 - r3;
70*15dc779aSAndroid Build Coastguard Worker tmp6 = r2 + r14;
71*15dc779aSAndroid Build Coastguard Worker tmp8 = r2 - r14;
72*15dc779aSAndroid Build Coastguard Worker tmp10 = r4 + r12;
73*15dc779aSAndroid Build Coastguard Worker tmp12 = r4 - r12;
74*15dc779aSAndroid Build Coastguard Worker tmp14 = r5 + r9;
75*15dc779aSAndroid Build Coastguard Worker tmp16 = r5 - r9;
76*15dc779aSAndroid Build Coastguard Worker tmp18 = r11 + r13;
77*15dc779aSAndroid Build Coastguard Worker tmp20 = r11 - r13;
78*15dc779aSAndroid Build Coastguard Worker
79*15dc779aSAndroid Build Coastguard Worker /* Pre-additions imaginary part */
80*15dc779aSAndroid Build Coastguard Worker i1 = ptr_vec[3] + ptr_vec[9];
81*15dc779aSAndroid Build Coastguard Worker i2 = ptr_vec[3] - ptr_vec[9];
82*15dc779aSAndroid Build Coastguard Worker i3 = ptr_vec[5] + ptr_vec[17];
83*15dc779aSAndroid Build Coastguard Worker i4 = ptr_vec[5] - ptr_vec[17];
84*15dc779aSAndroid Build Coastguard Worker i5 = ptr_vec[7] + ptr_vec[25];
85*15dc779aSAndroid Build Coastguard Worker i6 = ptr_vec[7] - ptr_vec[25];
86*15dc779aSAndroid Build Coastguard Worker i7 = ptr_vec[11] + ptr_vec[21];
87*15dc779aSAndroid Build Coastguard Worker i8 = ptr_vec[11] - ptr_vec[21];
88*15dc779aSAndroid Build Coastguard Worker i9 = ptr_vec[13] + ptr_vec[19];
89*15dc779aSAndroid Build Coastguard Worker i10 = ptr_vec[13] - ptr_vec[19];
90*15dc779aSAndroid Build Coastguard Worker i11 = ptr_vec[15] + ptr_vec[27];
91*15dc779aSAndroid Build Coastguard Worker i12 = ptr_vec[15] - ptr_vec[27];
92*15dc779aSAndroid Build Coastguard Worker i13 = ptr_vec[23] + ptr_vec[29];
93*15dc779aSAndroid Build Coastguard Worker i14 = ptr_vec[23] - ptr_vec[29];
94*15dc779aSAndroid Build Coastguard Worker
95*15dc779aSAndroid Build Coastguard Worker tmp3 = i1 + i3;
96*15dc779aSAndroid Build Coastguard Worker tmp5 = i1 - i3;
97*15dc779aSAndroid Build Coastguard Worker tmp7 = i2 + i14;
98*15dc779aSAndroid Build Coastguard Worker tmp9 = i2 - i14;
99*15dc779aSAndroid Build Coastguard Worker tmp11 = i4 + i12;
100*15dc779aSAndroid Build Coastguard Worker tmp13 = i4 - i12;
101*15dc779aSAndroid Build Coastguard Worker tmp15 = i5 + i9;
102*15dc779aSAndroid Build Coastguard Worker tmp17 = i5 - i9;
103*15dc779aSAndroid Build Coastguard Worker tmp19 = i11 + i13;
104*15dc779aSAndroid Build Coastguard Worker tmp21 = i11 - i13;
105*15dc779aSAndroid Build Coastguard Worker
106*15dc779aSAndroid Build Coastguard Worker /* Pre-additions and core multiplications */
107*15dc779aSAndroid Build Coastguard Worker tmp28 = tmp4 + tmp20;
108*15dc779aSAndroid Build Coastguard Worker tmp29 = tmp5 + tmp21;
109*15dc779aSAndroid Build Coastguard Worker r4 = tmp2 + tmp18;
110*15dc779aSAndroid Build Coastguard Worker i4 = tmp3 + tmp19;
111*15dc779aSAndroid Build Coastguard Worker r3 = (FLOAT32)((r4 + tmp14) * -1.25);
112*15dc779aSAndroid Build Coastguard Worker i3 = (FLOAT32)((i4 + tmp15) * -1.25);
113*15dc779aSAndroid Build Coastguard Worker r2 = (FLOAT32)((tmp29 - i8) * -8.660254037844387e-1);
114*15dc779aSAndroid Build Coastguard Worker i2 = (FLOAT32)((tmp28 - r8) * 8.660254037844387e-1);
115*15dc779aSAndroid Build Coastguard Worker r1 = r4 + r7;
116*15dc779aSAndroid Build Coastguard Worker i1 = i4 + i7;
117*15dc779aSAndroid Build Coastguard Worker r0 = r1 + ptr_vec[0] + tmp14;
118*15dc779aSAndroid Build Coastguard Worker i0 = i1 + ptr_vec[1] + tmp15;
119*15dc779aSAndroid Build Coastguard Worker r7 = tmp4 - tmp20;
120*15dc779aSAndroid Build Coastguard Worker i7 = tmp5 - tmp21;
121*15dc779aSAndroid Build Coastguard Worker r8 = (FLOAT32)((tmp3 - tmp19) * -4.841229182759272e-1);
122*15dc779aSAndroid Build Coastguard Worker i8 = (FLOAT32)((tmp2 - tmp18) * 4.841229182759272e-1);
123*15dc779aSAndroid Build Coastguard Worker tmp0 = tmp6 + r10;
124*15dc779aSAndroid Build Coastguard Worker tmp1 = tmp7 + i10;
125*15dc779aSAndroid Build Coastguard Worker tmp2 = r6 - tmp10;
126*15dc779aSAndroid Build Coastguard Worker tmp3 = i6 - tmp11;
127*15dc779aSAndroid Build Coastguard Worker r10 = (FLOAT32)(tmp7 * -2.308262652881440);
128*15dc779aSAndroid Build Coastguard Worker i10 = (FLOAT32)(tmp6 * 2.308262652881440);
129*15dc779aSAndroid Build Coastguard Worker r11 = (FLOAT32)(tmp8 * 1.332676064001459);
130*15dc779aSAndroid Build Coastguard Worker i11 = (FLOAT32)(tmp9 * 1.332676064001459);
131*15dc779aSAndroid Build Coastguard Worker r6 = (FLOAT32)((r7 - tmp16) * 5.590169943749475e-1);
132*15dc779aSAndroid Build Coastguard Worker i6 = (FLOAT32)((i7 - tmp17) * 5.590169943749475e-1);
133*15dc779aSAndroid Build Coastguard Worker r12 = (FLOAT32)((tmp1 + tmp3) * 5.877852522924733e-1);
134*15dc779aSAndroid Build Coastguard Worker i12 = (FLOAT32)((tmp0 + tmp2) * -5.877852522924733e-1);
135*15dc779aSAndroid Build Coastguard Worker r13 = (FLOAT32)((tmp7 - tmp11) * -8.816778784387098e-1);
136*15dc779aSAndroid Build Coastguard Worker i13 = (FLOAT32)((tmp6 - tmp10) * 8.816778784387098e-1);
137*15dc779aSAndroid Build Coastguard Worker r14 = (FLOAT32)((tmp8 + tmp12) * 5.090369604551274e-1);
138*15dc779aSAndroid Build Coastguard Worker i14 = (FLOAT32)((tmp9 + tmp13) * 5.090369604551274e-1);
139*15dc779aSAndroid Build Coastguard Worker r16 = (FLOAT32)(tmp11 * 5.449068960040204e-1);
140*15dc779aSAndroid Build Coastguard Worker i16 = (FLOAT32)(tmp10 * -5.449068960040204e-1);
141*15dc779aSAndroid Build Coastguard Worker r17 = (FLOAT32)(tmp12 * 3.146021430912046e-1);
142*15dc779aSAndroid Build Coastguard Worker i17 = (FLOAT32)(tmp13 * 3.146021430912046e-1);
143*15dc779aSAndroid Build Coastguard Worker
144*15dc779aSAndroid Build Coastguard Worker r4 *= 1.875;
145*15dc779aSAndroid Build Coastguard Worker i4 *= 1.875;
146*15dc779aSAndroid Build Coastguard Worker r1 *= -1.5;
147*15dc779aSAndroid Build Coastguard Worker i1 *= -1.5;
148*15dc779aSAndroid Build Coastguard Worker r7 *= (FLOAT32)(-8.385254915624212e-1);
149*15dc779aSAndroid Build Coastguard Worker i7 *= (FLOAT32)(-8.385254915624212e-1);
150*15dc779aSAndroid Build Coastguard Worker r5 = (FLOAT32)(tmp29 * 1.082531754730548);
151*15dc779aSAndroid Build Coastguard Worker i5 = (FLOAT32)(tmp28 * -1.082531754730548);
152*15dc779aSAndroid Build Coastguard Worker r9 = (FLOAT32)(tmp1 * 1.5388417685876270);
153*15dc779aSAndroid Build Coastguard Worker i9 = (FLOAT32)(tmp0 * -1.538841768587627);
154*15dc779aSAndroid Build Coastguard Worker r15 = (FLOAT32)(tmp3 * 3.632712640026803e-1);
155*15dc779aSAndroid Build Coastguard Worker i15 = (FLOAT32)(tmp2 * -3.632712640026803e-1);
156*15dc779aSAndroid Build Coastguard Worker
157*15dc779aSAndroid Build Coastguard Worker /* Post-additions real part */
158*15dc779aSAndroid Build Coastguard Worker tmp2 = r0 + r1;
159*15dc779aSAndroid Build Coastguard Worker tmp4 = r3 + r6;
160*15dc779aSAndroid Build Coastguard Worker tmp6 = r3 - r6;
161*15dc779aSAndroid Build Coastguard Worker tmp8 = r4 + r5;
162*15dc779aSAndroid Build Coastguard Worker tmp10 = r4 - r5;
163*15dc779aSAndroid Build Coastguard Worker tmp12 = r7 + r8;
164*15dc779aSAndroid Build Coastguard Worker tmp14 = r7 - r8;
165*15dc779aSAndroid Build Coastguard Worker tmp16 = r13 + r16;
166*15dc779aSAndroid Build Coastguard Worker tmp18 = r14 + r17;
167*15dc779aSAndroid Build Coastguard Worker tmp20 = r10 - r13;
168*15dc779aSAndroid Build Coastguard Worker tmp22 = r11 - r14;
169*15dc779aSAndroid Build Coastguard Worker tmp24 = r12 + r15;
170*15dc779aSAndroid Build Coastguard Worker tmp26 = r12 - r9;
171*15dc779aSAndroid Build Coastguard Worker
172*15dc779aSAndroid Build Coastguard Worker r1 = tmp2 + r2;
173*15dc779aSAndroid Build Coastguard Worker r2 = tmp2 - r2;
174*15dc779aSAndroid Build Coastguard Worker r3 = tmp4 + tmp26;
175*15dc779aSAndroid Build Coastguard Worker r4 = tmp4 - tmp26;
176*15dc779aSAndroid Build Coastguard Worker r5 = tmp6 + tmp24;
177*15dc779aSAndroid Build Coastguard Worker r6 = tmp6 - tmp24;
178*15dc779aSAndroid Build Coastguard Worker r7 = tmp16 + tmp18;
179*15dc779aSAndroid Build Coastguard Worker r8 = tmp16 - tmp18;
180*15dc779aSAndroid Build Coastguard Worker r9 = tmp20 - tmp22;
181*15dc779aSAndroid Build Coastguard Worker r10 = tmp20 + tmp22;
182*15dc779aSAndroid Build Coastguard Worker r11 = r1 + tmp8;
183*15dc779aSAndroid Build Coastguard Worker r12 = r2 + tmp10;
184*15dc779aSAndroid Build Coastguard Worker r13 = r11 - tmp12;
185*15dc779aSAndroid Build Coastguard Worker r14 = r12 - tmp14;
186*15dc779aSAndroid Build Coastguard Worker r15 = r12 + tmp14;
187*15dc779aSAndroid Build Coastguard Worker r16 = r11 + tmp12;
188*15dc779aSAndroid Build Coastguard Worker
189*15dc779aSAndroid Build Coastguard Worker /* Post-additions imaginary part */
190*15dc779aSAndroid Build Coastguard Worker tmp3 = i0 + i1;
191*15dc779aSAndroid Build Coastguard Worker tmp5 = i3 + i6;
192*15dc779aSAndroid Build Coastguard Worker tmp7 = i3 - i6;
193*15dc779aSAndroid Build Coastguard Worker tmp9 = i4 + i5;
194*15dc779aSAndroid Build Coastguard Worker tmp11 = i4 - i5;
195*15dc779aSAndroid Build Coastguard Worker tmp13 = i7 + i8;
196*15dc779aSAndroid Build Coastguard Worker tmp15 = i7 - i8;
197*15dc779aSAndroid Build Coastguard Worker tmp17 = i13 + i16;
198*15dc779aSAndroid Build Coastguard Worker tmp19 = i14 + i17;
199*15dc779aSAndroid Build Coastguard Worker tmp21 = i10 - i13;
200*15dc779aSAndroid Build Coastguard Worker tmp23 = i11 - i14;
201*15dc779aSAndroid Build Coastguard Worker tmp25 = i12 + i15;
202*15dc779aSAndroid Build Coastguard Worker tmp27 = i12 - i9;
203*15dc779aSAndroid Build Coastguard Worker
204*15dc779aSAndroid Build Coastguard Worker i1 = tmp3 + i2;
205*15dc779aSAndroid Build Coastguard Worker i2 = tmp3 - i2;
206*15dc779aSAndroid Build Coastguard Worker i3 = tmp5 + tmp27;
207*15dc779aSAndroid Build Coastguard Worker i4 = tmp5 - tmp27;
208*15dc779aSAndroid Build Coastguard Worker i5 = tmp7 + tmp25;
209*15dc779aSAndroid Build Coastguard Worker i6 = tmp7 - tmp25;
210*15dc779aSAndroid Build Coastguard Worker i7 = tmp17 + tmp19;
211*15dc779aSAndroid Build Coastguard Worker i8 = tmp17 - tmp19;
212*15dc779aSAndroid Build Coastguard Worker i9 = tmp21 - tmp23;
213*15dc779aSAndroid Build Coastguard Worker i10 = tmp21 + tmp23;
214*15dc779aSAndroid Build Coastguard Worker i11 = i1 + tmp9;
215*15dc779aSAndroid Build Coastguard Worker i12 = i2 + tmp11;
216*15dc779aSAndroid Build Coastguard Worker i13 = i11 - tmp13;
217*15dc779aSAndroid Build Coastguard Worker i14 = i12 - tmp15;
218*15dc779aSAndroid Build Coastguard Worker i15 = i12 + tmp15;
219*15dc779aSAndroid Build Coastguard Worker i16 = i11 + tmp13;
220*15dc779aSAndroid Build Coastguard Worker
221*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r0;
222*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i0;
223*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r13 + r5 + r7;
224*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i13 + i5 + i7;
225*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r15 + r3 - r9;
226*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i15 + i3 - i9;
227*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r0 + r4;
228*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i0 + i4;
229*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r13 + r6 - r7;
230*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i13 + i6 - i7;
231*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r2;
232*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i2;
233*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r0 + r5;
234*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i0 + i5;
235*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r16 + r3 - r10;
236*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i16 + i3 - i10;
237*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r15 + r4 + r9;
238*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i15 + i4 + i9;
239*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r0 + r6;
240*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i0 + i6;
241*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r1;
242*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i1;
243*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r14 + r5 + r8;
244*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i14 + i5 + i8;
245*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r0 + r3;
246*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i0 + i3;
247*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r16 + r4 + r10;
248*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i16 + i4 + i10;
249*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = r14 + r6 - r8;
250*15dc779aSAndroid Build Coastguard Worker *ptr_vec++ = i14 + i6 - i8;
251*15dc779aSAndroid Build Coastguard Worker }
252*15dc779aSAndroid Build Coastguard Worker
ia_enhaacplus_enc_fft16(FLOAT32 * ptr_vec)253*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_fft16(FLOAT32 *ptr_vec) {
254*15dc779aSAndroid Build Coastguard Worker FLOAT32 var10, var11, var12, var13, var14, var15, var16, var17, var18, var19, var110, var111,
255*15dc779aSAndroid Build Coastguard Worker var112, var113, var114, var115, var20, var21, var22, var23, var24, var25, var26, var27,
256*15dc779aSAndroid Build Coastguard Worker var28, var29, var210, var211, var212, var213, var214, var215, arr0, arr1, arr2, arr3, arr4,
257*15dc779aSAndroid Build Coastguard Worker arr5, arr6, arr7, arr8, arr9, arr10, arr11, arr12, arr13, arr14, arr15;
258*15dc779aSAndroid Build Coastguard Worker
259*15dc779aSAndroid Build Coastguard Worker /* Pre-additions */
260*15dc779aSAndroid Build Coastguard Worker arr0 = ptr_vec[0] + ptr_vec[16];
261*15dc779aSAndroid Build Coastguard Worker arr8 = ptr_vec[8] + ptr_vec[24];
262*15dc779aSAndroid Build Coastguard Worker var10 = arr0 + arr8;
263*15dc779aSAndroid Build Coastguard Worker var12 = arr0 - arr8;
264*15dc779aSAndroid Build Coastguard Worker arr1 = ptr_vec[1] + ptr_vec[17];
265*15dc779aSAndroid Build Coastguard Worker arr9 = ptr_vec[9] + ptr_vec[25];
266*15dc779aSAndroid Build Coastguard Worker var11 = arr1 + arr9;
267*15dc779aSAndroid Build Coastguard Worker var13 = arr1 - arr9;
268*15dc779aSAndroid Build Coastguard Worker arr2 = ptr_vec[2] + ptr_vec[18];
269*15dc779aSAndroid Build Coastguard Worker arr10 = ptr_vec[10] + ptr_vec[26];
270*15dc779aSAndroid Build Coastguard Worker var14 = arr2 + arr10;
271*15dc779aSAndroid Build Coastguard Worker var16 = arr2 - arr10;
272*15dc779aSAndroid Build Coastguard Worker arr3 = ptr_vec[3] + ptr_vec[19];
273*15dc779aSAndroid Build Coastguard Worker arr11 = ptr_vec[11] + ptr_vec[27];
274*15dc779aSAndroid Build Coastguard Worker var15 = arr3 + arr11;
275*15dc779aSAndroid Build Coastguard Worker var17 = arr3 - arr11;
276*15dc779aSAndroid Build Coastguard Worker arr4 = ptr_vec[4] + ptr_vec[20];
277*15dc779aSAndroid Build Coastguard Worker arr12 = ptr_vec[12] + ptr_vec[28];
278*15dc779aSAndroid Build Coastguard Worker var18 = arr4 + arr12;
279*15dc779aSAndroid Build Coastguard Worker var110 = arr4 - arr12;
280*15dc779aSAndroid Build Coastguard Worker arr5 = ptr_vec[5] + ptr_vec[21];
281*15dc779aSAndroid Build Coastguard Worker arr13 = ptr_vec[13] + ptr_vec[29];
282*15dc779aSAndroid Build Coastguard Worker var19 = arr5 + arr13;
283*15dc779aSAndroid Build Coastguard Worker var111 = arr5 - arr13;
284*15dc779aSAndroid Build Coastguard Worker arr6 = ptr_vec[6] + ptr_vec[22];
285*15dc779aSAndroid Build Coastguard Worker arr14 = ptr_vec[14] + ptr_vec[30];
286*15dc779aSAndroid Build Coastguard Worker var112 = arr6 + arr14;
287*15dc779aSAndroid Build Coastguard Worker var114 = arr6 - arr14;
288*15dc779aSAndroid Build Coastguard Worker arr7 = ptr_vec[7] + ptr_vec[23];
289*15dc779aSAndroid Build Coastguard Worker arr15 = ptr_vec[15] + ptr_vec[31];
290*15dc779aSAndroid Build Coastguard Worker var113 = arr7 + arr15;
291*15dc779aSAndroid Build Coastguard Worker var115 = arr7 - arr15;
292*15dc779aSAndroid Build Coastguard Worker
293*15dc779aSAndroid Build Coastguard Worker /* Pre-additions and core multiplications */
294*15dc779aSAndroid Build Coastguard Worker var20 = var10 + var18;
295*15dc779aSAndroid Build Coastguard Worker var24 = var10 - var18;
296*15dc779aSAndroid Build Coastguard Worker var21 = var11 + var19;
297*15dc779aSAndroid Build Coastguard Worker var25 = var11 - var19;
298*15dc779aSAndroid Build Coastguard Worker var28 = var12 - var111;
299*15dc779aSAndroid Build Coastguard Worker var210 = var12 + var111;
300*15dc779aSAndroid Build Coastguard Worker var29 = var13 + var110;
301*15dc779aSAndroid Build Coastguard Worker var211 = var13 - var110;
302*15dc779aSAndroid Build Coastguard Worker var22 = var14 + var112;
303*15dc779aSAndroid Build Coastguard Worker var27 = var14 - var112;
304*15dc779aSAndroid Build Coastguard Worker var23 = var15 + var113;
305*15dc779aSAndroid Build Coastguard Worker var26 = var113 - var15;
306*15dc779aSAndroid Build Coastguard Worker
307*15dc779aSAndroid Build Coastguard Worker var11 = var16 + var114;
308*15dc779aSAndroid Build Coastguard Worker var12 = var16 - var114;
309*15dc779aSAndroid Build Coastguard Worker var10 = var17 + var115;
310*15dc779aSAndroid Build Coastguard Worker var13 = var17 - var115;
311*15dc779aSAndroid Build Coastguard Worker var212 = (var10 + var12) * IXHEAACE_INV_SQRT2;
312*15dc779aSAndroid Build Coastguard Worker var214 = (var10 - var12) * IXHEAACE_INV_SQRT2;
313*15dc779aSAndroid Build Coastguard Worker var213 = (var13 - var11) * IXHEAACE_INV_SQRT2;
314*15dc779aSAndroid Build Coastguard Worker var215 = (var11 + var13) * -IXHEAACE_INV_SQRT2;
315*15dc779aSAndroid Build Coastguard Worker
316*15dc779aSAndroid Build Coastguard Worker /* odd */
317*15dc779aSAndroid Build Coastguard Worker arr0 = ptr_vec[0] - ptr_vec[16];
318*15dc779aSAndroid Build Coastguard Worker arr1 = ptr_vec[1] - ptr_vec[17];
319*15dc779aSAndroid Build Coastguard Worker arr2 = ptr_vec[2] - ptr_vec[18];
320*15dc779aSAndroid Build Coastguard Worker arr3 = ptr_vec[3] - ptr_vec[19];
321*15dc779aSAndroid Build Coastguard Worker arr4 = ptr_vec[4] - ptr_vec[20];
322*15dc779aSAndroid Build Coastguard Worker arr5 = ptr_vec[5] - ptr_vec[21];
323*15dc779aSAndroid Build Coastguard Worker arr6 = ptr_vec[6] - ptr_vec[22];
324*15dc779aSAndroid Build Coastguard Worker arr7 = ptr_vec[7] - ptr_vec[23];
325*15dc779aSAndroid Build Coastguard Worker arr8 = ptr_vec[8] - ptr_vec[24];
326*15dc779aSAndroid Build Coastguard Worker arr9 = ptr_vec[9] - ptr_vec[25];
327*15dc779aSAndroid Build Coastguard Worker arr10 = ptr_vec[10] - ptr_vec[26];
328*15dc779aSAndroid Build Coastguard Worker arr11 = ptr_vec[11] - ptr_vec[27];
329*15dc779aSAndroid Build Coastguard Worker arr12 = ptr_vec[12] - ptr_vec[28];
330*15dc779aSAndroid Build Coastguard Worker arr13 = ptr_vec[13] - ptr_vec[29];
331*15dc779aSAndroid Build Coastguard Worker arr14 = ptr_vec[14] - ptr_vec[30];
332*15dc779aSAndroid Build Coastguard Worker arr15 = ptr_vec[15] - ptr_vec[31];
333*15dc779aSAndroid Build Coastguard Worker
334*15dc779aSAndroid Build Coastguard Worker /* Pre-additions and core multiplications */
335*15dc779aSAndroid Build Coastguard Worker var19 = (arr2 + arr14) * -IXHEAACE_COS_3PI_DIV8;
336*15dc779aSAndroid Build Coastguard Worker var110 = (arr2 - arr14) * IXHEAACE_COS_PI_DIV8;
337*15dc779aSAndroid Build Coastguard Worker var18 = (arr3 + arr15) * IXHEAACE_COS_3PI_DIV8;
338*15dc779aSAndroid Build Coastguard Worker var111 = (arr3 - arr15) * IXHEAACE_COS_PI_DIV8;
339*15dc779aSAndroid Build Coastguard Worker var15 = (arr4 + arr12) * -IXHEAACE_INV_SQRT2;
340*15dc779aSAndroid Build Coastguard Worker var16 = (arr4 - arr12) * IXHEAACE_INV_SQRT2;
341*15dc779aSAndroid Build Coastguard Worker var14 = (arr5 + arr13) * IXHEAACE_INV_SQRT2;
342*15dc779aSAndroid Build Coastguard Worker var17 = (arr5 - arr13) * IXHEAACE_INV_SQRT2;
343*15dc779aSAndroid Build Coastguard Worker var113 = (arr6 + arr10) * -IXHEAACE_COS_PI_DIV8;
344*15dc779aSAndroid Build Coastguard Worker var114 = (arr6 - arr10) * IXHEAACE_COS_3PI_DIV8;
345*15dc779aSAndroid Build Coastguard Worker var112 = (arr7 + arr11) * IXHEAACE_COS_PI_DIV8;
346*15dc779aSAndroid Build Coastguard Worker var115 = (arr7 - arr11) * IXHEAACE_COS_3PI_DIV8;
347*15dc779aSAndroid Build Coastguard Worker
348*15dc779aSAndroid Build Coastguard Worker /* Core multiplications */
349*15dc779aSAndroid Build Coastguard Worker arr2 = var18 * IXHEAACE_SQRT2PLUS1 - var112 * IXHEAACE_SQRT2MINUS1;
350*15dc779aSAndroid Build Coastguard Worker arr3 = var19 * IXHEAACE_SQRT2PLUS1 - var113 * IXHEAACE_SQRT2MINUS1;
351*15dc779aSAndroid Build Coastguard Worker arr4 = var110 * IXHEAACE_SQRT2MINUS1 - var114 * IXHEAACE_SQRT2PLUS1;
352*15dc779aSAndroid Build Coastguard Worker arr5 = var111 * IXHEAACE_SQRT2MINUS1 - var115 * IXHEAACE_SQRT2PLUS1;
353*15dc779aSAndroid Build Coastguard Worker
354*15dc779aSAndroid Build Coastguard Worker /* Post-additions */
355*15dc779aSAndroid Build Coastguard Worker var18 = var18 + var112;
356*15dc779aSAndroid Build Coastguard Worker var19 = var19 + var113;
357*15dc779aSAndroid Build Coastguard Worker var110 = var110 + var114;
358*15dc779aSAndroid Build Coastguard Worker var111 = var111 + var115;
359*15dc779aSAndroid Build Coastguard Worker arr6 = arr0 + var14;
360*15dc779aSAndroid Build Coastguard Worker arr10 = arr0 - var14;
361*15dc779aSAndroid Build Coastguard Worker arr7 = arr1 + var15;
362*15dc779aSAndroid Build Coastguard Worker arr11 = arr1 - var15;
363*15dc779aSAndroid Build Coastguard Worker
364*15dc779aSAndroid Build Coastguard Worker arr12 = var16 - arr9;
365*15dc779aSAndroid Build Coastguard Worker arr14 = var16 + arr9;
366*15dc779aSAndroid Build Coastguard Worker arr13 = arr8 + var17;
367*15dc779aSAndroid Build Coastguard Worker arr15 = arr8 - var17;
368*15dc779aSAndroid Build Coastguard Worker
369*15dc779aSAndroid Build Coastguard Worker var10 = arr6 - arr14;
370*15dc779aSAndroid Build Coastguard Worker var12 = arr6 + arr14;
371*15dc779aSAndroid Build Coastguard Worker var11 = arr7 + arr15;
372*15dc779aSAndroid Build Coastguard Worker var13 = arr7 - arr15;
373*15dc779aSAndroid Build Coastguard Worker var14 = arr10 + arr12;
374*15dc779aSAndroid Build Coastguard Worker var16 = arr10 - arr12;
375*15dc779aSAndroid Build Coastguard Worker var15 = arr11 + arr13;
376*15dc779aSAndroid Build Coastguard Worker var17 = arr11 - arr13;
377*15dc779aSAndroid Build Coastguard Worker
378*15dc779aSAndroid Build Coastguard Worker arr10 = var18 + var110;
379*15dc779aSAndroid Build Coastguard Worker var110 = var18 - var110;
380*15dc779aSAndroid Build Coastguard Worker arr11 = var19 + var111;
381*15dc779aSAndroid Build Coastguard Worker var111 = var19 - var111;
382*15dc779aSAndroid Build Coastguard Worker
383*15dc779aSAndroid Build Coastguard Worker var112 = arr2 + arr4;
384*15dc779aSAndroid Build Coastguard Worker var114 = arr2 - arr4;
385*15dc779aSAndroid Build Coastguard Worker var113 = arr3 + arr5;
386*15dc779aSAndroid Build Coastguard Worker var115 = arr3 - arr5;
387*15dc779aSAndroid Build Coastguard Worker
388*15dc779aSAndroid Build Coastguard Worker /* Post-additions */
389*15dc779aSAndroid Build Coastguard Worker ptr_vec[0] = var20 + var22;
390*15dc779aSAndroid Build Coastguard Worker ptr_vec[1] = var21 + var23;
391*15dc779aSAndroid Build Coastguard Worker ptr_vec[2] = var12 + arr10;
392*15dc779aSAndroid Build Coastguard Worker ptr_vec[3] = var13 + arr11;
393*15dc779aSAndroid Build Coastguard Worker ptr_vec[4] = var210 + var212;
394*15dc779aSAndroid Build Coastguard Worker ptr_vec[5] = var211 + var213;
395*15dc779aSAndroid Build Coastguard Worker ptr_vec[6] = var10 + var112;
396*15dc779aSAndroid Build Coastguard Worker ptr_vec[7] = var11 + var113;
397*15dc779aSAndroid Build Coastguard Worker ptr_vec[8] = var24 - var26;
398*15dc779aSAndroid Build Coastguard Worker ptr_vec[9] = var25 - var27;
399*15dc779aSAndroid Build Coastguard Worker ptr_vec[10] = var16 + var114;
400*15dc779aSAndroid Build Coastguard Worker ptr_vec[11] = var17 + var115;
401*15dc779aSAndroid Build Coastguard Worker ptr_vec[12] = var28 + var214;
402*15dc779aSAndroid Build Coastguard Worker ptr_vec[13] = var29 + var215;
403*15dc779aSAndroid Build Coastguard Worker ptr_vec[14] = var14 + var110;
404*15dc779aSAndroid Build Coastguard Worker ptr_vec[15] = var15 + var111;
405*15dc779aSAndroid Build Coastguard Worker ptr_vec[16] = var20 - var22;
406*15dc779aSAndroid Build Coastguard Worker ptr_vec[17] = var21 - var23;
407*15dc779aSAndroid Build Coastguard Worker ptr_vec[18] = var12 - arr10;
408*15dc779aSAndroid Build Coastguard Worker ptr_vec[19] = var13 - arr11;
409*15dc779aSAndroid Build Coastguard Worker ptr_vec[20] = var210 - var212;
410*15dc779aSAndroid Build Coastguard Worker ptr_vec[21] = var211 - var213;
411*15dc779aSAndroid Build Coastguard Worker ptr_vec[22] = var10 - var112;
412*15dc779aSAndroid Build Coastguard Worker ptr_vec[23] = var11 - var113;
413*15dc779aSAndroid Build Coastguard Worker ptr_vec[24] = var24 + var26;
414*15dc779aSAndroid Build Coastguard Worker ptr_vec[25] = var25 + var27;
415*15dc779aSAndroid Build Coastguard Worker ptr_vec[26] = var16 - var114;
416*15dc779aSAndroid Build Coastguard Worker ptr_vec[27] = var17 - var115;
417*15dc779aSAndroid Build Coastguard Worker ptr_vec[28] = var28 - var214;
418*15dc779aSAndroid Build Coastguard Worker ptr_vec[29] = var29 - var215;
419*15dc779aSAndroid Build Coastguard Worker ptr_vec[30] = var14 - var110;
420*15dc779aSAndroid Build Coastguard Worker ptr_vec[31] = var15 - var111;
421*15dc779aSAndroid Build Coastguard Worker }
422*15dc779aSAndroid Build Coastguard Worker
ia_enhaacplus_enc_fft240(FLOAT32 * ptr_in)423*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_fft240(FLOAT32 *ptr_in) {
424*15dc779aSAndroid Build Coastguard Worker const WORD32 n1 = 240;
425*15dc779aSAndroid Build Coastguard Worker const WORD32 n2 = 15;
426*15dc779aSAndroid Build Coastguard Worker const WORD32 n3 = 16;
427*15dc779aSAndroid Build Coastguard Worker const WORD32 *ptr_idx1 = ia_enhaacplus_enc_fft240_table1;
428*15dc779aSAndroid Build Coastguard Worker const WORD32 *ptr_idx2 = ia_enhaacplus_enc_fft240_table2;
429*15dc779aSAndroid Build Coastguard Worker
430*15dc779aSAndroid Build Coastguard Worker WORD32 k, l;
431*15dc779aSAndroid Build Coastguard Worker FLOAT32 temp[32], out[480];
432*15dc779aSAndroid Build Coastguard Worker
433*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < n2; k++) {
434*15dc779aSAndroid Build Coastguard Worker for (l = 0; l < n3; l++) {
435*15dc779aSAndroid Build Coastguard Worker temp[2 * l] = ptr_in[2 * *ptr_idx1];
436*15dc779aSAndroid Build Coastguard Worker temp[2 * l + 1] = ptr_in[2 * *ptr_idx1 + 1];
437*15dc779aSAndroid Build Coastguard Worker ptr_idx1 += n2;
438*15dc779aSAndroid Build Coastguard Worker }
439*15dc779aSAndroid Build Coastguard Worker
440*15dc779aSAndroid Build Coastguard Worker ia_enhaacplus_enc_fft16(temp); /* 16-point FFT */
441*15dc779aSAndroid Build Coastguard Worker ptr_idx1 -= n1;
442*15dc779aSAndroid Build Coastguard Worker
443*15dc779aSAndroid Build Coastguard Worker for (l = 0; l < n3; l++) {
444*15dc779aSAndroid Build Coastguard Worker ptr_in[2 * *ptr_idx1] = temp[2 * l];
445*15dc779aSAndroid Build Coastguard Worker ptr_in[2 * *ptr_idx1 + 1] = temp[2 * l + 1];
446*15dc779aSAndroid Build Coastguard Worker ptr_idx1 += n2;
447*15dc779aSAndroid Build Coastguard Worker }
448*15dc779aSAndroid Build Coastguard Worker
449*15dc779aSAndroid Build Coastguard Worker ptr_idx1 -= n1 - 1;
450*15dc779aSAndroid Build Coastguard Worker }
451*15dc779aSAndroid Build Coastguard Worker
452*15dc779aSAndroid Build Coastguard Worker ptr_idx1 -= n2;
453*15dc779aSAndroid Build Coastguard Worker
454*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < n3; k++) {
455*15dc779aSAndroid Build Coastguard Worker for (l = 0; l < n2; l++) {
456*15dc779aSAndroid Build Coastguard Worker temp[2 * l] = ptr_in[2 * *ptr_idx1];
457*15dc779aSAndroid Build Coastguard Worker temp[2 * l + 1] = ptr_in[2 * *ptr_idx1++ + 1];
458*15dc779aSAndroid Build Coastguard Worker }
459*15dc779aSAndroid Build Coastguard Worker
460*15dc779aSAndroid Build Coastguard Worker ia_enhaacplus_enc_fft15(temp); /* 15-point FFT */
461*15dc779aSAndroid Build Coastguard Worker
462*15dc779aSAndroid Build Coastguard Worker for (l = 0; l < n2; l++) {
463*15dc779aSAndroid Build Coastguard Worker out[2 * *ptr_idx2] = temp[2 * l];
464*15dc779aSAndroid Build Coastguard Worker out[2 * *ptr_idx2++ + 1] = temp[2 * l + 1];
465*15dc779aSAndroid Build Coastguard Worker }
466*15dc779aSAndroid Build Coastguard Worker }
467*15dc779aSAndroid Build Coastguard Worker
468*15dc779aSAndroid Build Coastguard Worker memcpy(ptr_in, out, (2 * n1) * sizeof(out[0]));
469*15dc779aSAndroid Build Coastguard Worker }
470*15dc779aSAndroid Build Coastguard Worker
ia_aac_ld_enc_mdct_480(FLOAT32 * ptr_inp,FLOAT32 * ptr_scratch,WORD32 mdct_flag,ixheaace_mdct_tables * pstr_mdct_tables)471*15dc779aSAndroid Build Coastguard Worker VOID ia_aac_ld_enc_mdct_480(FLOAT32 *ptr_inp, FLOAT32 *ptr_scratch, WORD32 mdct_flag,
472*15dc779aSAndroid Build Coastguard Worker ixheaace_mdct_tables *pstr_mdct_tables) {
473*15dc779aSAndroid Build Coastguard Worker WORD32 k;
474*15dc779aSAndroid Build Coastguard Worker FLOAT32 const_mltfac = ((FLOAT32)FRAME_LEN_512) / FRAME_LEN_480;
475*15dc779aSAndroid Build Coastguard Worker
476*15dc779aSAndroid Build Coastguard Worker ia_eaacp_enc_pre_twiddle_aac(ptr_scratch, ptr_inp, FRAME_LEN_480,
477*15dc779aSAndroid Build Coastguard Worker pstr_mdct_tables->cosine_array_960);
478*15dc779aSAndroid Build Coastguard Worker
479*15dc779aSAndroid Build Coastguard Worker ia_enhaacplus_enc_fft240(ptr_scratch);
480*15dc779aSAndroid Build Coastguard Worker
481*15dc779aSAndroid Build Coastguard Worker ia_enhaacplus_enc_post_twiddle(ptr_inp, ptr_scratch, pstr_mdct_tables->cosine_array_960,
482*15dc779aSAndroid Build Coastguard Worker FRAME_LEN_480);
483*15dc779aSAndroid Build Coastguard Worker
484*15dc779aSAndroid Build Coastguard Worker if (0 == mdct_flag) {
485*15dc779aSAndroid Build Coastguard Worker for (k = 0; k < MDCT_LEN; k++) {
486*15dc779aSAndroid Build Coastguard Worker ptr_inp[k] *= const_mltfac;
487*15dc779aSAndroid Build Coastguard Worker }
488*15dc779aSAndroid Build Coastguard Worker }
489*15dc779aSAndroid Build Coastguard Worker }
490