/src/libxaac/decoder/ixheaacd_dsp_fft32x32s.c
Line | Count | Source |
1 | | /****************************************************************************** |
2 | | * * |
3 | | * Copyright (C) 2018 The Android Open Source Project |
4 | | * |
5 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | | * you may not use this file except in compliance with the License. |
7 | | * You may obtain a copy of the License at: |
8 | | * |
9 | | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | | * |
11 | | * Unless required by applicable law or agreed to in writing, software |
12 | | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | | * See the License for the specific language governing permissions and |
15 | | * limitations under the License. |
16 | | * |
17 | | ***************************************************************************** |
18 | | * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
19 | | */ |
20 | | #include "ixheaacd_sbr_common.h" |
21 | | #include "ixheaac_type_def.h" |
22 | | |
23 | | #include "ixheaac_constants.h" |
24 | | #include "ixheaac_basic_ops32.h" |
25 | | #include "ixheaac_basic_ops16.h" |
26 | | #include "ixheaac_basic_ops40.h" |
27 | | #include "ixheaac_basic_ops.h" |
28 | | #include "ixheaacd_common_rom.h" |
29 | | #include "ixheaacd_dsp_fft32x32s.h" |
30 | | #include "ixheaacd_intrinsics.h" |
31 | | |
32 | | #include "ixheaac_basic_op.h" |
33 | | |
34 | 0 | VOID ixheaacd_inv_dit_fft_8pt_dec(WORD32 *y, WORD32 *real, WORD32 *imag) { |
35 | 0 | WORD32 a0, a1, a2, a3, a00, a10, a20, a30; |
36 | 0 | WORD32 vr, vi; |
37 | |
|
38 | 0 | WORD32 x[16]; |
39 | |
|
40 | 0 | a00 = ixheaac_add32_sat(y[0], y[8]); |
41 | 0 | a0 = ixheaac_sub32_sat(y[0], y[8]); |
42 | |
|
43 | 0 | a20 = ixheaac_add32_sat(y[1], y[9]); |
44 | 0 | a3 = ixheaac_sub32_sat(y[1], y[9]); |
45 | |
|
46 | 0 | a10 = ixheaac_add32_sat(y[4], y[12]); |
47 | 0 | a2 = ixheaac_sub32_sat(y[4], y[12]); |
48 | |
|
49 | 0 | a30 = ixheaac_add32_sat(y[5], y[13]); |
50 | 0 | a1 = ixheaac_sub32_sat(y[5], y[13]); |
51 | |
|
52 | 0 | x[0] = ixheaac_add32_sat(a00, a10); |
53 | 0 | x[4] = ixheaac_sub32_sat(a00, a10); |
54 | 0 | x[1] = ixheaac_add32_sat(a20, a30); |
55 | 0 | x[5] = ixheaac_sub32_sat(a20, a30); |
56 | |
|
57 | 0 | x[2] = ixheaac_sub32_sat(a0, a1); |
58 | 0 | x[6] = ixheaac_add32_sat(a0, a1); |
59 | 0 | x[3] = ixheaac_add32_sat(a3, a2); |
60 | 0 | x[7] = ixheaac_sub32_sat(a3, a2); |
61 | |
|
62 | 0 | a00 = ixheaac_add32_sat(y[2], y[10]); |
63 | 0 | a0 = ixheaac_sub32_sat(y[2], y[10]); |
64 | |
|
65 | 0 | a20 = ixheaac_add32_sat(y[3], y[11]); |
66 | 0 | a3 = ixheaac_sub32_sat(y[3], y[11]); |
67 | |
|
68 | 0 | a10 = ixheaac_add32_sat(y[6], y[14]); |
69 | 0 | a2 = ixheaac_sub32_sat(y[6], y[14]); |
70 | |
|
71 | 0 | a30 = ixheaac_add32_sat(y[7], y[15]); |
72 | 0 | a1 = ixheaac_sub32_sat(y[7], y[15]); |
73 | |
|
74 | 0 | x[8] = ixheaac_add32_sat(a00, a10); |
75 | 0 | x[12] = ixheaac_sub32_sat(a00, a10); |
76 | 0 | x[9] = ixheaac_add32_sat(a20, a30); |
77 | 0 | x[13] = ixheaac_sub32_sat(a20, a30); |
78 | |
|
79 | 0 | x[10] = ixheaac_sub32_sat(a0, a1); |
80 | 0 | x[14] = ixheaac_add32_sat(a0, a1); |
81 | 0 | x[11] = ixheaac_add32_sat(a3, a2); |
82 | 0 | x[15] = ixheaac_sub32_sat(a3, a2); |
83 | |
|
84 | 0 | real[0] = ixheaac_add32_sat(x[0], x[8]); |
85 | 0 | imag[0] = ixheaac_add32_sat(x[1], x[9]); |
86 | 0 | a00 = ixheaac_sub32_sat(x[0], x[8]); |
87 | 0 | a10 = ixheaac_sub32_sat(x[1], x[9]); |
88 | |
|
89 | 0 | a0 = ixheaac_sub32_sat(x[4], x[13]); |
90 | 0 | a1 = ixheaac_add32_sat(x[5], x[12]); |
91 | |
|
92 | 0 | real[4] = ixheaac_add32_sat(x[4], x[13]); |
93 | 0 | imag[4] = ixheaac_sub32_sat(x[5], x[12]); |
94 | |
|
95 | 0 | vr = ixheaac_mult32x16in32_shl_sat(ixheaac_sub32_sat(x[10], x[11]), 0x5A82); |
96 | 0 | vi = ixheaac_mult32x16in32_shl_sat(ixheaac_add32_sat(x[10], x[11]), 0x5A82); |
97 | |
|
98 | 0 | real[1] = ixheaac_add32_sat(x[2], vr); |
99 | 0 | imag[1] = ixheaac_add32_sat(x[3], vi); |
100 | |
|
101 | 0 | a2 = ixheaac_sub32_sat(x[2], vr); |
102 | 0 | a3 = ixheaac_sub32_sat(x[3], vi); |
103 | |
|
104 | 0 | real[2] = ixheaac_add32_sat(a0, a2); |
105 | 0 | imag[2] = ixheaac_add32_sat(a1, a3); |
106 | 0 | vr = ixheaac_mult32x16in32_shl_sat(ixheaac_add32_sat(x[14], x[15]), 0x5A82); |
107 | 0 | vi = ixheaac_mult32x16in32_shl_sat(ixheaac_sub32_sat(x[14], x[15]), 0x5A82); |
108 | |
|
109 | 0 | a20 = ixheaac_sub32_sat(x[6], vr); |
110 | 0 | a30 = ixheaac_add32_sat(x[7], vi); |
111 | |
|
112 | 0 | real[3] = ixheaac_add32_sat(a00, a20); |
113 | 0 | imag[3] = ixheaac_add32_sat(a10, a30); |
114 | |
|
115 | 0 | real[5] = ixheaac_add32_sat(x[6], vr); |
116 | 0 | imag[5] = ixheaac_sub32_sat(x[7], vi); |
117 | 0 | } |