/proc/self/cwd/libfaad/sbr_dct.c
Line | Count | Source |
1 | | /* |
2 | | ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding |
3 | | ** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com |
4 | | ** |
5 | | ** This program is free software; you can redistribute it and/or modify |
6 | | ** it under the terms of the GNU General Public License as published by |
7 | | ** the Free Software Foundation; either version 2 of the License, or |
8 | | ** (at your option) any later version. |
9 | | ** |
10 | | ** This program is distributed in the hope that it will be useful, |
11 | | ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | | ** GNU General Public License for more details. |
14 | | ** |
15 | | ** You should have received a copy of the GNU General Public License |
16 | | ** along with this program; if not, write to the Free Software |
17 | | ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | | ** |
19 | | ** Any non-GPL usage of this software or parts of this software is strictly |
20 | | ** forbidden. |
21 | | ** |
22 | | ** The "appropriate copyright message" mentioned in section 2c of the GPLv2 |
23 | | ** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com" |
24 | | ** |
25 | | ** Commercial non-GPL licensing of this software is possible. |
26 | | ** For more info contact Nero AG through Mpeg4AAClicense@nero.com. |
27 | | ** |
28 | | ** $Id: sbr_dct.c,v 1.20 2007/11/01 12:33:34 menno Exp $ |
29 | | **/ |
30 | | |
31 | | |
32 | | /* Most of the DCT/DST codes here are generated using Spiral which is GPL |
33 | | * For more info see: http://www.spiral.net/ |
34 | | */ |
35 | | |
36 | | #include "common.h" |
37 | | |
38 | | #ifdef SBR_DEC |
39 | | |
40 | | #ifdef _MSC_VER |
41 | | #pragma warning(disable:4305) |
42 | | #pragma warning(disable:4244) |
43 | | #endif |
44 | | |
45 | | |
46 | | #include "sbr_dct.h" |
47 | | |
48 | | void DCT4_32(real_t *y, real_t *x) |
49 | 2.38M | { |
50 | 2.38M | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; |
51 | 2.38M | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; |
52 | 2.38M | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; |
53 | 2.38M | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; |
54 | 2.38M | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; |
55 | 2.38M | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; |
56 | 2.38M | real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70; |
57 | 2.38M | real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80; |
58 | 2.38M | real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90; |
59 | 2.38M | real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100; |
60 | 2.38M | real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110; |
61 | 2.38M | real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120; |
62 | 2.38M | real_t f121, f122, f123, f124, f125, f126, f127, f128, f129, f130; |
63 | 2.38M | real_t f131, f132, f133, f134, f135, f136, f137, f138, f139, f140; |
64 | 2.38M | real_t f141, f142, f143, f144, f145, f146, f147, f148, f149, f150; |
65 | 2.38M | real_t f151, f152, f153, f154, f155, f156, f157, f158, f159, f160; |
66 | 2.38M | real_t f161, f162, f163, f164, f165, f166, f167, f168, f169, f170; |
67 | 2.38M | real_t f171, f172, f173, f174, f175, f176, f177, f178, f179, f180; |
68 | 2.38M | real_t f181, f182, f183, f184, f185, f186, f187, f188, f189, f190; |
69 | 2.38M | real_t f191, f192, f193, f194, f195, f196, f197, f198, f199, f200; |
70 | 2.38M | real_t f201, f202, f203, f204, f205, f206, f207, f208, f209, f210; |
71 | 2.38M | real_t f211, f212, f213, f214, f215, f216, f217, f218, f219, f220; |
72 | 2.38M | real_t f221, f222, f223, f224, f225, f226, f227, f228, f229, f230; |
73 | 2.38M | real_t f231, f232, f233, f234, f235, f236, f237, f238, f239, f240; |
74 | 2.38M | real_t f241, f242, f243, f244, f245, f246, f247, f248, f249, f250; |
75 | 2.38M | real_t f251, f252, f253, f254, f255, f256, f257, f258, f259, f260; |
76 | 2.38M | real_t f261, f262, f263, f264, f265, f266, f267, f268, f269, f270; |
77 | 2.38M | real_t f271, f272, f273, f274, f275, f276, f277, f278, f279, f280; |
78 | 2.38M | real_t f281, f282, f283, f284, f285, f286, f287, f288, f289, f290; |
79 | 2.38M | real_t f291, f292, f293, f294, f295, f296, f297, f298, f299, f300; |
80 | 2.38M | real_t f301, f302, f303, f304, f305, f306, f307, f310, f311, f312; |
81 | 2.38M | real_t f313, f316, f317, f318, f319, f322, f323, f324, f325, f328; |
82 | 2.38M | real_t f329, f330, f331, f334, f335, f336, f337, f340, f341, f342; |
83 | 2.38M | real_t f343, f346, f347, f348, f349, f352, f353, f354, f355, f358; |
84 | 2.38M | real_t f359, f360, f361, f364, f365, f366, f367, f370, f371, f372; |
85 | 2.38M | real_t f373, f376, f377, f378, f379, f382, f383, f384, f385, f388; |
86 | 2.38M | real_t f389, f390, f391, f394, f395, f396, f397; |
87 | | |
88 | 2.38M | f0 = x[15] - x[16]; |
89 | 2.38M | f1 = x[15] + x[16]; |
90 | 2.38M | f2 = MUL_F(FRAC_CONST(0.7071067811865476), f1); |
91 | 2.38M | f3 = MUL_F(FRAC_CONST(0.7071067811865476), f0); |
92 | 2.38M | f4 = x[8] - x[23]; |
93 | 2.38M | f5 = x[8] + x[23]; |
94 | 2.38M | f6 = MUL_F(FRAC_CONST(0.7071067811865476), f5); |
95 | 2.38M | f7 = MUL_F(FRAC_CONST(0.7071067811865476), f4); |
96 | 2.38M | f8 = x[12] - x[19]; |
97 | 2.38M | f9 = x[12] + x[19]; |
98 | 2.38M | f10 = MUL_F(FRAC_CONST(0.7071067811865476), f9); |
99 | 2.38M | f11 = MUL_F(FRAC_CONST(0.7071067811865476), f8); |
100 | 2.38M | f12 = x[11] - x[20]; |
101 | 2.38M | f13 = x[11] + x[20]; |
102 | 2.38M | f14 = MUL_F(FRAC_CONST(0.7071067811865476), f13); |
103 | 2.38M | f15 = MUL_F(FRAC_CONST(0.7071067811865476), f12); |
104 | 2.38M | f16 = x[14] - x[17]; |
105 | 2.38M | f17 = x[14] + x[17]; |
106 | 2.38M | f18 = MUL_F(FRAC_CONST(0.7071067811865476), f17); |
107 | 2.38M | f19 = MUL_F(FRAC_CONST(0.7071067811865476), f16); |
108 | 2.38M | f20 = x[9] - x[22]; |
109 | 2.38M | f21 = x[9] + x[22]; |
110 | 2.38M | f22 = MUL_F(FRAC_CONST(0.7071067811865476), f21); |
111 | 2.38M | f23 = MUL_F(FRAC_CONST(0.7071067811865476), f20); |
112 | 2.38M | f24 = x[13] - x[18]; |
113 | 2.38M | f25 = x[13] + x[18]; |
114 | 2.38M | f26 = MUL_F(FRAC_CONST(0.7071067811865476), f25); |
115 | 2.38M | f27 = MUL_F(FRAC_CONST(0.7071067811865476), f24); |
116 | 2.38M | f28 = x[10] - x[21]; |
117 | 2.38M | f29 = x[10] + x[21]; |
118 | 2.38M | f30 = MUL_F(FRAC_CONST(0.7071067811865476), f29); |
119 | 2.38M | f31 = MUL_F(FRAC_CONST(0.7071067811865476), f28); |
120 | 2.38M | f32 = x[0] - f2; |
121 | 2.38M | f33 = x[0] + f2; |
122 | 2.38M | f34 = x[31] - f3; |
123 | 2.38M | f35 = x[31] + f3; |
124 | 2.38M | f36 = x[7] - f6; |
125 | 2.38M | f37 = x[7] + f6; |
126 | 2.38M | f38 = x[24] - f7; |
127 | 2.38M | f39 = x[24] + f7; |
128 | 2.38M | f40 = x[3] - f10; |
129 | 2.38M | f41 = x[3] + f10; |
130 | 2.38M | f42 = x[28] - f11; |
131 | 2.38M | f43 = x[28] + f11; |
132 | 2.38M | f44 = x[4] - f14; |
133 | 2.38M | f45 = x[4] + f14; |
134 | 2.38M | f46 = x[27] - f15; |
135 | 2.38M | f47 = x[27] + f15; |
136 | 2.38M | f48 = x[1] - f18; |
137 | 2.38M | f49 = x[1] + f18; |
138 | 2.38M | f50 = x[30] - f19; |
139 | 2.38M | f51 = x[30] + f19; |
140 | 2.38M | f52 = x[6] - f22; |
141 | 2.38M | f53 = x[6] + f22; |
142 | 2.38M | f54 = x[25] - f23; |
143 | 2.38M | f55 = x[25] + f23; |
144 | 2.38M | f56 = x[2] - f26; |
145 | 2.38M | f57 = x[2] + f26; |
146 | 2.38M | f58 = x[29] - f27; |
147 | 2.38M | f59 = x[29] + f27; |
148 | 2.38M | f60 = x[5] - f30; |
149 | 2.38M | f61 = x[5] + f30; |
150 | 2.38M | f62 = x[26] - f31; |
151 | 2.38M | f63 = x[26] + f31; |
152 | 2.38M | f64 = f39 + f37; |
153 | 2.38M | f65 = MUL_F(FRAC_CONST(-0.5411961001461969), f39); |
154 | 2.38M | f66 = MUL_F(FRAC_CONST(0.9238795325112867), f64); |
155 | 2.38M | f67 = MUL_C(COEF_CONST(1.3065629648763766), f37); |
156 | 2.38M | f68 = f65 + f66; |
157 | 2.38M | f69 = f67 - f66; |
158 | 2.38M | f70 = f38 + f36; |
159 | 2.38M | f71 = MUL_C(COEF_CONST(1.3065629648763770), f38); |
160 | 2.38M | f72 = MUL_F(FRAC_CONST(-0.3826834323650904), f70); |
161 | 2.38M | f73 = MUL_F(FRAC_CONST(0.5411961001461961), f36); |
162 | 2.38M | f74 = f71 + f72; |
163 | 2.38M | f75 = f73 - f72; |
164 | 2.38M | f76 = f47 + f45; |
165 | 2.38M | f77 = MUL_F(FRAC_CONST(-0.5411961001461969), f47); |
166 | 2.38M | f78 = MUL_F(FRAC_CONST(0.9238795325112867), f76); |
167 | 2.38M | f79 = MUL_C(COEF_CONST(1.3065629648763766), f45); |
168 | 2.38M | f80 = f77 + f78; |
169 | 2.38M | f81 = f79 - f78; |
170 | 2.38M | f82 = f46 + f44; |
171 | 2.38M | f83 = MUL_C(COEF_CONST(1.3065629648763770), f46); |
172 | 2.38M | f84 = MUL_F(FRAC_CONST(-0.3826834323650904), f82); |
173 | 2.38M | f85 = MUL_F(FRAC_CONST(0.5411961001461961), f44); |
174 | 2.38M | f86 = f83 + f84; |
175 | 2.38M | f87 = f85 - f84; |
176 | 2.38M | f88 = f55 + f53; |
177 | 2.38M | f89 = MUL_F(FRAC_CONST(-0.5411961001461969), f55); |
178 | 2.38M | f90 = MUL_F(FRAC_CONST(0.9238795325112867), f88); |
179 | 2.38M | f91 = MUL_C(COEF_CONST(1.3065629648763766), f53); |
180 | 2.38M | f92 = f89 + f90; |
181 | 2.38M | f93 = f91 - f90; |
182 | 2.38M | f94 = f54 + f52; |
183 | 2.38M | f95 = MUL_C(COEF_CONST(1.3065629648763770), f54); |
184 | 2.38M | f96 = MUL_F(FRAC_CONST(-0.3826834323650904), f94); |
185 | 2.38M | f97 = MUL_F(FRAC_CONST(0.5411961001461961), f52); |
186 | 2.38M | f98 = f95 + f96; |
187 | 2.38M | f99 = f97 - f96; |
188 | 2.38M | f100 = f63 + f61; |
189 | 2.38M | f101 = MUL_F(FRAC_CONST(-0.5411961001461969), f63); |
190 | 2.38M | f102 = MUL_F(FRAC_CONST(0.9238795325112867), f100); |
191 | 2.38M | f103 = MUL_C(COEF_CONST(1.3065629648763766), f61); |
192 | 2.38M | f104 = f101 + f102; |
193 | 2.38M | f105 = f103 - f102; |
194 | 2.38M | f106 = f62 + f60; |
195 | 2.38M | f107 = MUL_C(COEF_CONST(1.3065629648763770), f62); |
196 | 2.38M | f108 = MUL_F(FRAC_CONST(-0.3826834323650904), f106); |
197 | 2.38M | f109 = MUL_F(FRAC_CONST(0.5411961001461961), f60); |
198 | 2.38M | f110 = f107 + f108; |
199 | 2.38M | f111 = f109 - f108; |
200 | 2.38M | f112 = f33 - f68; |
201 | 2.38M | f113 = f33 + f68; |
202 | 2.38M | f114 = f35 - f69; |
203 | 2.38M | f115 = f35 + f69; |
204 | 2.38M | f116 = f32 - f74; |
205 | 2.38M | f117 = f32 + f74; |
206 | 2.38M | f118 = f34 - f75; |
207 | 2.38M | f119 = f34 + f75; |
208 | 2.38M | f120 = f41 - f80; |
209 | 2.38M | f121 = f41 + f80; |
210 | 2.38M | f122 = f43 - f81; |
211 | 2.38M | f123 = f43 + f81; |
212 | 2.38M | f124 = f40 - f86; |
213 | 2.38M | f125 = f40 + f86; |
214 | 2.38M | f126 = f42 - f87; |
215 | 2.38M | f127 = f42 + f87; |
216 | 2.38M | f128 = f49 - f92; |
217 | 2.38M | f129 = f49 + f92; |
218 | 2.38M | f130 = f51 - f93; |
219 | 2.38M | f131 = f51 + f93; |
220 | 2.38M | f132 = f48 - f98; |
221 | 2.38M | f133 = f48 + f98; |
222 | 2.38M | f134 = f50 - f99; |
223 | 2.38M | f135 = f50 + f99; |
224 | 2.38M | f136 = f57 - f104; |
225 | 2.38M | f137 = f57 + f104; |
226 | 2.38M | f138 = f59 - f105; |
227 | 2.38M | f139 = f59 + f105; |
228 | 2.38M | f140 = f56 - f110; |
229 | 2.38M | f141 = f56 + f110; |
230 | 2.38M | f142 = f58 - f111; |
231 | 2.38M | f143 = f58 + f111; |
232 | 2.38M | f144 = f123 + f121; |
233 | 2.38M | f145 = MUL_F(FRAC_CONST(-0.7856949583871021), f123); |
234 | 2.38M | f146 = MUL_F(FRAC_CONST(0.9807852804032304), f144); |
235 | 2.38M | f147 = MUL_C(COEF_CONST(1.1758756024193588), f121); |
236 | 2.38M | f148 = f145 + f146; |
237 | 2.38M | f149 = f147 - f146; |
238 | 2.38M | f150 = f127 + f125; |
239 | 2.38M | f151 = MUL_F(FRAC_CONST(0.2758993792829431), f127); |
240 | 2.38M | f152 = MUL_F(FRAC_CONST(0.5555702330196022), f150); |
241 | 2.38M | f153 = MUL_C(COEF_CONST(1.3870398453221475), f125); |
242 | 2.38M | f154 = f151 + f152; |
243 | 2.38M | f155 = f153 - f152; |
244 | 2.38M | f156 = f122 + f120; |
245 | 2.38M | f157 = MUL_C(COEF_CONST(1.1758756024193591), f122); |
246 | 2.38M | f158 = MUL_F(FRAC_CONST(-0.1950903220161287), f156); |
247 | 2.38M | f159 = MUL_F(FRAC_CONST(0.7856949583871016), f120); |
248 | 2.38M | f160 = f157 + f158; |
249 | 2.38M | f161 = f159 - f158; |
250 | 2.38M | f162 = f126 + f124; |
251 | 2.38M | f163 = MUL_C(COEF_CONST(1.3870398453221473), f126); |
252 | 2.38M | f164 = MUL_F(FRAC_CONST(-0.8314696123025455), f162); |
253 | 2.38M | f165 = MUL_F(FRAC_CONST(-0.2758993792829436), f124); |
254 | 2.38M | f166 = f163 + f164; |
255 | 2.38M | f167 = f165 - f164; |
256 | 2.38M | f168 = f139 + f137; |
257 | 2.38M | f169 = MUL_F(FRAC_CONST(-0.7856949583871021), f139); |
258 | 2.38M | f170 = MUL_F(FRAC_CONST(0.9807852804032304), f168); |
259 | 2.38M | f171 = MUL_C(COEF_CONST(1.1758756024193588), f137); |
260 | 2.38M | f172 = f169 + f170; |
261 | 2.38M | f173 = f171 - f170; |
262 | 2.38M | f174 = f143 + f141; |
263 | 2.38M | f175 = MUL_F(FRAC_CONST(0.2758993792829431), f143); |
264 | 2.38M | f176 = MUL_F(FRAC_CONST(0.5555702330196022), f174); |
265 | 2.38M | f177 = MUL_C(COEF_CONST(1.3870398453221475), f141); |
266 | 2.38M | f178 = f175 + f176; |
267 | 2.38M | f179 = f177 - f176; |
268 | 2.38M | f180 = f138 + f136; |
269 | 2.38M | f181 = MUL_C(COEF_CONST(1.1758756024193591), f138); |
270 | 2.38M | f182 = MUL_F(FRAC_CONST(-0.1950903220161287), f180); |
271 | 2.38M | f183 = MUL_F(FRAC_CONST(0.7856949583871016), f136); |
272 | 2.38M | f184 = f181 + f182; |
273 | 2.38M | f185 = f183 - f182; |
274 | 2.38M | f186 = f142 + f140; |
275 | 2.38M | f187 = MUL_C(COEF_CONST(1.3870398453221473), f142); |
276 | 2.38M | f188 = MUL_F(FRAC_CONST(-0.8314696123025455), f186); |
277 | 2.38M | f189 = MUL_F(FRAC_CONST(-0.2758993792829436), f140); |
278 | 2.38M | f190 = f187 + f188; |
279 | 2.38M | f191 = f189 - f188; |
280 | 2.38M | f192 = f113 - f148; |
281 | 2.38M | f193 = f113 + f148; |
282 | 2.38M | f194 = f115 - f149; |
283 | 2.38M | f195 = f115 + f149; |
284 | 2.38M | f196 = f117 - f154; |
285 | 2.38M | f197 = f117 + f154; |
286 | 2.38M | f198 = f119 - f155; |
287 | 2.38M | f199 = f119 + f155; |
288 | 2.38M | f200 = f112 - f160; |
289 | 2.38M | f201 = f112 + f160; |
290 | 2.38M | f202 = f114 - f161; |
291 | 2.38M | f203 = f114 + f161; |
292 | 2.38M | f204 = f116 - f166; |
293 | 2.38M | f205 = f116 + f166; |
294 | 2.38M | f206 = f118 - f167; |
295 | 2.38M | f207 = f118 + f167; |
296 | 2.38M | f208 = f129 - f172; |
297 | 2.38M | f209 = f129 + f172; |
298 | 2.38M | f210 = f131 - f173; |
299 | 2.38M | f211 = f131 + f173; |
300 | 2.38M | f212 = f133 - f178; |
301 | 2.38M | f213 = f133 + f178; |
302 | 2.38M | f214 = f135 - f179; |
303 | 2.38M | f215 = f135 + f179; |
304 | 2.38M | f216 = f128 - f184; |
305 | 2.38M | f217 = f128 + f184; |
306 | 2.38M | f218 = f130 - f185; |
307 | 2.38M | f219 = f130 + f185; |
308 | 2.38M | f220 = f132 - f190; |
309 | 2.38M | f221 = f132 + f190; |
310 | 2.38M | f222 = f134 - f191; |
311 | 2.38M | f223 = f134 + f191; |
312 | 2.38M | f224 = f211 + f209; |
313 | 2.38M | f225 = MUL_F(FRAC_CONST(-0.8971675863426361), f211); |
314 | 2.38M | f226 = MUL_F(FRAC_CONST(0.9951847266721968), f224); |
315 | 2.38M | f227 = MUL_C(COEF_CONST(1.0932018670017576), f209); |
316 | 2.38M | f228 = f225 + f226; |
317 | 2.38M | f229 = f227 - f226; |
318 | 2.38M | f230 = f215 + f213; |
319 | 2.38M | f231 = MUL_F(FRAC_CONST(-0.4105245275223571), f215); |
320 | 2.38M | f232 = MUL_F(FRAC_CONST(0.8819212643483549), f230); |
321 | 2.38M | f233 = MUL_C(COEF_CONST(1.3533180011743529), f213); |
322 | 2.38M | f234 = f231 + f232; |
323 | 2.38M | f235 = f233 - f232; |
324 | 2.38M | f236 = f219 + f217; |
325 | 2.38M | f237 = MUL_F(FRAC_CONST(0.1386171691990915), f219); |
326 | 2.38M | f238 = MUL_F(FRAC_CONST(0.6343932841636455), f236); |
327 | 2.38M | f239 = MUL_C(COEF_CONST(1.4074037375263826), f217); |
328 | 2.38M | f240 = f237 + f238; |
329 | 2.38M | f241 = f239 - f238; |
330 | 2.38M | f242 = f223 + f221; |
331 | 2.38M | f243 = MUL_F(FRAC_CONST(0.6666556584777466), f223); |
332 | 2.38M | f244 = MUL_F(FRAC_CONST(0.2902846772544623), f242); |
333 | 2.38M | f245 = MUL_C(COEF_CONST(1.2472250129866711), f221); |
334 | 2.38M | f246 = f243 + f244; |
335 | 2.38M | f247 = f245 - f244; |
336 | 2.38M | f248 = f210 + f208; |
337 | 2.38M | f249 = MUL_C(COEF_CONST(1.0932018670017574), f210); |
338 | 2.38M | f250 = MUL_F(FRAC_CONST(-0.0980171403295605), f248); |
339 | 2.38M | f251 = MUL_F(FRAC_CONST(0.8971675863426364), f208); |
340 | 2.38M | f252 = f249 + f250; |
341 | 2.38M | f253 = f251 - f250; |
342 | 2.38M | f254 = f214 + f212; |
343 | 2.38M | f255 = MUL_C(COEF_CONST(1.3533180011743529), f214); |
344 | 2.38M | f256 = MUL_F(FRAC_CONST(-0.4713967368259979), f254); |
345 | 2.38M | f257 = MUL_F(FRAC_CONST(0.4105245275223569), f212); |
346 | 2.38M | f258 = f255 + f256; |
347 | 2.38M | f259 = f257 - f256; |
348 | 2.38M | f260 = f218 + f216; |
349 | 2.38M | f261 = MUL_C(COEF_CONST(1.4074037375263826), f218); |
350 | 2.38M | f262 = MUL_F(FRAC_CONST(-0.7730104533627369), f260); |
351 | 2.38M | f263 = MUL_F(FRAC_CONST(-0.1386171691990913), f216); |
352 | 2.38M | f264 = f261 + f262; |
353 | 2.38M | f265 = f263 - f262; |
354 | 2.38M | f266 = f222 + f220; |
355 | 2.38M | f267 = MUL_C(COEF_CONST(1.2472250129866711), f222); |
356 | 2.38M | f268 = MUL_F(FRAC_CONST(-0.9569403357322089), f266); |
357 | 2.38M | f269 = MUL_F(FRAC_CONST(-0.6666556584777469), f220); |
358 | 2.38M | f270 = f267 + f268; |
359 | 2.38M | f271 = f269 - f268; |
360 | 2.38M | f272 = f193 - f228; |
361 | 2.38M | f273 = f193 + f228; |
362 | 2.38M | f274 = f195 - f229; |
363 | 2.38M | f275 = f195 + f229; |
364 | 2.38M | f276 = f197 - f234; |
365 | 2.38M | f277 = f197 + f234; |
366 | 2.38M | f278 = f199 - f235; |
367 | 2.38M | f279 = f199 + f235; |
368 | 2.38M | f280 = f201 - f240; |
369 | 2.38M | f281 = f201 + f240; |
370 | 2.38M | f282 = f203 - f241; |
371 | 2.38M | f283 = f203 + f241; |
372 | 2.38M | f284 = f205 - f246; |
373 | 2.38M | f285 = f205 + f246; |
374 | 2.38M | f286 = f207 - f247; |
375 | 2.38M | f287 = f207 + f247; |
376 | 2.38M | f288 = f192 - f252; |
377 | 2.38M | f289 = f192 + f252; |
378 | 2.38M | f290 = f194 - f253; |
379 | 2.38M | f291 = f194 + f253; |
380 | 2.38M | f292 = f196 - f258; |
381 | 2.38M | f293 = f196 + f258; |
382 | 2.38M | f294 = f198 - f259; |
383 | 2.38M | f295 = f198 + f259; |
384 | 2.38M | f296 = f200 - f264; |
385 | 2.38M | f297 = f200 + f264; |
386 | 2.38M | f298 = f202 - f265; |
387 | 2.38M | f299 = f202 + f265; |
388 | 2.38M | f300 = f204 - f270; |
389 | 2.38M | f301 = f204 + f270; |
390 | 2.38M | f302 = f206 - f271; |
391 | 2.38M | f303 = f206 + f271; |
392 | 2.38M | f304 = f275 + f273; |
393 | 2.38M | f305 = MUL_F(FRAC_CONST(-0.9751575901732920), f275); |
394 | 2.38M | f306 = MUL_F(FRAC_CONST(0.9996988186962043), f304); |
395 | 2.38M | f307 = MUL_C(COEF_CONST(1.0242400472191164), f273); |
396 | 2.38M | y[0] = f305 + f306; |
397 | 2.38M | y[31] = f307 - f306; |
398 | 2.38M | f310 = f279 + f277; |
399 | 2.38M | f311 = MUL_F(FRAC_CONST(-0.8700688593994936), f279); |
400 | 2.38M | f312 = MUL_F(FRAC_CONST(0.9924795345987100), f310); |
401 | 2.38M | f313 = MUL_C(COEF_CONST(1.1148902097979263), f277); |
402 | 2.38M | y[2] = f311 + f312; |
403 | 2.38M | y[29] = f313 - f312; |
404 | 2.38M | f316 = f283 + f281; |
405 | 2.38M | f317 = MUL_F(FRAC_CONST(-0.7566008898816587), f283); |
406 | 2.38M | f318 = MUL_F(FRAC_CONST(0.9757021300385286), f316); |
407 | 2.38M | f319 = MUL_C(COEF_CONST(1.1948033701953984), f281); |
408 | 2.38M | y[4] = f317 + f318; |
409 | 2.38M | y[27] = f319 - f318; |
410 | 2.38M | f322 = f287 + f285; |
411 | 2.38M | f323 = MUL_F(FRAC_CONST(-0.6358464401941451), f287); |
412 | 2.38M | f324 = MUL_F(FRAC_CONST(0.9495281805930367), f322); |
413 | 2.38M | f325 = MUL_C(COEF_CONST(1.2632099209919283), f285); |
414 | 2.38M | y[6] = f323 + f324; |
415 | 2.38M | y[25] = f325 - f324; |
416 | 2.38M | f328 = f291 + f289; |
417 | 2.38M | f329 = MUL_F(FRAC_CONST(-0.5089684416985408), f291); |
418 | 2.38M | f330 = MUL_F(FRAC_CONST(0.9142097557035307), f328); |
419 | 2.38M | f331 = MUL_C(COEF_CONST(1.3194510697085207), f289); |
420 | 2.38M | y[8] = f329 + f330; |
421 | 2.38M | y[23] = f331 - f330; |
422 | 2.38M | f334 = f295 + f293; |
423 | 2.38M | f335 = MUL_F(FRAC_CONST(-0.3771887988789273), f295); |
424 | 2.38M | f336 = MUL_F(FRAC_CONST(0.8700869911087114), f334); |
425 | 2.38M | f337 = MUL_C(COEF_CONST(1.3629851833384954), f293); |
426 | 2.38M | y[10] = f335 + f336; |
427 | 2.38M | y[21] = f337 - f336; |
428 | 2.38M | f340 = f299 + f297; |
429 | 2.38M | f341 = MUL_F(FRAC_CONST(-0.2417766217337384), f299); |
430 | 2.38M | f342 = MUL_F(FRAC_CONST(0.8175848131515837), f340); |
431 | 2.38M | f343 = MUL_C(COEF_CONST(1.3933930045694289), f297); |
432 | 2.38M | y[12] = f341 + f342; |
433 | 2.38M | y[19] = f343 - f342; |
434 | 2.38M | f346 = f303 + f301; |
435 | 2.38M | f347 = MUL_F(FRAC_CONST(-0.1040360035527077), f303); |
436 | 2.38M | f348 = MUL_F(FRAC_CONST(0.7572088465064845), f346); |
437 | 2.38M | f349 = MUL_C(COEF_CONST(1.4103816894602612), f301); |
438 | 2.38M | y[14] = f347 + f348; |
439 | 2.38M | y[17] = f349 - f348; |
440 | 2.38M | f352 = f274 + f272; |
441 | 2.38M | f353 = MUL_F(FRAC_CONST(0.0347065382144002), f274); |
442 | 2.38M | f354 = MUL_F(FRAC_CONST(0.6895405447370668), f352); |
443 | 2.38M | f355 = MUL_C(COEF_CONST(1.4137876276885337), f272); |
444 | 2.38M | y[16] = f353 + f354; |
445 | 2.38M | y[15] = f355 - f354; |
446 | 2.38M | f358 = f278 + f276; |
447 | 2.38M | f359 = MUL_F(FRAC_CONST(0.1731148370459795), f278); |
448 | 2.38M | f360 = MUL_F(FRAC_CONST(0.6152315905806268), f358); |
449 | 2.38M | f361 = MUL_C(COEF_CONST(1.4035780182072330), f276); |
450 | 2.38M | y[18] = f359 + f360; |
451 | 2.38M | y[13] = f361 - f360; |
452 | 2.38M | f364 = f282 + f280; |
453 | 2.38M | f365 = MUL_F(FRAC_CONST(0.3098559453626100), f282); |
454 | 2.38M | f366 = MUL_F(FRAC_CONST(0.5349976198870972), f364); |
455 | 2.38M | f367 = MUL_C(COEF_CONST(1.3798511851368043), f280); |
456 | 2.38M | y[20] = f365 + f366; |
457 | 2.38M | y[11] = f367 - f366; |
458 | 2.38M | f370 = f286 + f284; |
459 | 2.38M | f371 = MUL_F(FRAC_CONST(0.4436129715409088), f286); |
460 | 2.38M | f372 = MUL_F(FRAC_CONST(0.4496113296546065), f370); |
461 | 2.38M | f373 = MUL_C(COEF_CONST(1.3428356308501219), f284); |
462 | 2.38M | y[22] = f371 + f372; |
463 | 2.38M | y[9] = f373 - f372; |
464 | 2.38M | f376 = f290 + f288; |
465 | 2.38M | f377 = MUL_F(FRAC_CONST(0.5730977622997509), f290); |
466 | 2.38M | f378 = MUL_F(FRAC_CONST(0.3598950365349881), f376); |
467 | 2.38M | f379 = MUL_C(COEF_CONST(1.2928878353697271), f288); |
468 | 2.38M | y[24] = f377 + f378; |
469 | 2.38M | y[7] = f379 - f378; |
470 | 2.38M | f382 = f294 + f292; |
471 | 2.38M | f383 = MUL_F(FRAC_CONST(0.6970633083205415), f294); |
472 | 2.38M | f384 = MUL_F(FRAC_CONST(0.2667127574748984), f382); |
473 | 2.38M | f385 = MUL_C(COEF_CONST(1.2304888232703382), f292); |
474 | 2.38M | y[26] = f383 + f384; |
475 | 2.38M | y[5] = f385 - f384; |
476 | 2.38M | f388 = f298 + f296; |
477 | 2.38M | f389 = MUL_F(FRAC_CONST(0.8143157536286401), f298); |
478 | 2.38M | f390 = MUL_F(FRAC_CONST(0.1709618887603012), f388); |
479 | 2.38M | f391 = MUL_C(COEF_CONST(1.1562395311492424), f296); |
480 | 2.38M | y[28] = f389 + f390; |
481 | 2.38M | y[3] = f391 - f390; |
482 | 2.38M | f394 = f302 + f300; |
483 | 2.38M | f395 = MUL_F(FRAC_CONST(0.9237258930790228), f302); |
484 | 2.38M | f396 = MUL_F(FRAC_CONST(0.0735645635996674), f394); |
485 | 2.38M | f397 = MUL_C(COEF_CONST(1.0708550202783576), f300); |
486 | 2.38M | y[30] = f395 + f396; |
487 | 2.38M | y[1] = f397 - f396; |
488 | 2.38M | } |
489 | | |
490 | | void DST4_32(real_t *y, real_t *x) |
491 | 2.38M | { |
492 | 2.38M | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9; |
493 | 2.38M | real_t f10, f11, f12, f13, f14, f15, f16, f17, f18, f19; |
494 | 2.38M | real_t f20, f21, f22, f23, f24, f25, f26, f27, f28, f29; |
495 | 2.38M | real_t f30, f31, f32, f33, f34, f35, f36, f37, f38, f39; |
496 | 2.38M | real_t f40, f41, f42, f43, f44, f45, f46, f47, f48, f49; |
497 | 2.38M | real_t f50, f51, f52, f53, f54, f55, f56, f57, f58, f59; |
498 | 2.38M | real_t f60, f61, f62, f63, f64, f65, f66, f67, f68, f69; |
499 | 2.38M | real_t f70, f71, f72, f73, f74, f75, f76, f77, f78, f79; |
500 | 2.38M | real_t f80, f81, f82, f83, f84, f85, f86, f87, f88, f89; |
501 | 2.38M | real_t f90, f91, f92, f93, f94, f95, f96, f97, f98, f99; |
502 | 2.38M | real_t f100, f101, f102, f103, f104, f105, f106, f107, f108, f109; |
503 | 2.38M | real_t f110, f111, f112, f113, f114, f115, f116, f117, f118, f119; |
504 | 2.38M | real_t f120, f121, f122, f123, f124, f125, f126, f127, f128, f129; |
505 | 2.38M | real_t f130, f131, f132, f133, f134, f135, f136, f137, f138, f139; |
506 | 2.38M | real_t f140, f141, f142, f143, f144, f145, f146, f147, f148, f149; |
507 | 2.38M | real_t f150, f151, f152, f153, f154, f155, f156, f157, f158, f159; |
508 | 2.38M | real_t f160, f161, f162, f163, f164, f165, f166, f167, f168, f169; |
509 | 2.38M | real_t f170, f171, f172, f173, f174, f175, f176, f177, f178, f179; |
510 | 2.38M | real_t f180, f181, f182, f183, f184, f185, f186, f187, f188, f189; |
511 | 2.38M | real_t f190, f191, f192, f193, f194, f195, f196, f197, f198, f199; |
512 | 2.38M | real_t f200, f201, f202, f203, f204, f205, f206, f207, f208, f209; |
513 | 2.38M | real_t f210, f211, f212, f213, f214, f215, f216, f217, f218, f219; |
514 | 2.38M | real_t f220, f221, f222, f223, f224, f225, f226, f227, f228, f229; |
515 | 2.38M | real_t f230, f231, f232, f233, f234, f235, f236, f237, f238, f239; |
516 | 2.38M | real_t f240, f241, f242, f243, f244, f245, f246, f247, f248, f249; |
517 | 2.38M | real_t f250, f251, f252, f253, f254, f255, f256, f257, f258, f259; |
518 | 2.38M | real_t f260, f261, f262, f263, f264, f265, f266, f267, f268, f269; |
519 | 2.38M | real_t f270, f271, f272, f273, f274, f275, f276, f277, f278, f279; |
520 | 2.38M | real_t f280, f281, f282, f283, f284, f285, f286, f287, f288, f289; |
521 | 2.38M | real_t f290, f291, f292, f293, f294, f295, f296, f297, f298, f299; |
522 | 2.38M | real_t f300, f301, f302, f303, f304, f305, f306, f307, f308, f309; |
523 | 2.38M | real_t f310, f311, f312, f313, f314, f315, f316, f317, f318, f319; |
524 | 2.38M | real_t f320, f321, f322, f323, f324, f325, f326, f327, f328, f329; |
525 | 2.38M | real_t f330, f331, f332, f333, f334, f335; |
526 | | |
527 | 2.38M | f0 = x[0] - x[1]; |
528 | 2.38M | f1 = x[2] - x[1]; |
529 | 2.38M | f2 = x[2] - x[3]; |
530 | 2.38M | f3 = x[4] - x[3]; |
531 | 2.38M | f4 = x[4] - x[5]; |
532 | 2.38M | f5 = x[6] - x[5]; |
533 | 2.38M | f6 = x[6] - x[7]; |
534 | 2.38M | f7 = x[8] - x[7]; |
535 | 2.38M | f8 = x[8] - x[9]; |
536 | 2.38M | f9 = x[10] - x[9]; |
537 | 2.38M | f10 = x[10] - x[11]; |
538 | 2.38M | f11 = x[12] - x[11]; |
539 | 2.38M | f12 = x[12] - x[13]; |
540 | 2.38M | f13 = x[14] - x[13]; |
541 | 2.38M | f14 = x[14] - x[15]; |
542 | 2.38M | f15 = x[16] - x[15]; |
543 | 2.38M | f16 = x[16] - x[17]; |
544 | 2.38M | f17 = x[18] - x[17]; |
545 | 2.38M | f18 = x[18] - x[19]; |
546 | 2.38M | f19 = x[20] - x[19]; |
547 | 2.38M | f20 = x[20] - x[21]; |
548 | 2.38M | f21 = x[22] - x[21]; |
549 | 2.38M | f22 = x[22] - x[23]; |
550 | 2.38M | f23 = x[24] - x[23]; |
551 | 2.38M | f24 = x[24] - x[25]; |
552 | 2.38M | f25 = x[26] - x[25]; |
553 | 2.38M | f26 = x[26] - x[27]; |
554 | 2.38M | f27 = x[28] - x[27]; |
555 | 2.38M | f28 = x[28] - x[29]; |
556 | 2.38M | f29 = x[30] - x[29]; |
557 | 2.38M | f30 = x[30] - x[31]; |
558 | 2.38M | f31 = MUL_F(FRAC_CONST(0.7071067811865476), f15); |
559 | 2.38M | f32 = x[0] - f31; |
560 | 2.38M | f33 = x[0] + f31; |
561 | 2.38M | f34 = f7 + f23; |
562 | 2.38M | f35 = MUL_C(COEF_CONST(1.3065629648763766), f7); |
563 | 2.38M | f36 = MUL_F(FRAC_CONST(-0.9238795325112866), f34); |
564 | 2.38M | f37 = MUL_F(FRAC_CONST(-0.5411961001461967), f23); |
565 | 2.38M | f38 = f35 + f36; |
566 | 2.38M | f39 = f37 - f36; |
567 | 2.38M | f40 = f33 - f39; |
568 | 2.38M | f41 = f33 + f39; |
569 | 2.38M | f42 = f32 - f38; |
570 | 2.38M | f43 = f32 + f38; |
571 | 2.38M | f44 = f11 - f19; |
572 | 2.38M | f45 = f11 + f19; |
573 | 2.38M | f46 = MUL_F(FRAC_CONST(0.7071067811865476), f45); |
574 | 2.38M | f47 = f3 - f46; |
575 | 2.38M | f48 = f3 + f46; |
576 | 2.38M | f49 = MUL_F(FRAC_CONST(0.7071067811865476), f44); |
577 | 2.38M | f50 = f49 - f27; |
578 | 2.38M | f51 = f49 + f27; |
579 | 2.38M | f52 = f51 + f48; |
580 | 2.38M | f53 = MUL_F(FRAC_CONST(-0.7856949583871021), f51); |
581 | 2.38M | f54 = MUL_F(FRAC_CONST(0.9807852804032304), f52); |
582 | 2.38M | f55 = MUL_C(COEF_CONST(1.1758756024193588), f48); |
583 | 2.38M | f56 = f53 + f54; |
584 | 2.38M | f57 = f55 - f54; |
585 | 2.38M | f58 = f50 + f47; |
586 | 2.38M | f59 = MUL_F(FRAC_CONST(-0.2758993792829430), f50); |
587 | 2.38M | f60 = MUL_F(FRAC_CONST(0.8314696123025452), f58); |
588 | 2.38M | f61 = MUL_C(COEF_CONST(1.3870398453221475), f47); |
589 | 2.38M | f62 = f59 + f60; |
590 | 2.38M | f63 = f61 - f60; |
591 | 2.38M | f64 = f41 - f56; |
592 | 2.38M | f65 = f41 + f56; |
593 | 2.38M | f66 = f43 - f62; |
594 | 2.38M | f67 = f43 + f62; |
595 | 2.38M | f68 = f42 - f63; |
596 | 2.38M | f69 = f42 + f63; |
597 | 2.38M | f70 = f40 - f57; |
598 | 2.38M | f71 = f40 + f57; |
599 | 2.38M | f72 = f5 - f9; |
600 | 2.38M | f73 = f5 + f9; |
601 | 2.38M | f74 = f13 - f17; |
602 | 2.38M | f75 = f13 + f17; |
603 | 2.38M | f76 = f21 - f25; |
604 | 2.38M | f77 = f21 + f25; |
605 | 2.38M | f78 = MUL_F(FRAC_CONST(0.7071067811865476), f75); |
606 | 2.38M | f79 = f1 - f78; |
607 | 2.38M | f80 = f1 + f78; |
608 | 2.38M | f81 = f73 + f77; |
609 | 2.38M | f82 = MUL_C(COEF_CONST(1.3065629648763766), f73); |
610 | 2.38M | f83 = MUL_F(FRAC_CONST(-0.9238795325112866), f81); |
611 | 2.38M | f84 = MUL_F(FRAC_CONST(-0.5411961001461967), f77); |
612 | 2.38M | f85 = f82 + f83; |
613 | 2.38M | f86 = f84 - f83; |
614 | 2.38M | f87 = f80 - f86; |
615 | 2.38M | f88 = f80 + f86; |
616 | 2.38M | f89 = f79 - f85; |
617 | 2.38M | f90 = f79 + f85; |
618 | 2.38M | f91 = MUL_F(FRAC_CONST(0.7071067811865476), f74); |
619 | 2.38M | f92 = f29 - f91; |
620 | 2.38M | f93 = f29 + f91; |
621 | 2.38M | f94 = f76 + f72; |
622 | 2.38M | f95 = MUL_C(COEF_CONST(1.3065629648763766), f76); |
623 | 2.38M | f96 = MUL_F(FRAC_CONST(-0.9238795325112866), f94); |
624 | 2.38M | f97 = MUL_F(FRAC_CONST(-0.5411961001461967), f72); |
625 | 2.38M | f98 = f95 + f96; |
626 | 2.38M | f99 = f97 - f96; |
627 | 2.38M | f100 = f93 - f99; |
628 | 2.38M | f101 = f93 + f99; |
629 | 2.38M | f102 = f92 - f98; |
630 | 2.38M | f103 = f92 + f98; |
631 | 2.38M | f104 = f101 + f88; |
632 | 2.38M | f105 = MUL_F(FRAC_CONST(-0.8971675863426361), f101); |
633 | 2.38M | f106 = MUL_F(FRAC_CONST(0.9951847266721968), f104); |
634 | 2.38M | f107 = MUL_C(COEF_CONST(1.0932018670017576), f88); |
635 | 2.38M | f108 = f105 + f106; |
636 | 2.38M | f109 = f107 - f106; |
637 | 2.38M | f110 = f90 - f103; |
638 | 2.38M | f111 = MUL_F(FRAC_CONST(-0.6666556584777466), f103); |
639 | 2.38M | f112 = MUL_F(FRAC_CONST(0.9569403357322089), f110); |
640 | 2.38M | f113 = MUL_C(COEF_CONST(1.2472250129866713), f90); |
641 | 2.38M | f114 = f112 - f111; |
642 | 2.38M | f115 = f113 - f112; |
643 | 2.38M | f116 = f102 + f89; |
644 | 2.38M | f117 = MUL_F(FRAC_CONST(-0.4105245275223571), f102); |
645 | 2.38M | f118 = MUL_F(FRAC_CONST(0.8819212643483549), f116); |
646 | 2.38M | f119 = MUL_C(COEF_CONST(1.3533180011743529), f89); |
647 | 2.38M | f120 = f117 + f118; |
648 | 2.38M | f121 = f119 - f118; |
649 | 2.38M | f122 = f87 - f100; |
650 | 2.38M | f123 = MUL_F(FRAC_CONST(-0.1386171691990915), f100); |
651 | 2.38M | f124 = MUL_F(FRAC_CONST(0.7730104533627370), f122); |
652 | 2.38M | f125 = MUL_C(COEF_CONST(1.4074037375263826), f87); |
653 | 2.38M | f126 = f124 - f123; |
654 | 2.38M | f127 = f125 - f124; |
655 | 2.38M | f128 = f65 - f108; |
656 | 2.38M | f129 = f65 + f108; |
657 | 2.38M | f130 = f67 - f114; |
658 | 2.38M | f131 = f67 + f114; |
659 | 2.38M | f132 = f69 - f120; |
660 | 2.38M | f133 = f69 + f120; |
661 | 2.38M | f134 = f71 - f126; |
662 | 2.38M | f135 = f71 + f126; |
663 | 2.38M | f136 = f70 - f127; |
664 | 2.38M | f137 = f70 + f127; |
665 | 2.38M | f138 = f68 - f121; |
666 | 2.38M | f139 = f68 + f121; |
667 | 2.38M | f140 = f66 - f115; |
668 | 2.38M | f141 = f66 + f115; |
669 | 2.38M | f142 = f64 - f109; |
670 | 2.38M | f143 = f64 + f109; |
671 | 2.38M | f144 = f0 + f30; |
672 | 2.38M | f145 = MUL_C(COEF_CONST(1.0478631305325901), f0); |
673 | 2.38M | f146 = MUL_F(FRAC_CONST(-0.9987954562051724), f144); |
674 | 2.38M | f147 = MUL_F(FRAC_CONST(-0.9497277818777548), f30); |
675 | 2.38M | f148 = f145 + f146; |
676 | 2.38M | f149 = f147 - f146; |
677 | 2.38M | f150 = f4 + f26; |
678 | 2.38M | f151 = MUL_C(COEF_CONST(1.2130114330978077), f4); |
679 | 2.38M | f152 = MUL_F(FRAC_CONST(-0.9700312531945440), f150); |
680 | 2.38M | f153 = MUL_F(FRAC_CONST(-0.7270510732912803), f26); |
681 | 2.38M | f154 = f151 + f152; |
682 | 2.38M | f155 = f153 - f152; |
683 | 2.38M | f156 = f8 + f22; |
684 | 2.38M | f157 = MUL_C(COEF_CONST(1.3315443865537255), f8); |
685 | 2.38M | f158 = MUL_F(FRAC_CONST(-0.9039892931234433), f156); |
686 | 2.38M | f159 = MUL_F(FRAC_CONST(-0.4764341996931612), f22); |
687 | 2.38M | f160 = f157 + f158; |
688 | 2.38M | f161 = f159 - f158; |
689 | 2.38M | f162 = f12 + f18; |
690 | 2.38M | f163 = MUL_C(COEF_CONST(1.3989068359730781), f12); |
691 | 2.38M | f164 = MUL_F(FRAC_CONST(-0.8032075314806453), f162); |
692 | 2.38M | f165 = MUL_F(FRAC_CONST(-0.2075082269882124), f18); |
693 | 2.38M | f166 = f163 + f164; |
694 | 2.38M | f167 = f165 - f164; |
695 | 2.38M | f168 = f16 + f14; |
696 | 2.38M | f169 = MUL_C(COEF_CONST(1.4125100802019777), f16); |
697 | 2.38M | f170 = MUL_F(FRAC_CONST(-0.6715589548470187), f168); |
698 | 2.38M | f171 = MUL_F(FRAC_CONST(0.0693921705079402), f14); |
699 | 2.38M | f172 = f169 + f170; |
700 | 2.38M | f173 = f171 - f170; |
701 | 2.38M | f174 = f20 + f10; |
702 | 2.38M | f175 = MUL_C(COEF_CONST(1.3718313541934939), f20); |
703 | 2.38M | f176 = MUL_F(FRAC_CONST(-0.5141027441932219), f174); |
704 | 2.38M | f177 = MUL_F(FRAC_CONST(0.3436258658070501), f10); |
705 | 2.38M | f178 = f175 + f176; |
706 | 2.38M | f179 = f177 - f176; |
707 | 2.38M | f180 = f24 + f6; |
708 | 2.38M | f181 = MUL_C(COEF_CONST(1.2784339185752409), f24); |
709 | 2.38M | f182 = MUL_F(FRAC_CONST(-0.3368898533922200), f180); |
710 | 2.38M | f183 = MUL_F(FRAC_CONST(0.6046542117908008), f6); |
711 | 2.38M | f184 = f181 + f182; |
712 | 2.38M | f185 = f183 - f182; |
713 | 2.38M | f186 = f28 + f2; |
714 | 2.38M | f187 = MUL_C(COEF_CONST(1.1359069844201433), f28); |
715 | 2.38M | f188 = MUL_F(FRAC_CONST(-0.1467304744553624), f186); |
716 | 2.38M | f189 = MUL_F(FRAC_CONST(0.8424460355094185), f2); |
717 | 2.38M | f190 = f187 + f188; |
718 | 2.38M | f191 = f189 - f188; |
719 | 2.38M | f192 = f149 - f173; |
720 | 2.38M | f193 = f149 + f173; |
721 | 2.38M | f194 = f148 - f172; |
722 | 2.38M | f195 = f148 + f172; |
723 | 2.38M | f196 = f155 - f179; |
724 | 2.38M | f197 = f155 + f179; |
725 | 2.38M | f198 = f154 - f178; |
726 | 2.38M | f199 = f154 + f178; |
727 | 2.38M | f200 = f161 - f185; |
728 | 2.38M | f201 = f161 + f185; |
729 | 2.38M | f202 = f160 - f184; |
730 | 2.38M | f203 = f160 + f184; |
731 | 2.38M | f204 = f167 - f191; |
732 | 2.38M | f205 = f167 + f191; |
733 | 2.38M | f206 = f166 - f190; |
734 | 2.38M | f207 = f166 + f190; |
735 | 2.38M | f208 = f192 + f194; |
736 | 2.38M | f209 = MUL_C(COEF_CONST(1.1758756024193588), f192); |
737 | 2.38M | f210 = MUL_F(FRAC_CONST(-0.9807852804032304), f208); |
738 | 2.38M | f211 = MUL_F(FRAC_CONST(-0.7856949583871021), f194); |
739 | 2.38M | f212 = f209 + f210; |
740 | 2.38M | f213 = f211 - f210; |
741 | 2.38M | f214 = f196 + f198; |
742 | 2.38M | f215 = MUL_C(COEF_CONST(1.3870398453221475), f196); |
743 | 2.38M | f216 = MUL_F(FRAC_CONST(-0.5555702330196022), f214); |
744 | 2.38M | f217 = MUL_F(FRAC_CONST(0.2758993792829431), f198); |
745 | 2.38M | f218 = f215 + f216; |
746 | 2.38M | f219 = f217 - f216; |
747 | 2.38M | f220 = f200 + f202; |
748 | 2.38M | f221 = MUL_F(FRAC_CONST(0.7856949583871022), f200); |
749 | 2.38M | f222 = MUL_F(FRAC_CONST(0.1950903220161283), f220); |
750 | 2.38M | f223 = MUL_C(COEF_CONST(1.1758756024193586), f202); |
751 | 2.38M | f224 = f221 + f222; |
752 | 2.38M | f225 = f223 - f222; |
753 | 2.38M | f226 = f204 + f206; |
754 | 2.38M | f227 = MUL_F(FRAC_CONST(-0.2758993792829430), f204); |
755 | 2.38M | f228 = MUL_F(FRAC_CONST(0.8314696123025452), f226); |
756 | 2.38M | f229 = MUL_C(COEF_CONST(1.3870398453221475), f206); |
757 | 2.38M | f230 = f227 + f228; |
758 | 2.38M | f231 = f229 - f228; |
759 | 2.38M | f232 = f193 - f201; |
760 | 2.38M | f233 = f193 + f201; |
761 | 2.38M | f234 = f195 - f203; |
762 | 2.38M | f235 = f195 + f203; |
763 | 2.38M | f236 = f197 - f205; |
764 | 2.38M | f237 = f197 + f205; |
765 | 2.38M | f238 = f199 - f207; |
766 | 2.38M | f239 = f199 + f207; |
767 | 2.38M | f240 = f213 - f225; |
768 | 2.38M | f241 = f213 + f225; |
769 | 2.38M | f242 = f212 - f224; |
770 | 2.38M | f243 = f212 + f224; |
771 | 2.38M | f244 = f219 - f231; |
772 | 2.38M | f245 = f219 + f231; |
773 | 2.38M | f246 = f218 - f230; |
774 | 2.38M | f247 = f218 + f230; |
775 | 2.38M | f248 = f232 + f234; |
776 | 2.38M | f249 = MUL_C(COEF_CONST(1.3065629648763766), f232); |
777 | 2.38M | f250 = MUL_F(FRAC_CONST(-0.9238795325112866), f248); |
778 | 2.38M | f251 = MUL_F(FRAC_CONST(-0.5411961001461967), f234); |
779 | 2.38M | f252 = f249 + f250; |
780 | 2.38M | f253 = f251 - f250; |
781 | 2.38M | f254 = f236 + f238; |
782 | 2.38M | f255 = MUL_F(FRAC_CONST(0.5411961001461969), f236); |
783 | 2.38M | f256 = MUL_F(FRAC_CONST(0.3826834323650898), f254); |
784 | 2.38M | f257 = MUL_C(COEF_CONST(1.3065629648763766), f238); |
785 | 2.38M | f258 = f255 + f256; |
786 | 2.38M | f259 = f257 - f256; |
787 | 2.38M | f260 = f240 + f242; |
788 | 2.38M | f261 = MUL_C(COEF_CONST(1.3065629648763766), f240); |
789 | 2.38M | f262 = MUL_F(FRAC_CONST(-0.9238795325112866), f260); |
790 | 2.38M | f263 = MUL_F(FRAC_CONST(-0.5411961001461967), f242); |
791 | 2.38M | f264 = f261 + f262; |
792 | 2.38M | f265 = f263 - f262; |
793 | 2.38M | f266 = f244 + f246; |
794 | 2.38M | f267 = MUL_F(FRAC_CONST(0.5411961001461969), f244); |
795 | 2.38M | f268 = MUL_F(FRAC_CONST(0.3826834323650898), f266); |
796 | 2.38M | f269 = MUL_C(COEF_CONST(1.3065629648763766), f246); |
797 | 2.38M | f270 = f267 + f268; |
798 | 2.38M | f271 = f269 - f268; |
799 | 2.38M | f272 = f233 - f237; |
800 | 2.38M | f273 = f233 + f237; |
801 | 2.38M | f274 = f235 - f239; |
802 | 2.38M | f275 = f235 + f239; |
803 | 2.38M | f276 = f253 - f259; |
804 | 2.38M | f277 = f253 + f259; |
805 | 2.38M | f278 = f252 - f258; |
806 | 2.38M | f279 = f252 + f258; |
807 | 2.38M | f280 = f241 - f245; |
808 | 2.38M | f281 = f241 + f245; |
809 | 2.38M | f282 = f243 - f247; |
810 | 2.38M | f283 = f243 + f247; |
811 | 2.38M | f284 = f265 - f271; |
812 | 2.38M | f285 = f265 + f271; |
813 | 2.38M | f286 = f264 - f270; |
814 | 2.38M | f287 = f264 + f270; |
815 | 2.38M | f288 = f272 - f274; |
816 | 2.38M | f289 = f272 + f274; |
817 | 2.38M | f290 = MUL_F(FRAC_CONST(0.7071067811865474), f288); |
818 | 2.38M | f291 = MUL_F(FRAC_CONST(0.7071067811865474), f289); |
819 | 2.38M | f292 = f276 - f278; |
820 | 2.38M | f293 = f276 + f278; |
821 | 2.38M | f294 = MUL_F(FRAC_CONST(0.7071067811865474), f292); |
822 | 2.38M | f295 = MUL_F(FRAC_CONST(0.7071067811865474), f293); |
823 | 2.38M | f296 = f280 - f282; |
824 | 2.38M | f297 = f280 + f282; |
825 | 2.38M | f298 = MUL_F(FRAC_CONST(0.7071067811865474), f296); |
826 | 2.38M | f299 = MUL_F(FRAC_CONST(0.7071067811865474), f297); |
827 | 2.38M | f300 = f284 - f286; |
828 | 2.38M | f301 = f284 + f286; |
829 | 2.38M | f302 = MUL_F(FRAC_CONST(0.7071067811865474), f300); |
830 | 2.38M | f303 = MUL_F(FRAC_CONST(0.7071067811865474), f301); |
831 | 2.38M | f304 = f129 - f273; |
832 | 2.38M | f305 = f129 + f273; |
833 | 2.38M | f306 = f131 - f281; |
834 | 2.38M | f307 = f131 + f281; |
835 | 2.38M | f308 = f133 - f285; |
836 | 2.38M | f309 = f133 + f285; |
837 | 2.38M | f310 = f135 - f277; |
838 | 2.38M | f311 = f135 + f277; |
839 | 2.38M | f312 = f137 - f295; |
840 | 2.38M | f313 = f137 + f295; |
841 | 2.38M | f314 = f139 - f303; |
842 | 2.38M | f315 = f139 + f303; |
843 | 2.38M | f316 = f141 - f299; |
844 | 2.38M | f317 = f141 + f299; |
845 | 2.38M | f318 = f143 - f291; |
846 | 2.38M | f319 = f143 + f291; |
847 | 2.38M | f320 = f142 - f290; |
848 | 2.38M | f321 = f142 + f290; |
849 | 2.38M | f322 = f140 - f298; |
850 | 2.38M | f323 = f140 + f298; |
851 | 2.38M | f324 = f138 - f302; |
852 | 2.38M | f325 = f138 + f302; |
853 | 2.38M | f326 = f136 - f294; |
854 | 2.38M | f327 = f136 + f294; |
855 | 2.38M | f328 = f134 - f279; |
856 | 2.38M | f329 = f134 + f279; |
857 | 2.38M | f330 = f132 - f287; |
858 | 2.38M | f331 = f132 + f287; |
859 | 2.38M | f332 = f130 - f283; |
860 | 2.38M | f333 = f130 + f283; |
861 | 2.38M | f334 = f128 - f275; |
862 | 2.38M | f335 = f128 + f275; |
863 | 2.38M | y[31] = MUL_F(FRAC_CONST(0.5001506360206510), f305); |
864 | 2.38M | y[30] = MUL_F(FRAC_CONST(0.5013584524464084), f307); |
865 | 2.38M | y[29] = MUL_F(FRAC_CONST(0.5037887256810443), f309); |
866 | 2.38M | y[28] = MUL_F(FRAC_CONST(0.5074711720725553), f311); |
867 | 2.38M | y[27] = MUL_F(FRAC_CONST(0.5124514794082247), f313); |
868 | 2.38M | y[26] = MUL_F(FRAC_CONST(0.5187927131053328), f315); |
869 | 2.38M | y[25] = MUL_F(FRAC_CONST(0.5265773151542700), f317); |
870 | 2.38M | y[24] = MUL_F(FRAC_CONST(0.5359098169079920), f319); |
871 | 2.38M | y[23] = MUL_F(FRAC_CONST(0.5469204379855088), f321); |
872 | 2.38M | y[22] = MUL_F(FRAC_CONST(0.5597698129470802), f323); |
873 | 2.38M | y[21] = MUL_F(FRAC_CONST(0.5746551840326600), f325); |
874 | 2.38M | y[20] = MUL_F(FRAC_CONST(0.5918185358574165), f327); |
875 | 2.38M | y[19] = MUL_F(FRAC_CONST(0.6115573478825099), f329); |
876 | 2.38M | y[18] = MUL_F(FRAC_CONST(0.6342389366884031), f331); |
877 | 2.38M | y[17] = MUL_F(FRAC_CONST(0.6603198078137061), f333); |
878 | 2.38M | y[16] = MUL_F(FRAC_CONST(0.6903721282002123), f335); |
879 | 2.38M | y[15] = MUL_F(FRAC_CONST(0.7251205223771985), f334); |
880 | 2.38M | y[14] = MUL_F(FRAC_CONST(0.7654941649730891), f332); |
881 | 2.38M | y[13] = MUL_F(FRAC_CONST(0.8127020908144905), f330); |
882 | 2.38M | y[12] = MUL_F(FRAC_CONST(0.8683447152233481), f328); |
883 | 2.38M | y[11] = MUL_F(FRAC_CONST(0.9345835970364075), f326); |
884 | 2.38M | y[10] = MUL_C(COEF_CONST(1.0144082649970547), f324); |
885 | 2.38M | y[9] = MUL_C(COEF_CONST(1.1120716205797176), f322); |
886 | 2.38M | y[8] = MUL_C(COEF_CONST(1.2338327379765710), f320); |
887 | 2.38M | y[7] = MUL_C(COEF_CONST(1.3892939586328277), f318); |
888 | 2.38M | y[6] = MUL_C(COEF_CONST(1.5939722833856311), f316); |
889 | 2.38M | y[5] = MUL_C(COEF_CONST(1.8746759800084078), f314); |
890 | 2.38M | y[4] = MUL_C(COEF_CONST(2.2820500680051619), f312); |
891 | 2.38M | y[3] = MUL_C(COEF_CONST(2.9246284281582162), f310); |
892 | 2.38M | y[2] = MUL_C(COEF_CONST(4.0846110781292477), f308); |
893 | 2.38M | y[1] = MUL_C(COEF_CONST(6.7967507116736332), f306); |
894 | 2.38M | y[0] = MUL_R(REAL_CONST(20.3738781672314530), f304); |
895 | 2.38M | } |
896 | | |
897 | | #ifdef SBR_LOW_POWER |
898 | | |
899 | | void DCT2_16_unscaled(real_t *y, real_t *x) |
900 | | { |
901 | | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; |
902 | | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; |
903 | | real_t f21, f22, f23, f24, f25, f26, f27, f28, f31, f32; |
904 | | real_t f33, f34, f37, f38, f39, f40, f41, f42, f43, f44; |
905 | | real_t f45, f46, f47, f48, f49, f51, f53, f54, f57, f58; |
906 | | real_t f59, f60, f61, f62, f63, f64, f65, f66, f67, f68; |
907 | | real_t f69, f70, f71, f72, f73, f74, f75, f76, f77, f78; |
908 | | real_t f79, f80, f81, f82, f83, f84, f85, f86, f87, f88; |
909 | | real_t f89, f90, f91, f92, f95, f96, f97, f98, f101, f102; |
910 | | real_t f103, f104, f107, f108, f109, f110; |
911 | | |
912 | | f0 = x[0] - x[15]; |
913 | | f1 = x[0] + x[15]; |
914 | | f2 = x[1] - x[14]; |
915 | | f3 = x[1] + x[14]; |
916 | | f4 = x[2] - x[13]; |
917 | | f5 = x[2] + x[13]; |
918 | | f6 = x[3] - x[12]; |
919 | | f7 = x[3] + x[12]; |
920 | | f8 = x[4] - x[11]; |
921 | | f9 = x[4] + x[11]; |
922 | | f10 = x[5] - x[10]; |
923 | | f11 = x[5] + x[10]; |
924 | | f12 = x[6] - x[9]; |
925 | | f13 = x[6] + x[9]; |
926 | | f14 = x[7] - x[8]; |
927 | | f15 = x[7] + x[8]; |
928 | | f16 = f1 - f15; |
929 | | f17 = f1 + f15; |
930 | | f18 = f3 - f13; |
931 | | f19 = f3 + f13; |
932 | | f20 = f5 - f11; |
933 | | f21 = f5 + f11; |
934 | | f22 = f7 - f9; |
935 | | f23 = f7 + f9; |
936 | | f24 = f17 - f23; |
937 | | f25 = f17 + f23; |
938 | | f26 = f19 - f21; |
939 | | f27 = f19 + f21; |
940 | | f28 = f25 - f27; |
941 | | y[0] = f25 + f27; |
942 | | y[8] = MUL_F(f28, FRAC_CONST(0.7071067811865476)); |
943 | | f31 = f24 + f26; |
944 | | f32 = MUL_C(f24, COEF_CONST(1.3065629648763766)); |
945 | | f33 = MUL_F(f31, FRAC_CONST(-0.9238795325112866)); |
946 | | f34 = MUL_F(f26, FRAC_CONST(-0.5411961001461967)); |
947 | | y[12] = f32 + f33; |
948 | | y[4] = f34 - f33; |
949 | | f37 = f16 + f22; |
950 | | f38 = MUL_C(f16, COEF_CONST(1.1758756024193588)); |
951 | | f39 = MUL_F(f37, FRAC_CONST(-0.9807852804032304)); |
952 | | f40 = MUL_F(f22, FRAC_CONST(-0.7856949583871021)); |
953 | | f41 = f38 + f39; |
954 | | f42 = f40 - f39; |
955 | | f43 = f18 + f20; |
956 | | f44 = MUL_C(f18, COEF_CONST(1.3870398453221473)); |
957 | | f45 = MUL_F(f43, FRAC_CONST(-0.8314696123025455)); |
958 | | f46 = MUL_F(f20, FRAC_CONST(-0.2758993792829436)); |
959 | | f47 = f44 + f45; |
960 | | f48 = f46 - f45; |
961 | | f49 = f42 - f48; |
962 | | y[2] = f42 + f48; |
963 | | f51 = MUL_F(f49, FRAC_CONST(0.7071067811865476)); |
964 | | y[14] = f41 - f47; |
965 | | f53 = f41 + f47; |
966 | | f54 = MUL_F(f53, FRAC_CONST(0.7071067811865476)); |
967 | | y[10] = f51 - f54; |
968 | | y[6] = f51 + f54; |
969 | | f57 = f2 - f4; |
970 | | f58 = f2 + f4; |
971 | | f59 = f6 - f8; |
972 | | f60 = f6 + f8; |
973 | | f61 = f10 - f12; |
974 | | f62 = f10 + f12; |
975 | | f63 = MUL_F(f60, FRAC_CONST(0.7071067811865476)); |
976 | | f64 = f0 - f63; |
977 | | f65 = f0 + f63; |
978 | | f66 = f58 + f62; |
979 | | f67 = MUL_C(f58, COEF_CONST(1.3065629648763766)); |
980 | | f68 = MUL_F(f66, FRAC_CONST(-0.9238795325112866)); |
981 | | f69 = MUL_F(f62, FRAC_CONST(-0.5411961001461967)); |
982 | | f70 = f67 + f68; |
983 | | f71 = f69 - f68; |
984 | | f72 = f65 - f71; |
985 | | f73 = f65 + f71; |
986 | | f74 = f64 - f70; |
987 | | f75 = f64 + f70; |
988 | | f76 = MUL_F(f59, FRAC_CONST(0.7071067811865476)); |
989 | | f77 = f14 - f76; |
990 | | f78 = f14 + f76; |
991 | | f79 = f61 + f57; |
992 | | f80 = MUL_C(f61, COEF_CONST(1.3065629648763766)); |
993 | | f81 = MUL_F(f79, FRAC_CONST(-0.9238795325112866)); |
994 | | f82 = MUL_F(f57, FRAC_CONST(-0.5411961001461967)); |
995 | | f83 = f80 + f81; |
996 | | f84 = f82 - f81; |
997 | | f85 = f78 - f84; |
998 | | f86 = f78 + f84; |
999 | | f87 = f77 - f83; |
1000 | | f88 = f77 + f83; |
1001 | | f89 = f86 + f73; |
1002 | | f90 = MUL_F(f86, FRAC_CONST(-0.8971675863426361)); |
1003 | | f91 = MUL_F(f89, FRAC_CONST(0.9951847266721968)); |
1004 | | f92 = MUL_C(f73, COEF_CONST(1.0932018670017576)); |
1005 | | y[1] = f90 + f91; |
1006 | | y[15] = f92 - f91; |
1007 | | f95 = f75 - f88; |
1008 | | f96 = MUL_F(f88, FRAC_CONST(-0.6666556584777466)); |
1009 | | f97 = MUL_F(f95, FRAC_CONST(0.9569403357322089)); |
1010 | | f98 = MUL_C(f75, COEF_CONST(1.2472250129866713)); |
1011 | | y[3] = f97 - f96; |
1012 | | y[13] = f98 - f97; |
1013 | | f101 = f87 + f74; |
1014 | | f102 = MUL_F(f87, FRAC_CONST(-0.4105245275223571)); |
1015 | | f103 = MUL_F(f101, FRAC_CONST(0.8819212643483549)); |
1016 | | f104 = MUL_C(f74, COEF_CONST(1.3533180011743529)); |
1017 | | y[5] = f102 + f103; |
1018 | | y[11] = f104 - f103; |
1019 | | f107 = f72 - f85; |
1020 | | f108 = MUL_F(f85, FRAC_CONST(-0.1386171691990915)); |
1021 | | f109 = MUL_F(f107, FRAC_CONST(0.7730104533627370)); |
1022 | | f110 = MUL_C(f72, COEF_CONST(1.4074037375263826)); |
1023 | | y[7] = f109 - f108; |
1024 | | y[9] = f110 - f109; |
1025 | | } |
1026 | | |
1027 | | void DCT4_16(real_t *y, real_t *x) |
1028 | | { |
1029 | | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; |
1030 | | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; |
1031 | | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; |
1032 | | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; |
1033 | | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; |
1034 | | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; |
1035 | | real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70; |
1036 | | real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80; |
1037 | | real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90; |
1038 | | real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100; |
1039 | | real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110; |
1040 | | real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120; |
1041 | | real_t f121, f122, f123, f124, f125, f126, f127, f128, f130, f132; |
1042 | | real_t f134, f136, f138, f140, f142, f144, f145, f148, f149, f152; |
1043 | | real_t f153, f156, f157; |
1044 | | |
1045 | | f0 = x[0] + x[15]; |
1046 | | f1 = MUL_C(COEF_CONST(1.0478631305325901), x[0]); |
1047 | | f2 = MUL_F(FRAC_CONST(-0.9987954562051724), f0); |
1048 | | f3 = MUL_F(FRAC_CONST(-0.9497277818777548), x[15]); |
1049 | | f4 = f1 + f2; |
1050 | | f5 = f3 - f2; |
1051 | | f6 = x[2] + x[13]; |
1052 | | f7 = MUL_C(COEF_CONST(1.2130114330978077), x[2]); |
1053 | | f8 = MUL_F(FRAC_CONST(-0.9700312531945440), f6); |
1054 | | f9 = MUL_F(FRAC_CONST(-0.7270510732912803), x[13]); |
1055 | | f10 = f7 + f8; |
1056 | | f11 = f9 - f8; |
1057 | | f12 = x[4] + x[11]; |
1058 | | f13 = MUL_C(COEF_CONST(1.3315443865537255), x[4]); |
1059 | | f14 = MUL_F(FRAC_CONST(-0.9039892931234433), f12); |
1060 | | f15 = MUL_F(FRAC_CONST(-0.4764341996931612), x[11]); |
1061 | | f16 = f13 + f14; |
1062 | | f17 = f15 - f14; |
1063 | | f18 = x[6] + x[9]; |
1064 | | f19 = MUL_C(COEF_CONST(1.3989068359730781), x[6]); |
1065 | | f20 = MUL_F(FRAC_CONST(-0.8032075314806453), f18); |
1066 | | f21 = MUL_F(FRAC_CONST(-0.2075082269882124), x[9]); |
1067 | | f22 = f19 + f20; |
1068 | | f23 = f21 - f20; |
1069 | | f24 = x[8] + x[7]; |
1070 | | f25 = MUL_C(COEF_CONST(1.4125100802019777), x[8]); |
1071 | | f26 = MUL_F(FRAC_CONST(-0.6715589548470187), f24); |
1072 | | f27 = MUL_F(FRAC_CONST(0.0693921705079402), x[7]); |
1073 | | f28 = f25 + f26; |
1074 | | f29 = f27 - f26; |
1075 | | f30 = x[10] + x[5]; |
1076 | | f31 = MUL_C(COEF_CONST(1.3718313541934939), x[10]); |
1077 | | f32 = MUL_F(FRAC_CONST(-0.5141027441932219), f30); |
1078 | | f33 = MUL_F(FRAC_CONST(0.3436258658070501), x[5]); |
1079 | | f34 = f31 + f32; |
1080 | | f35 = f33 - f32; |
1081 | | f36 = x[12] + x[3]; |
1082 | | f37 = MUL_C(COEF_CONST(1.2784339185752409), x[12]); |
1083 | | f38 = MUL_F(FRAC_CONST(-0.3368898533922200), f36); |
1084 | | f39 = MUL_F(FRAC_CONST(0.6046542117908008), x[3]); |
1085 | | f40 = f37 + f38; |
1086 | | f41 = f39 - f38; |
1087 | | f42 = x[14] + x[1]; |
1088 | | f43 = MUL_C(COEF_CONST(1.1359069844201433), x[14]); |
1089 | | f44 = MUL_F(FRAC_CONST(-0.1467304744553624), f42); |
1090 | | f45 = MUL_F(FRAC_CONST(0.8424460355094185), x[1]); |
1091 | | f46 = f43 + f44; |
1092 | | f47 = f45 - f44; |
1093 | | f48 = f5 - f29; |
1094 | | f49 = f5 + f29; |
1095 | | f50 = f4 - f28; |
1096 | | f51 = f4 + f28; |
1097 | | f52 = f11 - f35; |
1098 | | f53 = f11 + f35; |
1099 | | f54 = f10 - f34; |
1100 | | f55 = f10 + f34; |
1101 | | f56 = f17 - f41; |
1102 | | f57 = f17 + f41; |
1103 | | f58 = f16 - f40; |
1104 | | f59 = f16 + f40; |
1105 | | f60 = f23 - f47; |
1106 | | f61 = f23 + f47; |
1107 | | f62 = f22 - f46; |
1108 | | f63 = f22 + f46; |
1109 | | f64 = f48 + f50; |
1110 | | f65 = MUL_C(COEF_CONST(1.1758756024193588), f48); |
1111 | | f66 = MUL_F(FRAC_CONST(-0.9807852804032304), f64); |
1112 | | f67 = MUL_F(FRAC_CONST(-0.7856949583871021), f50); |
1113 | | f68 = f65 + f66; |
1114 | | f69 = f67 - f66; |
1115 | | f70 = f52 + f54; |
1116 | | f71 = MUL_C(COEF_CONST(1.3870398453221475), f52); |
1117 | | f72 = MUL_F(FRAC_CONST(-0.5555702330196022), f70); |
1118 | | f73 = MUL_F(FRAC_CONST(0.2758993792829431), f54); |
1119 | | f74 = f71 + f72; |
1120 | | f75 = f73 - f72; |
1121 | | f76 = f56 + f58; |
1122 | | f77 = MUL_F(FRAC_CONST(0.7856949583871022), f56); |
1123 | | f78 = MUL_F(FRAC_CONST(0.1950903220161283), f76); |
1124 | | f79 = MUL_C(COEF_CONST(1.1758756024193586), f58); |
1125 | | f80 = f77 + f78; |
1126 | | f81 = f79 - f78; |
1127 | | f82 = f60 + f62; |
1128 | | f83 = MUL_F(FRAC_CONST(-0.2758993792829430), f60); |
1129 | | f84 = MUL_F(FRAC_CONST(0.8314696123025452), f82); |
1130 | | f85 = MUL_C(COEF_CONST(1.3870398453221475), f62); |
1131 | | f86 = f83 + f84; |
1132 | | f87 = f85 - f84; |
1133 | | f88 = f49 - f57; |
1134 | | f89 = f49 + f57; |
1135 | | f90 = f51 - f59; |
1136 | | f91 = f51 + f59; |
1137 | | f92 = f53 - f61; |
1138 | | f93 = f53 + f61; |
1139 | | f94 = f55 - f63; |
1140 | | f95 = f55 + f63; |
1141 | | f96 = f69 - f81; |
1142 | | f97 = f69 + f81; |
1143 | | f98 = f68 - f80; |
1144 | | f99 = f68 + f80; |
1145 | | f100 = f75 - f87; |
1146 | | f101 = f75 + f87; |
1147 | | f102 = f74 - f86; |
1148 | | f103 = f74 + f86; |
1149 | | f104 = f88 + f90; |
1150 | | f105 = MUL_C(COEF_CONST(1.3065629648763766), f88); |
1151 | | f106 = MUL_F(FRAC_CONST(-0.9238795325112866), f104); |
1152 | | f107 = MUL_F(FRAC_CONST(-0.5411961001461967), f90); |
1153 | | f108 = f105 + f106; |
1154 | | f109 = f107 - f106; |
1155 | | f110 = f92 + f94; |
1156 | | f111 = MUL_F(FRAC_CONST(0.5411961001461969), f92); |
1157 | | f112 = MUL_F(FRAC_CONST(0.3826834323650898), f110); |
1158 | | f113 = MUL_C(COEF_CONST(1.3065629648763766), f94); |
1159 | | f114 = f111 + f112; |
1160 | | f115 = f113 - f112; |
1161 | | f116 = f96 + f98; |
1162 | | f117 = MUL_C(COEF_CONST(1.3065629648763766), f96); |
1163 | | f118 = MUL_F(FRAC_CONST(-0.9238795325112866), f116); |
1164 | | f119 = MUL_F(FRAC_CONST(-0.5411961001461967), f98); |
1165 | | f120 = f117 + f118; |
1166 | | f121 = f119 - f118; |
1167 | | f122 = f100 + f102; |
1168 | | f123 = MUL_F(FRAC_CONST(0.5411961001461969), f100); |
1169 | | f124 = MUL_F(FRAC_CONST(0.3826834323650898), f122); |
1170 | | f125 = MUL_C(COEF_CONST(1.3065629648763766), f102); |
1171 | | f126 = f123 + f124; |
1172 | | f127 = f125 - f124; |
1173 | | f128 = f89 - f93; |
1174 | | y[0] = f89 + f93; |
1175 | | f130 = f91 - f95; |
1176 | | y[15] = f91 + f95; |
1177 | | f132 = f109 - f115; |
1178 | | y[3] = f109 + f115; |
1179 | | f134 = f108 - f114; |
1180 | | y[12] = f108 + f114; |
1181 | | f136 = f97 - f101; |
1182 | | y[1] = f97 + f101; |
1183 | | f138 = f99 - f103; |
1184 | | y[14] = f99 + f103; |
1185 | | f140 = f121 - f127; |
1186 | | y[2] = f121 + f127; |
1187 | | f142 = f120 - f126; |
1188 | | y[13] = f120 + f126; |
1189 | | f144 = f128 - f130; |
1190 | | f145 = f128 + f130; |
1191 | | y[8] = MUL_F(FRAC_CONST(0.7071067811865474), f144); |
1192 | | y[7] = MUL_F(FRAC_CONST(0.7071067811865474), f145); |
1193 | | f148 = f132 - f134; |
1194 | | f149 = f132 + f134; |
1195 | | y[11] = MUL_F(FRAC_CONST(0.7071067811865474), f148); |
1196 | | y[4] = MUL_F(FRAC_CONST(0.7071067811865474), f149); |
1197 | | f152 = f136 - f138; |
1198 | | f153 = f136 + f138; |
1199 | | y[9] = MUL_F(FRAC_CONST(0.7071067811865474), f152); |
1200 | | y[6] = MUL_F(FRAC_CONST(0.7071067811865474), f153); |
1201 | | f156 = f140 - f142; |
1202 | | f157 = f140 + f142; |
1203 | | y[10] = MUL_F(FRAC_CONST(0.7071067811865474), f156); |
1204 | | y[5] = MUL_F(FRAC_CONST(0.7071067811865474), f157); |
1205 | | } |
1206 | | |
1207 | | void DCT3_32_unscaled(real_t *y, real_t *x) |
1208 | | { |
1209 | | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; |
1210 | | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; |
1211 | | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; |
1212 | | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; |
1213 | | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; |
1214 | | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; |
1215 | | real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70; |
1216 | | real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80; |
1217 | | real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90; |
1218 | | real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100; |
1219 | | real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110; |
1220 | | real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120; |
1221 | | real_t f121, f122, f123, f124, f125, f126, f127, f128, f129, f130; |
1222 | | real_t f131, f132, f133, f134, f135, f136, f137, f138, f139, f140; |
1223 | | real_t f141, f142, f143, f144, f145, f146, f147, f148, f149, f150; |
1224 | | real_t f151, f152, f153, f154, f155, f156, f157, f158, f159, f160; |
1225 | | real_t f161, f162, f163, f164, f165, f166, f167, f168, f169, f170; |
1226 | | real_t f171, f172, f173, f174, f175, f176, f177, f178, f179, f180; |
1227 | | real_t f181, f182, f183, f184, f185, f186, f187, f188, f189, f190; |
1228 | | real_t f191, f192, f193, f194, f195, f196, f197, f198, f199, f200; |
1229 | | real_t f201, f202, f203, f204, f205, f206, f207, f208, f209, f210; |
1230 | | real_t f211, f212, f213, f214, f215, f216, f217, f218, f219, f220; |
1231 | | real_t f221, f222, f223, f224, f225, f226, f227, f228, f229, f230; |
1232 | | real_t f231, f232, f233, f234, f235, f236, f237, f238, f239, f240; |
1233 | | real_t f241, f242, f243, f244, f245, f246, f247, f248, f249, f250; |
1234 | | real_t f251, f252, f253, f254, f255, f256, f257, f258, f259, f260; |
1235 | | real_t f261, f262, f263, f264, f265, f266, f267, f268, f269, f270; |
1236 | | real_t f271, f272; |
1237 | | |
1238 | | f0 = MUL_F(x[16], FRAC_CONST(0.7071067811865476)); |
1239 | | f1 = x[0] - f0; |
1240 | | f2 = x[0] + f0; |
1241 | | f3 = x[8] + x[24]; |
1242 | | f4 = MUL_C(x[8], COEF_CONST(1.3065629648763766)); |
1243 | | f5 = MUL_F(f3, FRAC_CONST((-0.9238795325112866))); |
1244 | | f6 = MUL_F(x[24], FRAC_CONST((-0.5411961001461967))); |
1245 | | f7 = f4 + f5; |
1246 | | f8 = f6 - f5; |
1247 | | f9 = f2 - f8; |
1248 | | f10 = f2 + f8; |
1249 | | f11 = f1 - f7; |
1250 | | f12 = f1 + f7; |
1251 | | f13 = x[4] + x[28]; |
1252 | | f14 = MUL_C(x[4], COEF_CONST(1.1758756024193588)); |
1253 | | f15 = MUL_F(f13, FRAC_CONST((-0.9807852804032304))); |
1254 | | f16 = MUL_F(x[28], FRAC_CONST((-0.7856949583871021))); |
1255 | | f17 = f14 + f15; |
1256 | | f18 = f16 - f15; |
1257 | | f19 = x[12] + x[20]; |
1258 | | f20 = MUL_C(x[12], COEF_CONST(1.3870398453221473)); |
1259 | | f21 = MUL_F(f19, FRAC_CONST((-0.8314696123025455))); |
1260 | | f22 = MUL_F(x[20], FRAC_CONST((-0.2758993792829436))); |
1261 | | f23 = f20 + f21; |
1262 | | f24 = f22 - f21; |
1263 | | f25 = f18 - f24; |
1264 | | f26 = f18 + f24; |
1265 | | f27 = MUL_F(f25, FRAC_CONST(0.7071067811865476)); |
1266 | | f28 = f17 - f23; |
1267 | | f29 = f17 + f23; |
1268 | | f30 = MUL_F(f29, FRAC_CONST(0.7071067811865476)); |
1269 | | f31 = f27 - f30; |
1270 | | f32 = f27 + f30; |
1271 | | f33 = f10 - f26; |
1272 | | f34 = f10 + f26; |
1273 | | f35 = f12 - f32; |
1274 | | f36 = f12 + f32; |
1275 | | f37 = f11 - f31; |
1276 | | f38 = f11 + f31; |
1277 | | f39 = f9 - f28; |
1278 | | f40 = f9 + f28; |
1279 | | f41 = x[2] + x[30]; |
1280 | | f42 = MUL_C(x[2], COEF_CONST(1.0932018670017569)); |
1281 | | f43 = MUL_F(f41, FRAC_CONST((-0.9951847266721969))); |
1282 | | f44 = MUL_F(x[30], FRAC_CONST((-0.8971675863426368))); |
1283 | | f45 = f42 + f43; |
1284 | | f46 = f44 - f43; |
1285 | | f47 = x[6] + x[26]; |
1286 | | f48 = MUL_C(x[6], COEF_CONST(1.2472250129866711)); |
1287 | | f49 = MUL_F(f47, FRAC_CONST((-0.9569403357322089))); |
1288 | | f50 = MUL_F(x[26], FRAC_CONST((-0.6666556584777469))); |
1289 | | f51 = f48 + f49; |
1290 | | f52 = f50 - f49; |
1291 | | f53 = x[10] + x[22]; |
1292 | | f54 = MUL_C(x[10], COEF_CONST(1.3533180011743526)); |
1293 | | f55 = MUL_F(f53, FRAC_CONST((-0.8819212643483551))); |
1294 | | f56 = MUL_F(x[22], FRAC_CONST((-0.4105245275223575))); |
1295 | | f57 = f54 + f55; |
1296 | | f58 = f56 - f55; |
1297 | | f59 = x[14] + x[18]; |
1298 | | f60 = MUL_C(x[14], COEF_CONST(1.4074037375263826)); |
1299 | | f61 = MUL_F(f59, FRAC_CONST((-0.7730104533627369))); |
1300 | | f62 = MUL_F(x[18], FRAC_CONST((-0.1386171691990913))); |
1301 | | f63 = f60 + f61; |
1302 | | f64 = f62 - f61; |
1303 | | f65 = f46 - f64; |
1304 | | f66 = f46 + f64; |
1305 | | f67 = f52 - f58; |
1306 | | f68 = f52 + f58; |
1307 | | f69 = f66 - f68; |
1308 | | f70 = f66 + f68; |
1309 | | f71 = MUL_F(f69, FRAC_CONST(0.7071067811865476)); |
1310 | | f72 = f65 + f67; |
1311 | | f73 = MUL_C(f65, COEF_CONST(1.3065629648763766)); |
1312 | | f74 = MUL_F(f72, FRAC_CONST((-0.9238795325112866))); |
1313 | | f75 = MUL_F(f67, FRAC_CONST((-0.5411961001461967))); |
1314 | | f76 = f73 + f74; |
1315 | | f77 = f75 - f74; |
1316 | | f78 = f45 - f63; |
1317 | | f79 = f45 + f63; |
1318 | | f80 = f51 - f57; |
1319 | | f81 = f51 + f57; |
1320 | | f82 = f79 + f81; |
1321 | | f83 = MUL_C(f79, COEF_CONST(1.3065629648763770)); |
1322 | | f84 = MUL_F(f82, FRAC_CONST((-0.3826834323650904))); |
1323 | | f85 = MUL_F(f81, FRAC_CONST(0.5411961001461961)); |
1324 | | f86 = f83 + f84; |
1325 | | f87 = f85 - f84; |
1326 | | f88 = f78 - f80; |
1327 | | f89 = f78 + f80; |
1328 | | f90 = MUL_F(f89, FRAC_CONST(0.7071067811865476)); |
1329 | | f91 = f77 - f87; |
1330 | | f92 = f77 + f87; |
1331 | | f93 = f71 - f90; |
1332 | | f94 = f71 + f90; |
1333 | | f95 = f76 - f86; |
1334 | | f96 = f76 + f86; |
1335 | | f97 = f34 - f70; |
1336 | | f98 = f34 + f70; |
1337 | | f99 = f36 - f92; |
1338 | | f100 = f36 + f92; |
1339 | | f101 = f38 - f91; |
1340 | | f102 = f38 + f91; |
1341 | | f103 = f40 - f94; |
1342 | | f104 = f40 + f94; |
1343 | | f105 = f39 - f93; |
1344 | | f106 = f39 + f93; |
1345 | | f107 = f37 - f96; |
1346 | | f108 = f37 + f96; |
1347 | | f109 = f35 - f95; |
1348 | | f110 = f35 + f95; |
1349 | | f111 = f33 - f88; |
1350 | | f112 = f33 + f88; |
1351 | | f113 = x[1] + x[31]; |
1352 | | f114 = MUL_C(x[1], COEF_CONST(1.0478631305325901)); |
1353 | | f115 = MUL_F(f113, FRAC_CONST((-0.9987954562051724))); |
1354 | | f116 = MUL_F(x[31], FRAC_CONST((-0.9497277818777548))); |
1355 | | f117 = f114 + f115; |
1356 | | f118 = f116 - f115; |
1357 | | f119 = x[5] + x[27]; |
1358 | | f120 = MUL_C(x[5], COEF_CONST(1.2130114330978077)); |
1359 | | f121 = MUL_F(f119, FRAC_CONST((-0.9700312531945440))); |
1360 | | f122 = MUL_F(x[27], FRAC_CONST((-0.7270510732912803))); |
1361 | | f123 = f120 + f121; |
1362 | | f124 = f122 - f121; |
1363 | | f125 = x[9] + x[23]; |
1364 | | f126 = MUL_C(x[9], COEF_CONST(1.3315443865537255)); |
1365 | | f127 = MUL_F(f125, FRAC_CONST((-0.9039892931234433))); |
1366 | | f128 = MUL_F(x[23], FRAC_CONST((-0.4764341996931612))); |
1367 | | f129 = f126 + f127; |
1368 | | f130 = f128 - f127; |
1369 | | f131 = x[13] + x[19]; |
1370 | | f132 = MUL_C(x[13], COEF_CONST(1.3989068359730781)); |
1371 | | f133 = MUL_F(f131, FRAC_CONST((-0.8032075314806453))); |
1372 | | f134 = MUL_F(x[19], FRAC_CONST((-0.2075082269882124))); |
1373 | | f135 = f132 + f133; |
1374 | | f136 = f134 - f133; |
1375 | | f137 = x[17] + x[15]; |
1376 | | f138 = MUL_C(x[17], COEF_CONST(1.4125100802019777)); |
1377 | | f139 = MUL_F(f137, FRAC_CONST((-0.6715589548470187))); |
1378 | | f140 = MUL_F(x[15], FRAC_CONST(0.0693921705079402)); |
1379 | | f141 = f138 + f139; |
1380 | | f142 = f140 - f139; |
1381 | | f143 = x[21] + x[11]; |
1382 | | f144 = MUL_C(x[21], COEF_CONST(1.3718313541934939)); |
1383 | | f145 = MUL_F(f143, FRAC_CONST((-0.5141027441932219))); |
1384 | | f146 = MUL_F(x[11], FRAC_CONST(0.3436258658070501)); |
1385 | | f147 = f144 + f145; |
1386 | | f148 = f146 - f145; |
1387 | | f149 = x[25] + x[7]; |
1388 | | f150 = MUL_C(x[25], COEF_CONST(1.2784339185752409)); |
1389 | | f151 = MUL_F(f149, FRAC_CONST((-0.3368898533922200))); |
1390 | | f152 = MUL_F(x[7], FRAC_CONST(0.6046542117908008)); |
1391 | | f153 = f150 + f151; |
1392 | | f154 = f152 - f151; |
1393 | | f155 = x[29] + x[3]; |
1394 | | f156 = MUL_C(x[29], COEF_CONST(1.1359069844201433)); |
1395 | | f157 = MUL_F(f155, FRAC_CONST((-0.1467304744553624))); |
1396 | | f158 = MUL_F(x[3], FRAC_CONST(0.8424460355094185)); |
1397 | | f159 = f156 + f157; |
1398 | | f160 = f158 - f157; |
1399 | | f161 = f118 - f142; |
1400 | | f162 = f118 + f142; |
1401 | | f163 = f117 - f141; |
1402 | | f164 = f117 + f141; |
1403 | | f165 = f124 - f148; |
1404 | | f166 = f124 + f148; |
1405 | | f167 = f123 - f147; |
1406 | | f168 = f123 + f147; |
1407 | | f169 = f130 - f154; |
1408 | | f170 = f130 + f154; |
1409 | | f171 = f129 - f153; |
1410 | | f172 = f129 + f153; |
1411 | | f173 = f136 - f160; |
1412 | | f174 = f136 + f160; |
1413 | | f175 = f135 - f159; |
1414 | | f176 = f135 + f159; |
1415 | | f177 = f161 + f163; |
1416 | | f178 = MUL_C(f161, COEF_CONST(1.1758756024193588)); |
1417 | | f179 = MUL_F(f177, FRAC_CONST((-0.9807852804032304))); |
1418 | | f180 = MUL_F(f163, FRAC_CONST((-0.7856949583871021))); |
1419 | | f181 = f178 + f179; |
1420 | | f182 = f180 - f179; |
1421 | | f183 = f165 + f167; |
1422 | | f184 = MUL_C(f165, COEF_CONST(1.3870398453221475)); |
1423 | | f185 = MUL_F(f183, FRAC_CONST((-0.5555702330196022))); |
1424 | | f186 = MUL_F(f167, FRAC_CONST(0.2758993792829431)); |
1425 | | f187 = f184 + f185; |
1426 | | f188 = f186 - f185; |
1427 | | f189 = f169 + f171; |
1428 | | f190 = MUL_F(f169, FRAC_CONST(0.7856949583871022)); |
1429 | | f191 = MUL_F(f189, FRAC_CONST(0.1950903220161283)); |
1430 | | f192 = MUL_C(f171, COEF_CONST(1.1758756024193586)); |
1431 | | f193 = f190 + f191; |
1432 | | f194 = f192 - f191; |
1433 | | f195 = f173 + f175; |
1434 | | f196 = MUL_F(f173, FRAC_CONST((-0.2758993792829430))); |
1435 | | f197 = MUL_F(f195, FRAC_CONST(0.8314696123025452)); |
1436 | | f198 = MUL_C(f175, COEF_CONST(1.3870398453221475)); |
1437 | | f199 = f196 + f197; |
1438 | | f200 = f198 - f197; |
1439 | | f201 = f162 - f170; |
1440 | | f202 = f162 + f170; |
1441 | | f203 = f164 - f172; |
1442 | | f204 = f164 + f172; |
1443 | | f205 = f166 - f174; |
1444 | | f206 = f166 + f174; |
1445 | | f207 = f168 - f176; |
1446 | | f208 = f168 + f176; |
1447 | | f209 = f182 - f194; |
1448 | | f210 = f182 + f194; |
1449 | | f211 = f181 - f193; |
1450 | | f212 = f181 + f193; |
1451 | | f213 = f188 - f200; |
1452 | | f214 = f188 + f200; |
1453 | | f215 = f187 - f199; |
1454 | | f216 = f187 + f199; |
1455 | | f217 = f201 + f203; |
1456 | | f218 = MUL_C(f201, COEF_CONST(1.3065629648763766)); |
1457 | | f219 = MUL_F(f217, FRAC_CONST((-0.9238795325112866))); |
1458 | | f220 = MUL_F(f203, FRAC_CONST((-0.5411961001461967))); |
1459 | | f221 = f218 + f219; |
1460 | | f222 = f220 - f219; |
1461 | | f223 = f205 + f207; |
1462 | | f224 = MUL_F(f205, FRAC_CONST(0.5411961001461969)); |
1463 | | f225 = MUL_F(f223, FRAC_CONST(0.3826834323650898)); |
1464 | | f226 = MUL_C(f207, COEF_CONST(1.3065629648763766)); |
1465 | | f227 = f224 + f225; |
1466 | | f228 = f226 - f225; |
1467 | | f229 = f209 + f211; |
1468 | | f230 = MUL_C(f209, COEF_CONST(1.3065629648763766)); |
1469 | | f231 = MUL_F(f229, FRAC_CONST((-0.9238795325112866))); |
1470 | | f232 = MUL_F(f211, FRAC_CONST((-0.5411961001461967))); |
1471 | | f233 = f230 + f231; |
1472 | | f234 = f232 - f231; |
1473 | | f235 = f213 + f215; |
1474 | | f236 = MUL_F(f213, FRAC_CONST(0.5411961001461969)); |
1475 | | f237 = MUL_F(f235, FRAC_CONST(0.3826834323650898)); |
1476 | | f238 = MUL_C(f215, COEF_CONST(1.3065629648763766)); |
1477 | | f239 = f236 + f237; |
1478 | | f240 = f238 - f237; |
1479 | | f241 = f202 - f206; |
1480 | | f242 = f202 + f206; |
1481 | | f243 = f204 - f208; |
1482 | | f244 = f204 + f208; |
1483 | | f245 = f222 - f228; |
1484 | | f246 = f222 + f228; |
1485 | | f247 = f221 - f227; |
1486 | | f248 = f221 + f227; |
1487 | | f249 = f210 - f214; |
1488 | | f250 = f210 + f214; |
1489 | | f251 = f212 - f216; |
1490 | | f252 = f212 + f216; |
1491 | | f253 = f234 - f240; |
1492 | | f254 = f234 + f240; |
1493 | | f255 = f233 - f239; |
1494 | | f256 = f233 + f239; |
1495 | | f257 = f241 - f243; |
1496 | | f258 = f241 + f243; |
1497 | | f259 = MUL_F(f257, FRAC_CONST(0.7071067811865474)); |
1498 | | f260 = MUL_F(f258, FRAC_CONST(0.7071067811865474)); |
1499 | | f261 = f245 - f247; |
1500 | | f262 = f245 + f247; |
1501 | | f263 = MUL_F(f261, FRAC_CONST(0.7071067811865474)); |
1502 | | f264 = MUL_F(f262, FRAC_CONST(0.7071067811865474)); |
1503 | | f265 = f249 - f251; |
1504 | | f266 = f249 + f251; |
1505 | | f267 = MUL_F(f265, FRAC_CONST(0.7071067811865474)); |
1506 | | f268 = MUL_F(f266, FRAC_CONST(0.7071067811865474)); |
1507 | | f269 = f253 - f255; |
1508 | | f270 = f253 + f255; |
1509 | | f271 = MUL_F(f269, FRAC_CONST(0.7071067811865474)); |
1510 | | f272 = MUL_F(f270, FRAC_CONST(0.7071067811865474)); |
1511 | | y[31] = f98 - f242; |
1512 | | y[0] = f98 + f242; |
1513 | | y[30] = f100 - f250; |
1514 | | y[1] = f100 + f250; |
1515 | | y[29] = f102 - f254; |
1516 | | y[2] = f102 + f254; |
1517 | | y[28] = f104 - f246; |
1518 | | y[3] = f104 + f246; |
1519 | | y[27] = f106 - f264; |
1520 | | y[4] = f106 + f264; |
1521 | | y[26] = f108 - f272; |
1522 | | y[5] = f108 + f272; |
1523 | | y[25] = f110 - f268; |
1524 | | y[6] = f110 + f268; |
1525 | | y[24] = f112 - f260; |
1526 | | y[7] = f112 + f260; |
1527 | | y[23] = f111 - f259; |
1528 | | y[8] = f111 + f259; |
1529 | | y[22] = f109 - f267; |
1530 | | y[9] = f109 + f267; |
1531 | | y[21] = f107 - f271; |
1532 | | y[10] = f107 + f271; |
1533 | | y[20] = f105 - f263; |
1534 | | y[11] = f105 + f263; |
1535 | | y[19] = f103 - f248; |
1536 | | y[12] = f103 + f248; |
1537 | | y[18] = f101 - f256; |
1538 | | y[13] = f101 + f256; |
1539 | | y[17] = f99 - f252; |
1540 | | y[14] = f99 + f252; |
1541 | | y[16] = f97 - f244; |
1542 | | y[15] = f97 + f244; |
1543 | | } |
1544 | | |
1545 | | void DCT2_32_unscaled(real_t *y, real_t *x) |
1546 | | { |
1547 | | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; |
1548 | | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; |
1549 | | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; |
1550 | | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; |
1551 | | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; |
1552 | | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; |
1553 | | real_t f63, f64, f65, f66, f69, f70, f71, f72, f73, f74; |
1554 | | real_t f75, f76, f77, f78, f79, f80, f81, f83, f85, f86; |
1555 | | real_t f89, f90, f91, f92, f93, f94, f95, f96, f97, f98; |
1556 | | real_t f99, f100, f101, f102, f103, f104, f105, f106, f107, f108; |
1557 | | real_t f109, f110, f111, f112, f113, f114, f115, f116, f117, f118; |
1558 | | real_t f119, f120, f121, f122, f123, f124, f127, f128, f129, f130; |
1559 | | real_t f133, f134, f135, f136, f139, f140, f141, f142, f145, f146; |
1560 | | real_t f147, f148, f149, f150, f151, f152, f153, f154, f155, f156; |
1561 | | real_t f157, f158, f159, f160, f161, f162, f163, f164, f165, f166; |
1562 | | real_t f167, f168, f169, f170, f171, f172, f173, f174, f175, f176; |
1563 | | real_t f177, f178, f179, f180, f181, f182, f183, f184, f185, f186; |
1564 | | real_t f187, f188, f189, f190, f191, f192, f193, f194, f195, f196; |
1565 | | real_t f197, f198, f199, f200, f201, f202, f203, f204, f205, f206; |
1566 | | real_t f207, f208, f209, f210, f211, f212, f213, f214, f215, f216; |
1567 | | real_t f217, f218, f219, f220, f221, f222, f223, f224, f225, f226; |
1568 | | real_t f227, f228, f229, f230, f231, f232, f233, f234, f235, f236; |
1569 | | real_t f237, f238, f239, f240, f241, f242, f243, f244, f247, f248; |
1570 | | real_t f249, f250, f253, f254, f255, f256, f259, f260, f261, f262; |
1571 | | real_t f265, f266, f267, f268, f271, f272, f273, f274, f277, f278; |
1572 | | real_t f279, f280, f283, f284, f285, f286; |
1573 | | |
1574 | | f0 = x[0] - x[31]; |
1575 | | f1 = x[0] + x[31]; |
1576 | | f2 = x[1] - x[30]; |
1577 | | f3 = x[1] + x[30]; |
1578 | | f4 = x[2] - x[29]; |
1579 | | f5 = x[2] + x[29]; |
1580 | | f6 = x[3] - x[28]; |
1581 | | f7 = x[3] + x[28]; |
1582 | | f8 = x[4] - x[27]; |
1583 | | f9 = x[4] + x[27]; |
1584 | | f10 = x[5] - x[26]; |
1585 | | f11 = x[5] + x[26]; |
1586 | | f12 = x[6] - x[25]; |
1587 | | f13 = x[6] + x[25]; |
1588 | | f14 = x[7] - x[24]; |
1589 | | f15 = x[7] + x[24]; |
1590 | | f16 = x[8] - x[23]; |
1591 | | f17 = x[8] + x[23]; |
1592 | | f18 = x[9] - x[22]; |
1593 | | f19 = x[9] + x[22]; |
1594 | | f20 = x[10] - x[21]; |
1595 | | f21 = x[10] + x[21]; |
1596 | | f22 = x[11] - x[20]; |
1597 | | f23 = x[11] + x[20]; |
1598 | | f24 = x[12] - x[19]; |
1599 | | f25 = x[12] + x[19]; |
1600 | | f26 = x[13] - x[18]; |
1601 | | f27 = x[13] + x[18]; |
1602 | | f28 = x[14] - x[17]; |
1603 | | f29 = x[14] + x[17]; |
1604 | | f30 = x[15] - x[16]; |
1605 | | f31 = x[15] + x[16]; |
1606 | | f32 = f1 - f31; |
1607 | | f33 = f1 + f31; |
1608 | | f34 = f3 - f29; |
1609 | | f35 = f3 + f29; |
1610 | | f36 = f5 - f27; |
1611 | | f37 = f5 + f27; |
1612 | | f38 = f7 - f25; |
1613 | | f39 = f7 + f25; |
1614 | | f40 = f9 - f23; |
1615 | | f41 = f9 + f23; |
1616 | | f42 = f11 - f21; |
1617 | | f43 = f11 + f21; |
1618 | | f44 = f13 - f19; |
1619 | | f45 = f13 + f19; |
1620 | | f46 = f15 - f17; |
1621 | | f47 = f15 + f17; |
1622 | | f48 = f33 - f47; |
1623 | | f49 = f33 + f47; |
1624 | | f50 = f35 - f45; |
1625 | | f51 = f35 + f45; |
1626 | | f52 = f37 - f43; |
1627 | | f53 = f37 + f43; |
1628 | | f54 = f39 - f41; |
1629 | | f55 = f39 + f41; |
1630 | | f56 = f49 - f55; |
1631 | | f57 = f49 + f55; |
1632 | | f58 = f51 - f53; |
1633 | | f59 = f51 + f53; |
1634 | | f60 = f57 - f59; |
1635 | | y[0] = f57 + f59; |
1636 | | y[16] = MUL_F(FRAC_CONST(0.7071067811865476), f60); |
1637 | | f63 = f56 + f58; |
1638 | | f64 = MUL_C(COEF_CONST(1.3065629648763766), f56); |
1639 | | f65 = MUL_F(FRAC_CONST(-0.9238795325112866), f63); |
1640 | | f66 = MUL_F(FRAC_CONST(-0.5411961001461967), f58); |
1641 | | y[24] = f64 + f65; |
1642 | | y[8] = f66 - f65; |
1643 | | f69 = f48 + f54; |
1644 | | f70 = MUL_C(COEF_CONST(1.1758756024193588), f48); |
1645 | | f71 = MUL_F(FRAC_CONST(-0.9807852804032304), f69); |
1646 | | f72 = MUL_F(FRAC_CONST(-0.7856949583871021), f54); |
1647 | | f73 = f70 + f71; |
1648 | | f74 = f72 - f71; |
1649 | | f75 = f50 + f52; |
1650 | | f76 = MUL_C(COEF_CONST(1.3870398453221473), f50); |
1651 | | f77 = MUL_F(FRAC_CONST(-0.8314696123025455), f75); |
1652 | | f78 = MUL_F(FRAC_CONST(-0.2758993792829436), f52); |
1653 | | f79 = f76 + f77; |
1654 | | f80 = f78 - f77; |
1655 | | f81 = f74 - f80; |
1656 | | y[4] = f74 + f80; |
1657 | | f83 = MUL_F(FRAC_CONST(0.7071067811865476), f81); |
1658 | | y[28] = f73 - f79; |
1659 | | f85 = f73 + f79; |
1660 | | f86 = MUL_F(FRAC_CONST(0.7071067811865476), f85); |
1661 | | y[20] = f83 - f86; |
1662 | | y[12] = f83 + f86; |
1663 | | f89 = f34 - f36; |
1664 | | f90 = f34 + f36; |
1665 | | f91 = f38 - f40; |
1666 | | f92 = f38 + f40; |
1667 | | f93 = f42 - f44; |
1668 | | f94 = f42 + f44; |
1669 | | f95 = MUL_F(FRAC_CONST(0.7071067811865476), f92); |
1670 | | f96 = f32 - f95; |
1671 | | f97 = f32 + f95; |
1672 | | f98 = f90 + f94; |
1673 | | f99 = MUL_C(COEF_CONST(1.3065629648763766), f90); |
1674 | | f100 = MUL_F(FRAC_CONST(-0.9238795325112866), f98); |
1675 | | f101 = MUL_F(FRAC_CONST(-0.5411961001461967), f94); |
1676 | | f102 = f99 + f100; |
1677 | | f103 = f101 - f100; |
1678 | | f104 = f97 - f103; |
1679 | | f105 = f97 + f103; |
1680 | | f106 = f96 - f102; |
1681 | | f107 = f96 + f102; |
1682 | | f108 = MUL_F(FRAC_CONST(0.7071067811865476), f91); |
1683 | | f109 = f46 - f108; |
1684 | | f110 = f46 + f108; |
1685 | | f111 = f93 + f89; |
1686 | | f112 = MUL_C(COEF_CONST(1.3065629648763766), f93); |
1687 | | f113 = MUL_F(FRAC_CONST(-0.9238795325112866), f111); |
1688 | | f114 = MUL_F(FRAC_CONST(-0.5411961001461967), f89); |
1689 | | f115 = f112 + f113; |
1690 | | f116 = f114 - f113; |
1691 | | f117 = f110 - f116; |
1692 | | f118 = f110 + f116; |
1693 | | f119 = f109 - f115; |
1694 | | f120 = f109 + f115; |
1695 | | f121 = f118 + f105; |
1696 | | f122 = MUL_F(FRAC_CONST(-0.8971675863426361), f118); |
1697 | | f123 = MUL_F(FRAC_CONST(0.9951847266721968), f121); |
1698 | | f124 = MUL_C(COEF_CONST(1.0932018670017576), f105); |
1699 | | y[2] = f122 + f123; |
1700 | | y[30] = f124 - f123; |
1701 | | f127 = f107 - f120; |
1702 | | f128 = MUL_F(FRAC_CONST(-0.6666556584777466), f120); |
1703 | | f129 = MUL_F(FRAC_CONST(0.9569403357322089), f127); |
1704 | | f130 = MUL_C(COEF_CONST(1.2472250129866713), f107); |
1705 | | y[6] = f129 - f128; |
1706 | | y[26] = f130 - f129; |
1707 | | f133 = f119 + f106; |
1708 | | f134 = MUL_F(FRAC_CONST(-0.4105245275223571), f119); |
1709 | | f135 = MUL_F(FRAC_CONST(0.8819212643483549), f133); |
1710 | | f136 = MUL_C(COEF_CONST(1.3533180011743529), f106); |
1711 | | y[10] = f134 + f135; |
1712 | | y[22] = f136 - f135; |
1713 | | f139 = f104 - f117; |
1714 | | f140 = MUL_F(FRAC_CONST(-0.1386171691990915), f117); |
1715 | | f141 = MUL_F(FRAC_CONST(0.7730104533627370), f139); |
1716 | | f142 = MUL_C(COEF_CONST(1.4074037375263826), f104); |
1717 | | y[14] = f141 - f140; |
1718 | | y[18] = f142 - f141; |
1719 | | f145 = f2 - f4; |
1720 | | f146 = f2 + f4; |
1721 | | f147 = f6 - f8; |
1722 | | f148 = f6 + f8; |
1723 | | f149 = f10 - f12; |
1724 | | f150 = f10 + f12; |
1725 | | f151 = f14 - f16; |
1726 | | f152 = f14 + f16; |
1727 | | f153 = f18 - f20; |
1728 | | f154 = f18 + f20; |
1729 | | f155 = f22 - f24; |
1730 | | f156 = f22 + f24; |
1731 | | f157 = f26 - f28; |
1732 | | f158 = f26 + f28; |
1733 | | f159 = MUL_F(FRAC_CONST(0.7071067811865476), f152); |
1734 | | f160 = f0 - f159; |
1735 | | f161 = f0 + f159; |
1736 | | f162 = f148 + f156; |
1737 | | f163 = MUL_C(COEF_CONST(1.3065629648763766), f148); |
1738 | | f164 = MUL_F(FRAC_CONST(-0.9238795325112866), f162); |
1739 | | f165 = MUL_F(FRAC_CONST(-0.5411961001461967), f156); |
1740 | | f166 = f163 + f164; |
1741 | | f167 = f165 - f164; |
1742 | | f168 = f161 - f167; |
1743 | | f169 = f161 + f167; |
1744 | | f170 = f160 - f166; |
1745 | | f171 = f160 + f166; |
1746 | | f172 = f146 + f158; |
1747 | | f173 = MUL_C(COEF_CONST(1.1758756024193588), f146); |
1748 | | f174 = MUL_F(FRAC_CONST(-0.9807852804032304), f172); |
1749 | | f175 = MUL_F(FRAC_CONST(-0.7856949583871021), f158); |
1750 | | f176 = f173 + f174; |
1751 | | f177 = f175 - f174; |
1752 | | f178 = f150 + f154; |
1753 | | f179 = MUL_C(COEF_CONST(1.3870398453221473), f150); |
1754 | | f180 = MUL_F(FRAC_CONST(-0.8314696123025455), f178); |
1755 | | f181 = MUL_F(FRAC_CONST(-0.2758993792829436), f154); |
1756 | | f182 = f179 + f180; |
1757 | | f183 = f181 - f180; |
1758 | | f184 = f177 - f183; |
1759 | | f185 = f177 + f183; |
1760 | | f186 = MUL_F(FRAC_CONST(0.7071067811865476), f184); |
1761 | | f187 = f176 - f182; |
1762 | | f188 = f176 + f182; |
1763 | | f189 = MUL_F(FRAC_CONST(0.7071067811865476), f188); |
1764 | | f190 = f186 - f189; |
1765 | | f191 = f186 + f189; |
1766 | | f192 = f169 - f185; |
1767 | | f193 = f169 + f185; |
1768 | | f194 = f171 - f191; |
1769 | | f195 = f171 + f191; |
1770 | | f196 = f170 - f190; |
1771 | | f197 = f170 + f190; |
1772 | | f198 = f168 - f187; |
1773 | | f199 = f168 + f187; |
1774 | | f200 = MUL_F(FRAC_CONST(0.7071067811865476), f151); |
1775 | | f201 = f30 - f200; |
1776 | | f202 = f30 + f200; |
1777 | | f203 = f155 + f147; |
1778 | | f204 = MUL_C(COEF_CONST(1.3065629648763766), f155); |
1779 | | f205 = MUL_F(FRAC_CONST(-0.9238795325112866), f203); |
1780 | | f206 = MUL_F(FRAC_CONST(-0.5411961001461967), f147); |
1781 | | f207 = f204 + f205; |
1782 | | f208 = f206 - f205; |
1783 | | f209 = f202 - f208; |
1784 | | f210 = f202 + f208; |
1785 | | f211 = f201 - f207; |
1786 | | f212 = f201 + f207; |
1787 | | f213 = f157 + f145; |
1788 | | f214 = MUL_C(COEF_CONST(1.1758756024193588), f157); |
1789 | | f215 = MUL_F(FRAC_CONST(-0.9807852804032304), f213); |
1790 | | f216 = MUL_F(FRAC_CONST(-0.7856949583871021), f145); |
1791 | | f217 = f214 + f215; |
1792 | | f218 = f216 - f215; |
1793 | | f219 = f153 + f149; |
1794 | | f220 = MUL_C(COEF_CONST(1.3870398453221473), f153); |
1795 | | f221 = MUL_F(FRAC_CONST(-0.8314696123025455), f219); |
1796 | | f222 = MUL_F(FRAC_CONST(-0.2758993792829436), f149); |
1797 | | f223 = f220 + f221; |
1798 | | f224 = f222 - f221; |
1799 | | f225 = f218 - f224; |
1800 | | f226 = f218 + f224; |
1801 | | f227 = MUL_F(FRAC_CONST(0.7071067811865476), f225); |
1802 | | f228 = f217 - f223; |
1803 | | f229 = f217 + f223; |
1804 | | f230 = MUL_F(FRAC_CONST(0.7071067811865476), f229); |
1805 | | f231 = f227 - f230; |
1806 | | f232 = f227 + f230; |
1807 | | f233 = f210 - f226; |
1808 | | f234 = f210 + f226; |
1809 | | f235 = f212 - f232; |
1810 | | f236 = f212 + f232; |
1811 | | f237 = f211 - f231; |
1812 | | f238 = f211 + f231; |
1813 | | f239 = f209 - f228; |
1814 | | f240 = f209 + f228; |
1815 | | f241 = f234 + f193; |
1816 | | f242 = MUL_F(FRAC_CONST(-0.9497277818777543), f234); |
1817 | | f243 = MUL_F(FRAC_CONST(0.9987954562051724), f241); |
1818 | | f244 = MUL_C(COEF_CONST(1.0478631305325905), f193); |
1819 | | y[1] = f242 + f243; |
1820 | | y[31] = f244 - f243; |
1821 | | f247 = f195 - f236; |
1822 | | f248 = MUL_F(FRAC_CONST(-0.8424460355094192), f236); |
1823 | | f249 = MUL_F(FRAC_CONST(0.9891765099647810), f247); |
1824 | | f250 = MUL_C(COEF_CONST(1.1359069844201428), f195); |
1825 | | y[3] = f249 - f248; |
1826 | | y[29] = f250 - f249; |
1827 | | f253 = f238 + f197; |
1828 | | f254 = MUL_F(FRAC_CONST(-0.7270510732912801), f238); |
1829 | | f255 = MUL_F(FRAC_CONST(0.9700312531945440), f253); |
1830 | | f256 = MUL_C(COEF_CONST(1.2130114330978079), f197); |
1831 | | y[5] = f254 + f255; |
1832 | | y[27] = f256 - f255; |
1833 | | f259 = f199 - f240; |
1834 | | f260 = MUL_F(FRAC_CONST(-0.6046542117908007), f240); |
1835 | | f261 = MUL_F(FRAC_CONST(0.9415440651830208), f259); |
1836 | | f262 = MUL_C(COEF_CONST(1.2784339185752409), f199); |
1837 | | y[7] = f261 - f260; |
1838 | | y[25] = f262 - f261; |
1839 | | f265 = f239 + f198; |
1840 | | f266 = MUL_F(FRAC_CONST(-0.4764341996931611), f239); |
1841 | | f267 = MUL_F(FRAC_CONST(0.9039892931234433), f265); |
1842 | | f268 = MUL_C(COEF_CONST(1.3315443865537255), f198); |
1843 | | y[9] = f266 + f267; |
1844 | | y[23] = f268 - f267; |
1845 | | f271 = f196 - f237; |
1846 | | f272 = MUL_F(FRAC_CONST(-0.3436258658070505), f237); |
1847 | | f273 = MUL_F(FRAC_CONST(0.8577286100002721), f271); |
1848 | | f274 = MUL_C(COEF_CONST(1.3718313541934939), f196); |
1849 | | y[11] = f273 - f272; |
1850 | | y[21] = f274 - f273; |
1851 | | f277 = f235 + f194; |
1852 | | f278 = MUL_F(FRAC_CONST(-0.2075082269882114), f235); |
1853 | | f279 = MUL_F(FRAC_CONST(0.8032075314806448), f277); |
1854 | | f280 = MUL_C(COEF_CONST(1.3989068359730783), f194); |
1855 | | y[13] = f278 + f279; |
1856 | | y[19] = f280 - f279; |
1857 | | f283 = f192 - f233; |
1858 | | f284 = MUL_F(FRAC_CONST(-0.0693921705079408), f233); |
1859 | | f285 = MUL_F(FRAC_CONST(0.7409511253549591), f283); |
1860 | | f286 = MUL_C(COEF_CONST(1.4125100802019774), f192); |
1861 | | y[15] = f285 - f284; |
1862 | | y[17] = f286 - f285; |
1863 | | } |
1864 | | |
1865 | | #else |
1866 | | |
1867 | | |
1868 | 765M | #define n 32 |
1869 | | #define log2n 5 |
1870 | | |
1871 | | // w_array_real[i] = cos(2*M_PI*i/32) |
1872 | | static const real_t w_array_real[] = { |
1873 | | FRAC_CONST(1.000000000000000), FRAC_CONST(0.980785279337272), |
1874 | | FRAC_CONST(0.923879528329380), FRAC_CONST(0.831469603195765), |
1875 | | FRAC_CONST(0.707106765732237), FRAC_CONST(0.555570210304169), |
1876 | | FRAC_CONST(0.382683402077046), FRAC_CONST(0.195090284503576), |
1877 | | FRAC_CONST(0.000000000000000), FRAC_CONST(-0.195090370246552), |
1878 | | FRAC_CONST(-0.382683482845162), FRAC_CONST(-0.555570282993553), |
1879 | | FRAC_CONST(-0.707106827549476), FRAC_CONST(-0.831469651765257), |
1880 | | FRAC_CONST(-0.923879561784627), FRAC_CONST(-0.980785296392607) |
1881 | | }; |
1882 | | |
1883 | | // w_array_imag[i] = sin(-2*M_PI*i/32) |
1884 | | static const real_t w_array_imag[] = { |
1885 | | FRAC_CONST(0.000000000000000), FRAC_CONST(-0.195090327375064), |
1886 | | FRAC_CONST(-0.382683442461104), FRAC_CONST(-0.555570246648862), |
1887 | | FRAC_CONST(-0.707106796640858), FRAC_CONST(-0.831469627480512), |
1888 | | FRAC_CONST(-0.923879545057005), FRAC_CONST(-0.980785287864940), |
1889 | | FRAC_CONST(-1.000000000000000), FRAC_CONST(-0.980785270809601), |
1890 | | FRAC_CONST(-0.923879511601754), FRAC_CONST(-0.831469578911016), |
1891 | | FRAC_CONST(-0.707106734823616), FRAC_CONST(-0.555570173959476), |
1892 | | FRAC_CONST(-0.382683361692986), FRAC_CONST(-0.195090241632088) |
1893 | | }; |
1894 | | |
1895 | | // FFT decimation in frequency |
1896 | | // 4*16*2+16=128+16=144 multiplications |
1897 | | // 6*16*2+10*8+4*16*2=192+80+128=400 additions |
1898 | | static void fft_dif(real_t * Real, real_t * Imag) |
1899 | 13.9M | { |
1900 | 13.9M | real_t w_real, w_imag; // For faster access |
1901 | 13.9M | real_t point1_real, point1_imag, point2_real, point2_imag; // For faster access |
1902 | 13.9M | uint32_t j, i, i2, w_index; // Counters |
1903 | | |
1904 | | // First 2 stages of 32 point FFT decimation in frequency |
1905 | | // 4*16*2=64*2=128 multiplications |
1906 | | // 6*16*2=96*2=192 additions |
1907 | | // Stage 1 of 32 point FFT decimation in frequency |
1908 | 236M | for (i = 0; i < 16; i++) |
1909 | 222M | { |
1910 | 222M | point1_real = Real[i]; |
1911 | 222M | point1_imag = Imag[i]; |
1912 | 222M | i2 = i+16; |
1913 | 222M | point2_real = Real[i2]; |
1914 | 222M | point2_imag = Imag[i2]; |
1915 | | |
1916 | 222M | w_real = w_array_real[i]; |
1917 | 222M | w_imag = w_array_imag[i]; |
1918 | | |
1919 | | // temp1 = x[i] - x[i2] |
1920 | 222M | point1_real -= point2_real; |
1921 | 222M | point1_imag -= point2_imag; |
1922 | | |
1923 | | // x[i1] = x[i] + x[i2] |
1924 | 222M | Real[i] += point2_real; |
1925 | 222M | Imag[i] += point2_imag; |
1926 | | |
1927 | | // x[i2] = (x[i] - x[i2]) * w |
1928 | 222M | Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag)); |
1929 | 222M | Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real)); |
1930 | 222M | } |
1931 | | // Stage 2 of 32 point FFT decimation in frequency |
1932 | 125M | for (j = 0, w_index = 0; j < 8; j++, w_index += 2) |
1933 | 111M | { |
1934 | 111M | w_real = w_array_real[w_index]; |
1935 | 111M | w_imag = w_array_imag[w_index]; |
1936 | | |
1937 | 111M | i = j; |
1938 | 111M | point1_real = Real[i]; |
1939 | 111M | point1_imag = Imag[i]; |
1940 | 111M | i2 = i+8; |
1941 | 111M | point2_real = Real[i2]; |
1942 | 111M | point2_imag = Imag[i2]; |
1943 | | |
1944 | | // temp1 = x[i] - x[i2] |
1945 | 111M | point1_real -= point2_real; |
1946 | 111M | point1_imag -= point2_imag; |
1947 | | |
1948 | | // x[i1] = x[i] + x[i2] |
1949 | 111M | Real[i] += point2_real; |
1950 | 111M | Imag[i] += point2_imag; |
1951 | | |
1952 | | // x[i2] = (x[i] - x[i2]) * w |
1953 | 111M | Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag)); |
1954 | 111M | Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real)); |
1955 | | |
1956 | 111M | i = j+16; |
1957 | 111M | point1_real = Real[i]; |
1958 | 111M | point1_imag = Imag[i]; |
1959 | 111M | i2 = i+8; |
1960 | 111M | point2_real = Real[i2]; |
1961 | 111M | point2_imag = Imag[i2]; |
1962 | | |
1963 | | // temp1 = x[i] - x[i2] |
1964 | 111M | point1_real -= point2_real; |
1965 | 111M | point1_imag -= point2_imag; |
1966 | | |
1967 | | // x[i1] = x[i] + x[i2] |
1968 | 111M | Real[i] += point2_real; |
1969 | 111M | Imag[i] += point2_imag; |
1970 | | |
1971 | | // x[i2] = (x[i] - x[i2]) * w |
1972 | 111M | Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag)); |
1973 | 111M | Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real)); |
1974 | 111M | } |
1975 | | |
1976 | | // Stage 3 of 32 point FFT decimation in frequency |
1977 | | // 2*4*2=16 multiplications |
1978 | | // 4*4*2+6*4*2=10*8=80 additions |
1979 | 69.5M | for (i = 0; i < n; i += 8) |
1980 | 55.6M | { |
1981 | 55.6M | i2 = i+4; |
1982 | 55.6M | point1_real = Real[i]; |
1983 | 55.6M | point1_imag = Imag[i]; |
1984 | | |
1985 | 55.6M | point2_real = Real[i2]; |
1986 | 55.6M | point2_imag = Imag[i2]; |
1987 | | |
1988 | | // out[i1] = point1 + point2 |
1989 | 55.6M | Real[i] += point2_real; |
1990 | 55.6M | Imag[i] += point2_imag; |
1991 | | |
1992 | | // out[i2] = point1 - point2 |
1993 | 55.6M | Real[i2] = point1_real - point2_real; |
1994 | 55.6M | Imag[i2] = point1_imag - point2_imag; |
1995 | 55.6M | } |
1996 | 13.9M | w_real = w_array_real[4]; // = sqrt(2)/2 |
1997 | | // w_imag = -w_real; // = w_array_imag[4]; // = -sqrt(2)/2 |
1998 | 69.5M | for (i = 1; i < n; i += 8) |
1999 | 55.6M | { |
2000 | 55.6M | i2 = i+4; |
2001 | 55.6M | point1_real = Real[i]; |
2002 | 55.6M | point1_imag = Imag[i]; |
2003 | | |
2004 | 55.6M | point2_real = Real[i2]; |
2005 | 55.6M | point2_imag = Imag[i2]; |
2006 | | |
2007 | | // temp1 = x[i] - x[i2] |
2008 | 55.6M | point1_real -= point2_real; |
2009 | 55.6M | point1_imag -= point2_imag; |
2010 | | |
2011 | | // x[i1] = x[i] + x[i2] |
2012 | 55.6M | Real[i] += point2_real; |
2013 | 55.6M | Imag[i] += point2_imag; |
2014 | | |
2015 | | // x[i2] = (x[i] - x[i2]) * w |
2016 | 55.6M | Real[i2] = MUL_F(point1_real+point1_imag, w_real); |
2017 | 55.6M | Imag[i2] = MUL_F(point1_imag-point1_real, w_real); |
2018 | 55.6M | } |
2019 | 69.5M | for (i = 2; i < n; i += 8) |
2020 | 55.6M | { |
2021 | 55.6M | i2 = i+4; |
2022 | 55.6M | point1_real = Real[i]; |
2023 | 55.6M | point1_imag = Imag[i]; |
2024 | | |
2025 | 55.6M | point2_real = Real[i2]; |
2026 | 55.6M | point2_imag = Imag[i2]; |
2027 | | |
2028 | | // x[i] = x[i] + x[i2] |
2029 | 55.6M | Real[i] += point2_real; |
2030 | 55.6M | Imag[i] += point2_imag; |
2031 | | |
2032 | | // x[i2] = (x[i] - x[i2]) * (-i) |
2033 | 55.6M | Real[i2] = point1_imag - point2_imag; |
2034 | 55.6M | Imag[i2] = point2_real - point1_real; |
2035 | 55.6M | } |
2036 | 13.9M | w_real = w_array_real[12]; // = -sqrt(2)/2 |
2037 | | // w_imag = w_real; // = w_array_imag[12]; // = -sqrt(2)/2 |
2038 | 69.5M | for (i = 3; i < n; i += 8) |
2039 | 55.6M | { |
2040 | 55.6M | i2 = i+4; |
2041 | 55.6M | point1_real = Real[i]; |
2042 | 55.6M | point1_imag = Imag[i]; |
2043 | | |
2044 | 55.6M | point2_real = Real[i2]; |
2045 | 55.6M | point2_imag = Imag[i2]; |
2046 | | |
2047 | | // temp1 = x[i] - x[i2] |
2048 | 55.6M | point1_real -= point2_real; |
2049 | 55.6M | point1_imag -= point2_imag; |
2050 | | |
2051 | | // x[i1] = x[i] + x[i2] |
2052 | 55.6M | Real[i] += point2_real; |
2053 | 55.6M | Imag[i] += point2_imag; |
2054 | | |
2055 | | // x[i2] = (x[i] - x[i2]) * w |
2056 | 55.6M | Real[i2] = MUL_F(point1_real-point1_imag, w_real); |
2057 | 55.6M | Imag[i2] = MUL_F(point1_real+point1_imag, w_real); |
2058 | 55.6M | } |
2059 | | |
2060 | | |
2061 | | // Stage 4 of 32 point FFT decimation in frequency (no multiplications) |
2062 | | // 16*4=64 additions |
2063 | 125M | for (i = 0; i < n; i += 4) |
2064 | 111M | { |
2065 | 111M | i2 = i+2; |
2066 | 111M | point1_real = Real[i]; |
2067 | 111M | point1_imag = Imag[i]; |
2068 | | |
2069 | 111M | point2_real = Real[i2]; |
2070 | 111M | point2_imag = Imag[i2]; |
2071 | | |
2072 | | // x[i1] = x[i] + x[i2] |
2073 | 111M | Real[i] += point2_real; |
2074 | 111M | Imag[i] += point2_imag; |
2075 | | |
2076 | | // x[i2] = x[i] - x[i2] |
2077 | 111M | Real[i2] = point1_real - point2_real; |
2078 | 111M | Imag[i2] = point1_imag - point2_imag; |
2079 | 111M | } |
2080 | 125M | for (i = 1; i < n; i += 4) |
2081 | 111M | { |
2082 | 111M | i2 = i+2; |
2083 | 111M | point1_real = Real[i]; |
2084 | 111M | point1_imag = Imag[i]; |
2085 | | |
2086 | 111M | point2_real = Real[i2]; |
2087 | 111M | point2_imag = Imag[i2]; |
2088 | | |
2089 | | // x[i] = x[i] + x[i2] |
2090 | 111M | Real[i] += point2_real; |
2091 | 111M | Imag[i] += point2_imag; |
2092 | | |
2093 | | // x[i2] = (x[i] - x[i2]) * (-i) |
2094 | 111M | Real[i2] = point1_imag - point2_imag; |
2095 | 111M | Imag[i2] = point2_real - point1_real; |
2096 | 111M | } |
2097 | | |
2098 | | // Stage 5 of 32 point FFT decimation in frequency (no multiplications) |
2099 | | // 16*4=64 additions |
2100 | 236M | for (i = 0; i < n; i += 2) |
2101 | 222M | { |
2102 | 222M | i2 = i+1; |
2103 | 222M | point1_real = Real[i]; |
2104 | 222M | point1_imag = Imag[i]; |
2105 | | |
2106 | 222M | point2_real = Real[i2]; |
2107 | 222M | point2_imag = Imag[i2]; |
2108 | | |
2109 | | // out[i1] = point1 + point2 |
2110 | 222M | Real[i] += point2_real; |
2111 | 222M | Imag[i] += point2_imag; |
2112 | | |
2113 | | // out[i2] = point1 - point2 |
2114 | 222M | Real[i2] = point1_real - point2_real; |
2115 | 222M | Imag[i2] = point1_imag - point2_imag; |
2116 | 222M | } |
2117 | | |
2118 | | #ifdef REORDER_IN_FFT |
2119 | | FFTReorder(Real, Imag); |
2120 | | #endif // #ifdef REORDER_IN_FFT |
2121 | 13.9M | } |
2122 | | #undef n |
2123 | | #undef log2n |
2124 | | |
2125 | | static const real_t dct4_64_tab[] = { |
2126 | | COEF_CONST(0.999924719333649), COEF_CONST(0.998118102550507), |
2127 | | COEF_CONST(0.993906974792480), COEF_CONST(0.987301409244537), |
2128 | | COEF_CONST(0.978317379951477), COEF_CONST(0.966976463794708), |
2129 | | COEF_CONST(0.953306019306183), COEF_CONST(0.937339007854462), |
2130 | | COEF_CONST(0.919113874435425), COEF_CONST(0.898674488067627), |
2131 | | COEF_CONST(0.876070082187653), COEF_CONST(0.851355195045471), |
2132 | | COEF_CONST(0.824589252471924), COEF_CONST(0.795836925506592), |
2133 | | COEF_CONST(0.765167236328125), COEF_CONST(0.732654273509979), |
2134 | | COEF_CONST(0.698376238346100), COEF_CONST(0.662415742874146), |
2135 | | COEF_CONST(0.624859452247620), COEF_CONST(0.585797846317291), |
2136 | | COEF_CONST(0.545324981212616), COEF_CONST(0.503538429737091), |
2137 | | COEF_CONST(0.460538715124130), COEF_CONST(0.416429549455643), |
2138 | | COEF_CONST(0.371317148208618), COEF_CONST(0.325310230255127), |
2139 | | COEF_CONST(0.278519600629807), COEF_CONST(0.231058135628700), |
2140 | | COEF_CONST(0.183039888739586), COEF_CONST(0.134580686688423), |
2141 | | COEF_CONST(0.085797272622585), COEF_CONST(0.036807164549828), |
2142 | | COEF_CONST(-1.012196302413940), COEF_CONST(-1.059438824653626), |
2143 | | COEF_CONST(-1.104129195213318), COEF_CONST(-1.146159529685974), |
2144 | | COEF_CONST(-1.185428738594055), COEF_CONST(-1.221842169761658), |
2145 | | COEF_CONST(-1.255311965942383), COEF_CONST(-1.285757660865784), |
2146 | | COEF_CONST(-1.313105940818787), COEF_CONST(-1.337290763854981), |
2147 | | COEF_CONST(-1.358253836631775), COEF_CONST(-1.375944852828980), |
2148 | | COEF_CONST(-1.390321016311646), COEF_CONST(-1.401347875595093), |
2149 | | COEF_CONST(-1.408998727798462), COEF_CONST(-1.413255214691162), |
2150 | | COEF_CONST(-1.414107084274292), COEF_CONST(-1.411552190780640), |
2151 | | COEF_CONST(-1.405596733093262), COEF_CONST(-1.396255016326904), |
2152 | | COEF_CONST(-1.383549690246582), COEF_CONST(-1.367511272430420), |
2153 | | COEF_CONST(-1.348178386688232), COEF_CONST(-1.325597524642944), |
2154 | | COEF_CONST(-1.299823284149170), COEF_CONST(-1.270917654037476), |
2155 | | COEF_CONST(-1.238950133323669), COEF_CONST(-1.203998088836670), |
2156 | | COEF_CONST(-1.166145324707031), COEF_CONST(-1.125483393669128), |
2157 | | COEF_CONST(-1.082109928131104), COEF_CONST(-1.036129593849182), |
2158 | | COEF_CONST(-0.987653195858002), COEF_CONST(-0.936797380447388), |
2159 | | COEF_CONST(-0.883684754371643), COEF_CONST(-0.828443288803101), |
2160 | | COEF_CONST(-0.771206021308899), COEF_CONST(-0.712110757827759), |
2161 | | COEF_CONST(-0.651300072669983), COEF_CONST(-0.588920354843140), |
2162 | | COEF_CONST(-0.525121808052063), COEF_CONST(-0.460058242082596), |
2163 | | COEF_CONST(-0.393886327743530), COEF_CONST(-0.326765477657318), |
2164 | | COEF_CONST(-0.258857429027557), COEF_CONST(-0.190325915813446), |
2165 | | COEF_CONST(-0.121335685253143), COEF_CONST(-0.052053272724152), |
2166 | | COEF_CONST(0.017354607582092), COEF_CONST(0.086720645427704), |
2167 | | COEF_CONST(0.155877828598022), COEF_CONST(0.224659323692322), |
2168 | | COEF_CONST(0.292899727821350), COEF_CONST(0.360434412956238), |
2169 | | COEF_CONST(0.427100926637650), COEF_CONST(0.492738455533981), |
2170 | | COEF_CONST(0.557188928127289), COEF_CONST(0.620297133922577), |
2171 | | COEF_CONST(0.681910991668701), COEF_CONST(0.741881847381592), |
2172 | | COEF_CONST(0.800065577030182), COEF_CONST(0.856321990489960), |
2173 | | COEF_CONST(0.910515367984772), COEF_CONST(0.962515234947205), |
2174 | | COEF_CONST(1.000000000000000), COEF_CONST(0.998795449733734), |
2175 | | COEF_CONST(0.995184719562531), COEF_CONST(0.989176511764526), |
2176 | | COEF_CONST(0.980785250663757), COEF_CONST(0.970031261444092), |
2177 | | COEF_CONST(0.956940352916718), COEF_CONST(0.941544055938721), |
2178 | | COEF_CONST(0.923879504203796), COEF_CONST(0.903989315032959), |
2179 | | COEF_CONST(0.881921231746674), COEF_CONST(0.857728600502014), |
2180 | | COEF_CONST(0.831469595432281), COEF_CONST(0.803207516670227), |
2181 | | COEF_CONST(0.773010432720184), COEF_CONST(0.740951120853424), |
2182 | | COEF_CONST(0.707106769084930), COEF_CONST(0.671558916568756), |
2183 | | COEF_CONST(0.634393274784088), COEF_CONST(0.595699310302734), |
2184 | | COEF_CONST(0.555570185184479), COEF_CONST(0.514102697372437), |
2185 | | COEF_CONST(0.471396654844284), COEF_CONST(0.427555114030838), |
2186 | | COEF_CONST(0.382683426141739), COEF_CONST(0.336889833211899), |
2187 | | COEF_CONST(0.290284633636475), COEF_CONST(0.242980122566223), |
2188 | | COEF_CONST(0.195090234279633), COEF_CONST(0.146730497479439), |
2189 | | COEF_CONST(0.098017133772373), COEF_CONST(0.049067649990320), |
2190 | | COEF_CONST(-1.000000000000000), COEF_CONST(-1.047863125801086), |
2191 | | COEF_CONST(-1.093201875686646), COEF_CONST(-1.135906934738159), |
2192 | | COEF_CONST(-1.175875544548035), COEF_CONST(-1.213011503219605), |
2193 | | COEF_CONST(-1.247225046157837), COEF_CONST(-1.278433918952942), |
2194 | | COEF_CONST(-1.306562900543213), COEF_CONST(-1.331544399261475), |
2195 | | COEF_CONST(-1.353317975997925), COEF_CONST(-1.371831417083740), |
2196 | | COEF_CONST(-1.387039899826050), COEF_CONST(-1.398906826972961), |
2197 | | COEF_CONST(-1.407403707504273), COEF_CONST(-1.412510156631470), |
2198 | | COEF_CONST(0), COEF_CONST(-1.412510156631470), |
2199 | | COEF_CONST(-1.407403707504273), COEF_CONST(-1.398906826972961), |
2200 | | COEF_CONST(-1.387039899826050), COEF_CONST(-1.371831417083740), |
2201 | | COEF_CONST(-1.353317975997925), COEF_CONST(-1.331544399261475), |
2202 | | COEF_CONST(-1.306562900543213), COEF_CONST(-1.278433918952942), |
2203 | | COEF_CONST(-1.247225046157837), COEF_CONST(-1.213011384010315), |
2204 | | COEF_CONST(-1.175875544548035), COEF_CONST(-1.135907053947449), |
2205 | | COEF_CONST(-1.093201875686646), COEF_CONST(-1.047863125801086), |
2206 | | COEF_CONST(-1.000000000000000), COEF_CONST(-0.949727773666382), |
2207 | | COEF_CONST(-0.897167563438416), COEF_CONST(-0.842446029186249), |
2208 | | COEF_CONST(-0.785694956779480), COEF_CONST(-0.727051079273224), |
2209 | | COEF_CONST(-0.666655659675598), COEF_CONST(-0.604654192924500), |
2210 | | COEF_CONST(-0.541196048259735), COEF_CONST(-0.476434230804443), |
2211 | | COEF_CONST(-0.410524487495422), COEF_CONST(-0.343625843524933), |
2212 | | COEF_CONST(-0.275899350643158), COEF_CONST(-0.207508206367493), |
2213 | | COEF_CONST(-0.138617098331451), COEF_CONST(-0.069392144680023), |
2214 | | COEF_CONST(0), COEF_CONST(0.069392263889313), |
2215 | | COEF_CONST(0.138617157936096), COEF_CONST(0.207508206367493), |
2216 | | COEF_CONST(0.275899469852448), COEF_CONST(0.343625962734222), |
2217 | | COEF_CONST(0.410524636507034), COEF_CONST(0.476434201002121), |
2218 | | COEF_CONST(0.541196107864380), COEF_CONST(0.604654192924500), |
2219 | | COEF_CONST(0.666655719280243), COEF_CONST(0.727051138877869), |
2220 | | COEF_CONST(0.785695075988770), COEF_CONST(0.842446029186249), |
2221 | | COEF_CONST(0.897167563438416), COEF_CONST(0.949727773666382) |
2222 | | }; |
2223 | | |
2224 | | /* size 64 only! */ |
2225 | | void dct4_kernel(real_t * in_real, real_t * in_imag, real_t * out_real, real_t * out_imag) |
2226 | 13.9M | { |
2227 | | // Tables with bit reverse values for 5 bits, bit reverse of i at i-th position |
2228 | 13.9M | const uint8_t bit_rev_tab[32] = { 0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31 }; |
2229 | 13.9M | uint32_t i, i_rev; |
2230 | | |
2231 | | /* Step 2: modulate */ |
2232 | | // 3*32=96 multiplications |
2233 | | // 3*32=96 additions |
2234 | 459M | for (i = 0; i < 32; i++) |
2235 | 445M | { |
2236 | 445M | real_t x_re, x_im, tmp; |
2237 | 445M | x_re = in_real[i]; |
2238 | 445M | x_im = in_imag[i]; |
2239 | 445M | tmp = MUL_C(x_re + x_im, dct4_64_tab[i]); |
2240 | 445M | in_real[i] = MUL_C(x_im, dct4_64_tab[i + 64]) + tmp; |
2241 | 445M | in_imag[i] = MUL_C(x_re, dct4_64_tab[i + 32]) + tmp; |
2242 | 445M | } |
2243 | | |
2244 | | /* Step 3: FFT, but with output in bit reverse order */ |
2245 | 13.9M | fft_dif(in_real, in_imag); |
2246 | | |
2247 | | /* Step 4: modulate + bitreverse reordering */ |
2248 | | // 3*31+2=95 multiplications |
2249 | | // 3*31+2=95 additions |
2250 | 236M | for (i = 0; i < 16; i++) |
2251 | 222M | { |
2252 | 222M | real_t x_re, x_im, tmp; |
2253 | 222M | i_rev = bit_rev_tab[i]; |
2254 | 222M | x_re = in_real[i_rev]; |
2255 | 222M | x_im = in_imag[i_rev]; |
2256 | | |
2257 | 222M | tmp = MUL_C(x_re + x_im, dct4_64_tab[i + 3*32]); |
2258 | 222M | out_real[i] = MUL_C(x_im, dct4_64_tab[i + 5*32]) + tmp; |
2259 | 222M | out_imag[i] = MUL_C(x_re, dct4_64_tab[i + 4*32]) + tmp; |
2260 | 222M | } |
2261 | | // i = 16, i_rev = 1 = rev(16); |
2262 | 13.9M | out_imag[16] = MUL_C(in_imag[1] - in_real[1], dct4_64_tab[16 + 3*32]); |
2263 | 13.9M | out_real[16] = MUL_C(in_real[1] + in_imag[1], dct4_64_tab[16 + 3*32]); |
2264 | 222M | for (i = 17; i < 32; i++) |
2265 | 208M | { |
2266 | 208M | real_t x_re, x_im, tmp; |
2267 | 208M | i_rev = bit_rev_tab[i]; |
2268 | 208M | x_re = in_real[i_rev]; |
2269 | 208M | x_im = in_imag[i_rev]; |
2270 | 208M | tmp = MUL_C(x_re + x_im, dct4_64_tab[i + 3*32]); |
2271 | 208M | out_real[i] = MUL_C(x_im, dct4_64_tab[i + 5*32]) + tmp; |
2272 | 208M | out_imag[i] = MUL_C(x_re, dct4_64_tab[i + 4*32]) + tmp; |
2273 | 208M | } |
2274 | | |
2275 | 13.9M | } |
2276 | | |
2277 | | #endif |
2278 | | |
2279 | | #endif |