1 /*
2 * MP3 window subband -> subband filtering -> mdct routine
3 *
4 * Copyright (c) 1999-2000 Takehiro Tominaga
5 *
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
21 */
22
23 /*
24 * Special Thanks to Patrick De Smet for your advices.
25 */
26
27 /* $Id: newmdct.c,v 1.39 2011/05/07 16:05:17 rbrito Exp $ */
28
29 #ifdef HAVE_CONFIG_H
30 # include <config.h>
31 #endif
32
33 #include "lame.h"
34 #include "lame-machine.h"
35 #include "encoder.h"
36 #include "util.h"
37 #include "newmdct.h"
38
39
40
41 #ifndef USE_GOGO_SUBBAND
42 static const FLOAT enwindow[] = {
43 -4.77e-07 * 0.740951125354959 / 2.384e-06, 1.03951e-04 * 0.740951125354959 / 2.384e-06,
44 9.53674e-04 * 0.740951125354959 / 2.384e-06, 2.841473e-03 * 0.740951125354959 / 2.384e-06,
45 3.5758972e-02 * 0.740951125354959 / 2.384e-06, 3.401756e-03 * 0.740951125354959 / 2.384e-06, 9.83715e-04 * 0.740951125354959 / 2.384e-06, 9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */
46 1.2398e-05 * 0.740951125354959 / 2.384e-06, 1.91212e-04 * 0.740951125354959 / 2.384e-06,
47 2.283096e-03 * 0.740951125354959 / 2.384e-06, 1.6994476e-02 * 0.740951125354959 / 2.384e-06,
48 -1.8756866e-02 * 0.740951125354959 / 2.384e-06, -2.630711e-03 * 0.740951125354959 / 2.384e-06,
49 -2.47478e-04 * 0.740951125354959 / 2.384e-06, -1.4782e-05 * 0.740951125354959 / 2.384e-06,
50 9.063471690191471e-01,
51 1.960342806591213e-01,
52
53
54 -4.77e-07 * 0.773010453362737 / 2.384e-06, 1.05858e-04 * 0.773010453362737 / 2.384e-06,
55 9.30786e-04 * 0.773010453362737 / 2.384e-06, 2.521515e-03 * 0.773010453362737 / 2.384e-06,
56 3.5694122e-02 * 0.773010453362737 / 2.384e-06, 3.643036e-03 * 0.773010453362737 / 2.384e-06, 9.91821e-04 * 0.773010453362737 / 2.384e-06, 9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */
57 1.1444e-05 * 0.773010453362737 / 2.384e-06, 1.65462e-04 * 0.773010453362737 / 2.384e-06,
58 2.110004e-03 * 0.773010453362737 / 2.384e-06, 1.6112804e-02 * 0.773010453362737 / 2.384e-06,
59 -1.9634247e-02 * 0.773010453362737 / 2.384e-06, -2.803326e-03 * 0.773010453362737 / 2.384e-06,
60 -2.77042e-04 * 0.773010453362737 / 2.384e-06, -1.6689e-05 * 0.773010453362737 / 2.384e-06,
61 8.206787908286602e-01,
62 3.901806440322567e-01,
63
64
65 -4.77e-07 * 0.803207531480645 / 2.384e-06, 1.07288e-04 * 0.803207531480645 / 2.384e-06,
66 9.02653e-04 * 0.803207531480645 / 2.384e-06, 2.174854e-03 * 0.803207531480645 / 2.384e-06,
67 3.5586357e-02 * 0.803207531480645 / 2.384e-06, 3.858566e-03 * 0.803207531480645 / 2.384e-06, 9.95159e-04 * 0.803207531480645 / 2.384e-06, 9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */
68 1.0014e-05 * 0.803207531480645 / 2.384e-06, 1.40190e-04 * 0.803207531480645 / 2.384e-06,
69 1.937389e-03 * 0.803207531480645 / 2.384e-06, 1.5233517e-02 * 0.803207531480645 / 2.384e-06,
70 -2.0506859e-02 * 0.803207531480645 / 2.384e-06, -2.974033e-03 * 0.803207531480645 / 2.384e-06,
71 -3.07560e-04 * 0.803207531480645 / 2.384e-06, -1.8120e-05 * 0.803207531480645 / 2.384e-06,
72 7.416505462720353e-01,
73 5.805693545089249e-01,
74
75
76 -4.77e-07 * 0.831469612302545 / 2.384e-06, 1.08242e-04 * 0.831469612302545 / 2.384e-06,
77 8.68797e-04 * 0.831469612302545 / 2.384e-06, 1.800537e-03 * 0.831469612302545 / 2.384e-06,
78 3.5435200e-02 * 0.831469612302545 / 2.384e-06, 4.049301e-03 * 0.831469612302545 / 2.384e-06, 9.94205e-04 * 0.831469612302545 / 2.384e-06, 9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */
79 9.060e-06 * 0.831469612302545 / 2.384e-06, 1.16348e-04 * 0.831469612302545 / 2.384e-06,
80 1.766682e-03 * 0.831469612302545 / 2.384e-06, 1.4358521e-02 * 0.831469612302545 / 2.384e-06,
81 -2.1372318e-02 * 0.831469612302545 / 2.384e-06, -3.14188e-03 * 0.831469612302545 / 2.384e-06,
82 -3.39031e-04 * 0.831469612302545 / 2.384e-06, -1.9550e-05 * 0.831469612302545 / 2.384e-06,
83 6.681786379192989e-01,
84 7.653668647301797e-01,
85
86
87 -4.77e-07 * 0.857728610000272 / 2.384e-06, 1.08719e-04 * 0.857728610000272 / 2.384e-06,
88 8.29220e-04 * 0.857728610000272 / 2.384e-06, 1.399517e-03 * 0.857728610000272 / 2.384e-06,
89 3.5242081e-02 * 0.857728610000272 / 2.384e-06, 4.215240e-03 * 0.857728610000272 / 2.384e-06, 9.89437e-04 * 0.857728610000272 / 2.384e-06, 8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */
90 8.106e-06 * 0.857728610000272 / 2.384e-06, 9.3937e-05 * 0.857728610000272 / 2.384e-06,
91 1.597881e-03 * 0.857728610000272 / 2.384e-06, 1.3489246e-02 * 0.857728610000272 / 2.384e-06,
92 -2.2228718e-02 * 0.857728610000272 / 2.384e-06, -3.306866e-03 * 0.857728610000272 / 2.384e-06,
93 -3.71456e-04 * 0.857728610000272 / 2.384e-06, -2.1458e-05 * 0.857728610000272 / 2.384e-06,
94 5.993769336819237e-01,
95 9.427934736519954e-01,
96
97
98 -4.77e-07 * 0.881921264348355 / 2.384e-06, 1.08719e-04 * 0.881921264348355 / 2.384e-06,
99 7.8392e-04 * 0.881921264348355 / 2.384e-06, 9.71317e-04 * 0.881921264348355 / 2.384e-06,
100 3.5007000e-02 * 0.881921264348355 / 2.384e-06, 4.357815e-03 * 0.881921264348355 / 2.384e-06, 9.80854e-04 * 0.881921264348355 / 2.384e-06, 8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */
101 7.629e-06 * 0.881921264348355 / 2.384e-06, 7.2956e-05 * 0.881921264348355 / 2.384e-06,
102 1.432419e-03 * 0.881921264348355 / 2.384e-06, 1.2627602e-02 * 0.881921264348355 / 2.384e-06,
103 -2.3074150e-02 * 0.881921264348355 / 2.384e-06, -3.467083e-03 * 0.881921264348355 / 2.384e-06,
104 -4.04358e-04 * 0.881921264348355 / 2.384e-06, -2.3365e-05 * 0.881921264348355 / 2.384e-06,
105 5.345111359507916e-01,
106 1.111140466039205e+00,
107
108
109 -9.54e-07 * 0.903989293123443 / 2.384e-06, 1.08242e-04 * 0.903989293123443 / 2.384e-06,
110 7.31945e-04 * 0.903989293123443 / 2.384e-06, 5.15938e-04 * 0.903989293123443 / 2.384e-06,
111 3.4730434e-02 * 0.903989293123443 / 2.384e-06, 4.477024e-03 * 0.903989293123443 / 2.384e-06, 9.68933e-04 * 0.903989293123443 / 2.384e-06, 8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */
112 6.676e-06 * 0.903989293123443 / 2.384e-06, 5.2929e-05 * 0.903989293123443 / 2.384e-06,
113 1.269817e-03 * 0.903989293123443 / 2.384e-06, 1.1775017e-02 * 0.903989293123443 / 2.384e-06,
114 -2.3907185e-02 * 0.903989293123443 / 2.384e-06, -3.622532e-03 * 0.903989293123443 / 2.384e-06,
115 -4.38213e-04 * 0.903989293123443 / 2.384e-06, -2.5272e-05 * 0.903989293123443 / 2.384e-06,
116 4.729647758913199e-01,
117 1.268786568327291e+00,
118
119
120 -9.54e-07 * 0.92387953251128675613 / 2.384e-06,
121 1.06812e-04 * 0.92387953251128675613 / 2.384e-06,
122 6.74248e-04 * 0.92387953251128675613 / 2.384e-06,
123 3.3379e-05 * 0.92387953251128675613 / 2.384e-06,
124 3.4412861e-02 * 0.92387953251128675613 / 2.384e-06,
125 4.573822e-03 * 0.92387953251128675613 / 2.384e-06,
126 9.54151e-04 * 0.92387953251128675613 / 2.384e-06,
127 7.6771e-05 * 0.92387953251128675613 / 2.384e-06,
128 6.199e-06 * 0.92387953251128675613 / 2.384e-06, 3.4332e-05 * 0.92387953251128675613 / 2.384e-06,
129 1.111031e-03 * 0.92387953251128675613 / 2.384e-06,
130 1.0933399e-02 * 0.92387953251128675613 / 2.384e-06,
131 -2.4725437e-02 * 0.92387953251128675613 / 2.384e-06,
132 -3.771782e-03 * 0.92387953251128675613 / 2.384e-06,
133 -4.72546e-04 * 0.92387953251128675613 / 2.384e-06,
134 -2.7657e-05 * 0.92387953251128675613 / 2.384e-06,
135 4.1421356237309504879e-01, /* tan(PI/8) */
136 1.414213562373095e+00,
137
138
139 -9.54e-07 * 0.941544065183021 / 2.384e-06, 1.05381e-04 * 0.941544065183021 / 2.384e-06,
140 6.10352e-04 * 0.941544065183021 / 2.384e-06, -4.75883e-04 * 0.941544065183021 / 2.384e-06,
141 3.4055710e-02 * 0.941544065183021 / 2.384e-06, 4.649162e-03 * 0.941544065183021 / 2.384e-06, 9.35555e-04 * 0.941544065183021 / 2.384e-06, 7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */
142 5.245e-06 * 0.941544065183021 / 2.384e-06, 1.7166e-05 * 0.941544065183021 / 2.384e-06,
143 9.56535e-04 * 0.941544065183021 / 2.384e-06, 1.0103703e-02 * 0.941544065183021 / 2.384e-06,
144 -2.5527000e-02 * 0.941544065183021 / 2.384e-06, -3.914356e-03 * 0.941544065183021 / 2.384e-06,
145 -5.07355e-04 * 0.941544065183021 / 2.384e-06, -3.0041e-05 * 0.941544065183021 / 2.384e-06,
146 3.578057213145241e-01,
147 1.546020906725474e+00,
148
149
150 -9.54e-07 * 0.956940335732209 / 2.384e-06, 1.02520e-04 * 0.956940335732209 / 2.384e-06,
151 5.39303e-04 * 0.956940335732209 / 2.384e-06, -1.011848e-03 * 0.956940335732209 / 2.384e-06,
152 3.3659935e-02 * 0.956940335732209 / 2.384e-06, 4.703045e-03 * 0.956940335732209 / 2.384e-06, 9.15051e-04 * 0.956940335732209 / 2.384e-06, 7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */
153 4.768e-06 * 0.956940335732209 / 2.384e-06, 9.54e-07 * 0.956940335732209 / 2.384e-06,
154 8.06808e-04 * 0.956940335732209 / 2.384e-06, 9.287834e-03 * 0.956940335732209 / 2.384e-06,
155 -2.6310921e-02 * 0.956940335732209 / 2.384e-06, -4.048824e-03 * 0.956940335732209 / 2.384e-06,
156 -5.42164e-04 * 0.956940335732209 / 2.384e-06, -3.2425e-05 * 0.956940335732209 / 2.384e-06,
157 3.033466836073424e-01,
158 1.662939224605090e+00,
159
160
161 -1.431e-06 * 0.970031253194544 / 2.384e-06, 9.9182e-05 * 0.970031253194544 / 2.384e-06,
162 4.62532e-04 * 0.970031253194544 / 2.384e-06, -1.573563e-03 * 0.970031253194544 / 2.384e-06,
163 3.3225536e-02 * 0.970031253194544 / 2.384e-06, 4.737377e-03 * 0.970031253194544 / 2.384e-06, 8.91685e-04 * 0.970031253194544 / 2.384e-06, 6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */
164 4.292e-06 * 0.970031253194544 / 2.384e-06, -1.3828e-05 * 0.970031253194544 / 2.384e-06,
165 6.61850e-04 * 0.970031253194544 / 2.384e-06, 8.487225e-03 * 0.970031253194544 / 2.384e-06,
166 -2.7073860e-02 * 0.970031253194544 / 2.384e-06, -4.174709e-03 * 0.970031253194544 / 2.384e-06,
167 -5.76973e-04 * 0.970031253194544 / 2.384e-06, -3.4809e-05 * 0.970031253194544 / 2.384e-06,
168 2.504869601913055e-01,
169 1.763842528696710e+00,
170
171
172 -1.431e-06 * 0.98078528040323 / 2.384e-06, 9.5367e-05 * 0.98078528040323 / 2.384e-06,
173 3.78609e-04 * 0.98078528040323 / 2.384e-06, -2.161503e-03 * 0.98078528040323 / 2.384e-06,
174 3.2754898e-02 * 0.98078528040323 / 2.384e-06, 4.752159e-03 * 0.98078528040323 / 2.384e-06, 8.66413e-04 * 0.98078528040323 / 2.384e-06, 6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */
175 3.815e-06 * 0.98078528040323 / 2.384e-06, -2.718e-05 * 0.98078528040323 / 2.384e-06,
176 5.22137e-04 * 0.98078528040323 / 2.384e-06, 7.703304e-03 * 0.98078528040323 / 2.384e-06,
177 -2.7815342e-02 * 0.98078528040323 / 2.384e-06, -4.290581e-03 * 0.98078528040323 / 2.384e-06,
178 -6.11782e-04 * 0.98078528040323 / 2.384e-06, -3.7670e-05 * 0.98078528040323 / 2.384e-06,
179 1.989123673796580e-01,
180 1.847759065022573e+00,
181
182
183 -1.907e-06 * 0.989176509964781 / 2.384e-06, 9.0122e-05 * 0.989176509964781 / 2.384e-06,
184 2.88486e-04 * 0.989176509964781 / 2.384e-06, -2.774239e-03 * 0.989176509964781 / 2.384e-06,
185 3.2248020e-02 * 0.989176509964781 / 2.384e-06, 4.748821e-03 * 0.989176509964781 / 2.384e-06, 8.38757e-04 * 0.989176509964781 / 2.384e-06, 5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */
186 3.338e-06 * 0.989176509964781 / 2.384e-06, -3.9577e-05 * 0.989176509964781 / 2.384e-06,
187 3.88145e-04 * 0.989176509964781 / 2.384e-06, 6.937027e-03 * 0.989176509964781 / 2.384e-06,
188 -2.8532982e-02 * 0.989176509964781 / 2.384e-06, -4.395962e-03 * 0.989176509964781 / 2.384e-06,
189 -6.46591e-04 * 0.989176509964781 / 2.384e-06, -4.0531e-05 * 0.989176509964781 / 2.384e-06,
190 1.483359875383474e-01,
191 1.913880671464418e+00,
192
193
194 -1.907e-06 * 0.995184726672197 / 2.384e-06, 8.4400e-05 * 0.995184726672197 / 2.384e-06,
195 1.91689e-04 * 0.995184726672197 / 2.384e-06, -3.411293e-03 * 0.995184726672197 / 2.384e-06,
196 3.1706810e-02 * 0.995184726672197 / 2.384e-06, 4.728317e-03 * 0.995184726672197 / 2.384e-06,
197 8.09669e-04 * 0.995184726672197 / 2.384e-06, 5.579e-05 * 0.995184726672197 / 2.384e-06,
198 3.338e-06 * 0.995184726672197 / 2.384e-06, -5.0545e-05 * 0.995184726672197 / 2.384e-06,
199 2.59876e-04 * 0.995184726672197 / 2.384e-06, 6.189346e-03 * 0.995184726672197 / 2.384e-06,
200 -2.9224873e-02 * 0.995184726672197 / 2.384e-06, -4.489899e-03 * 0.995184726672197 / 2.384e-06,
201 -6.80923e-04 * 0.995184726672197 / 2.384e-06, -4.3392e-05 * 0.995184726672197 / 2.384e-06,
202 9.849140335716425e-02,
203 1.961570560806461e+00,
204
205
206 -2.384e-06 * 0.998795456205172 / 2.384e-06, 7.7724e-05 * 0.998795456205172 / 2.384e-06,
207 8.8215e-05 * 0.998795456205172 / 2.384e-06, -4.072189e-03 * 0.998795456205172 / 2.384e-06,
208 3.1132698e-02 * 0.998795456205172 / 2.384e-06, 4.691124e-03 * 0.998795456205172 / 2.384e-06,
209 7.79152e-04 * 0.998795456205172 / 2.384e-06, 5.2929e-05 * 0.998795456205172 / 2.384e-06,
210 2.861e-06 * 0.998795456205172 / 2.384e-06, -6.0558e-05 * 0.998795456205172 / 2.384e-06,
211 1.37329e-04 * 0.998795456205172 / 2.384e-06, 5.462170e-03 * 0.998795456205172 / 2.384e-06,
212 -2.9890060e-02 * 0.998795456205172 / 2.384e-06, -4.570484e-03 * 0.998795456205172 / 2.384e-06,
213 -7.14302e-04 * 0.998795456205172 / 2.384e-06, -4.6253e-05 * 0.998795456205172 / 2.384e-06,
214 4.912684976946725e-02,
215 1.990369453344394e+00,
216
217
218 3.5780907e-02 * SQRT2 * 0.5 / 2.384e-06, 1.7876148e-02 * SQRT2 * 0.5 / 2.384e-06,
219 3.134727e-03 * SQRT2 * 0.5 / 2.384e-06, 2.457142e-03 * SQRT2 * 0.5 / 2.384e-06,
220 9.71317e-04 * SQRT2 * 0.5 / 2.384e-06, 2.18868e-04 * SQRT2 * 0.5 / 2.384e-06,
221 1.01566e-04 * SQRT2 * 0.5 / 2.384e-06, 1.3828e-05 * SQRT2 * 0.5 / 2.384e-06,
222
223 3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06, 7.47204e-04 / 2.384e-06,
224 4.9591e-05 / 2.384e-06,
225 4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06, -6.9618e-05 / 2.384e-06, /* 2.384e-06/2.384e-06 */
226 };
227 #endif
228
229
230 #define NS 12
231 #define NL 36
232
233 static const FLOAT win[4][NL] = {
234 {
235 2.382191739347913e-13,
236 6.423305872147834e-13,
237 9.400849094049688e-13,
238 1.122435026096556e-12,
239 1.183840321267481e-12,
240 1.122435026096556e-12,
241 9.400849094049690e-13,
242 6.423305872147839e-13,
243 2.382191739347918e-13,
244
245 5.456116108943412e-12,
246 4.878985199565852e-12,
247 4.240448995017367e-12,
248 3.559909094758252e-12,
249 2.858043359288075e-12,
250 2.156177623817898e-12,
251 1.475637723558783e-12,
252 8.371015190102974e-13,
253 2.599706096327376e-13,
254
255 -5.456116108943412e-12,
256 -4.878985199565852e-12,
257 -4.240448995017367e-12,
258 -3.559909094758252e-12,
259 -2.858043359288076e-12,
260 -2.156177623817898e-12,
261 -1.475637723558783e-12,
262 -8.371015190102975e-13,
263 -2.599706096327376e-13,
264
265 -2.382191739347923e-13,
266 -6.423305872147843e-13,
267 -9.400849094049696e-13,
268 -1.122435026096556e-12,
269 -1.183840321267481e-12,
270 -1.122435026096556e-12,
271 -9.400849094049694e-13,
272 -6.423305872147840e-13,
273 -2.382191739347918e-13,
274 },
275 {
276 2.382191739347913e-13,
277 6.423305872147834e-13,
278 9.400849094049688e-13,
279 1.122435026096556e-12,
280 1.183840321267481e-12,
281 1.122435026096556e-12,
282 9.400849094049688e-13,
283 6.423305872147841e-13,
284 2.382191739347918e-13,
285
286 5.456116108943413e-12,
287 4.878985199565852e-12,
288 4.240448995017367e-12,
289 3.559909094758253e-12,
290 2.858043359288075e-12,
291 2.156177623817898e-12,
292 1.475637723558782e-12,
293 8.371015190102975e-13,
294 2.599706096327376e-13,
295
296 -5.461314069809755e-12,
297 -4.921085770524055e-12,
298 -4.343405037091838e-12,
299 -3.732668368707687e-12,
300 -3.093523840190885e-12,
301 -2.430835727329465e-12,
302 -1.734679010007751e-12,
303 -9.748253656609281e-13,
304 -2.797435120168326e-13,
305
306 0.000000000000000e+00,
307 0.000000000000000e+00,
308 0.000000000000000e+00,
309 0.000000000000000e+00,
310 0.000000000000000e+00,
311 0.000000000000000e+00,
312 -2.283748241799531e-13,
313 -4.037858874020686e-13,
314 -2.146547464825323e-13,
315 },
316 {
317 1.316524975873958e-01, /* win[SHORT_TYPE] */
318 4.142135623730950e-01,
319 7.673269879789602e-01,
320
321 1.091308501069271e+00, /* tantab_l */
322 1.303225372841206e+00,
323 1.569685577117490e+00,
324 1.920982126971166e+00,
325 2.414213562373094e+00,
326 3.171594802363212e+00,
327 4.510708503662055e+00,
328 7.595754112725146e+00,
329 2.290376554843115e+01,
330
331 0.98480775301220802032, /* cx */
332 0.64278760968653936292,
333 0.34202014332566882393,
334 0.93969262078590842791,
335 -0.17364817766693030343,
336 -0.76604444311897790243,
337 0.86602540378443870761,
338 0.500000000000000e+00,
339
340 -5.144957554275265e-01, /* ca */
341 -4.717319685649723e-01,
342 -3.133774542039019e-01,
343 -1.819131996109812e-01,
344 -9.457419252642064e-02,
345 -4.096558288530405e-02,
346 -1.419856857247115e-02,
347 -3.699974673760037e-03,
348
349 8.574929257125442e-01, /* cs */
350 8.817419973177052e-01,
351 9.496286491027329e-01,
352 9.833145924917901e-01,
353 9.955178160675857e-01,
354 9.991605581781475e-01,
355 9.998991952444470e-01,
356 9.999931550702802e-01,
357 },
358 {
359 0.000000000000000e+00,
360 0.000000000000000e+00,
361 0.000000000000000e+00,
362 0.000000000000000e+00,
363 0.000000000000000e+00,
364 0.000000000000000e+00,
365 2.283748241799531e-13,
366 4.037858874020686e-13,
367 2.146547464825323e-13,
368
369 5.461314069809755e-12,
370 4.921085770524055e-12,
371 4.343405037091838e-12,
372 3.732668368707687e-12,
373 3.093523840190885e-12,
374 2.430835727329466e-12,
375 1.734679010007751e-12,
376 9.748253656609281e-13,
377 2.797435120168326e-13,
378
379 -5.456116108943413e-12,
380 -4.878985199565852e-12,
381 -4.240448995017367e-12,
382 -3.559909094758253e-12,
383 -2.858043359288075e-12,
384 -2.156177623817898e-12,
385 -1.475637723558782e-12,
386 -8.371015190102975e-13,
387 -2.599706096327376e-13,
388
389 -2.382191739347913e-13,
390 -6.423305872147834e-13,
391 -9.400849094049688e-13,
392 -1.122435026096556e-12,
393 -1.183840321267481e-12,
394 -1.122435026096556e-12,
395 -9.400849094049688e-13,
396 -6.423305872147841e-13,
397 -2.382191739347918e-13,
398 }
399 };
400
401 #define tantab_l (win[SHORT_TYPE]+3)
402 #define cx (win[SHORT_TYPE]+12)
403 #define ca (win[SHORT_TYPE]+20)
404 #define cs (win[SHORT_TYPE]+28)
405
406 /************************************************************************
407 *
408 * window_subband()
409 *
410 * PURPOSE: Overlapping window on PCM samples
411 *
412 * SEMANTICS:
413 * 32 16-bit pcm samples are scaled to fractional 2's complement and
414 * concatenated to the end of the window buffer #x#. The updated window
415 * buffer #x# is then windowed by the analysis window #c# to produce the
416 * windowed sample #z#
417 *
418 ************************************************************************/
419
420 /*
421 * new IDCT routine written by Takehiro TOMINAGA
422 */
423 static const int order[] = {
424 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29,
425 2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31
426 };
427
428
429 /* returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 */
430 inline static void
window_subband(const sample_t * x1,FLOAT a[SBLIMIT])431 window_subband(const sample_t * x1, FLOAT a[SBLIMIT])
432 {
433 int i;
434 FLOAT const *wp = enwindow + 10;
435
436 const sample_t *x2 = &x1[238 - 14 - 286];
437
438 for (i = -15; i < 0; i++) {
439 FLOAT w, s, t;
440
441 w = wp[-10];
442 s = x2[-224] * w;
443 t = x1[224] * w;
444 w = wp[-9];
445 s += x2[-160] * w;
446 t += x1[160] * w;
447 w = wp[-8];
448 s += x2[-96] * w;
449 t += x1[96] * w;
450 w = wp[-7];
451 s += x2[-32] * w;
452 t += x1[32] * w;
453 w = wp[-6];
454 s += x2[32] * w;
455 t += x1[-32] * w;
456 w = wp[-5];
457 s += x2[96] * w;
458 t += x1[-96] * w;
459 w = wp[-4];
460 s += x2[160] * w;
461 t += x1[-160] * w;
462 w = wp[-3];
463 s += x2[224] * w;
464 t += x1[-224] * w;
465
466 w = wp[-2];
467 s += x1[-256] * w;
468 t -= x2[256] * w;
469 w = wp[-1];
470 s += x1[-192] * w;
471 t -= x2[192] * w;
472 w = wp[0];
473 s += x1[-128] * w;
474 t -= x2[128] * w;
475 w = wp[1];
476 s += x1[-64] * w;
477 t -= x2[64] * w;
478 w = wp[2];
479 s += x1[0] * w;
480 t -= x2[0] * w;
481 w = wp[3];
482 s += x1[64] * w;
483 t -= x2[-64] * w;
484 w = wp[4];
485 s += x1[128] * w;
486 t -= x2[-128] * w;
487 w = wp[5];
488 s += x1[192] * w;
489 t -= x2[-192] * w;
490
491 /*
492 * this multiplyer could be removed, but it needs more 256 FLOAT data.
493 * thinking about the data cache performance, I think we should not
494 * use such a huge table. tt 2000/Oct/25
495 */
496 s *= wp[6];
497 w = t - s;
498 a[30 + i * 2] = t + s;
499 a[31 + i * 2] = wp[7] * w;
500 wp += 18;
501 x1--;
502 x2++;
503 }
504 {
505 FLOAT s, t, u, v;
506 t = x1[-16] * wp[-10];
507 s = x1[-32] * wp[-2];
508 t += (x1[-48] - x1[16]) * wp[-9];
509 s += x1[-96] * wp[-1];
510 t += (x1[-80] + x1[48]) * wp[-8];
511 s += x1[-160] * wp[0];
512 t += (x1[-112] - x1[80]) * wp[-7];
513 s += x1[-224] * wp[1];
514 t += (x1[-144] + x1[112]) * wp[-6];
515 s -= x1[32] * wp[2];
516 t += (x1[-176] - x1[144]) * wp[-5];
517 s -= x1[96] * wp[3];
518 t += (x1[-208] + x1[176]) * wp[-4];
519 s -= x1[160] * wp[4];
520 t += (x1[-240] - x1[208]) * wp[-3];
521 s -= x1[224];
522
523 u = s - t;
524 v = s + t;
525
526 t = a[14];
527 s = a[15] - t;
528
529 a[31] = v + t; /* A0 */
530 a[30] = u + s; /* A1 */
531 a[15] = u - s; /* A2 */
532 a[14] = v - t; /* A3 */
533 }
534 {
535 FLOAT xr;
536 xr = a[28] - a[0];
537 a[0] += a[28];
538 a[28] = xr * wp[-2 * 18 + 7];
539 xr = a[29] - a[1];
540 a[1] += a[29];
541 a[29] = xr * wp[-2 * 18 + 7];
542
543 xr = a[26] - a[2];
544 a[2] += a[26];
545 a[26] = xr * wp[-4 * 18 + 7];
546 xr = a[27] - a[3];
547 a[3] += a[27];
548 a[27] = xr * wp[-4 * 18 + 7];
549
550 xr = a[24] - a[4];
551 a[4] += a[24];
552 a[24] = xr * wp[-6 * 18 + 7];
553 xr = a[25] - a[5];
554 a[5] += a[25];
555 a[25] = xr * wp[-6 * 18 + 7];
556
557 xr = a[22] - a[6];
558 a[6] += a[22];
559 a[22] = xr * SQRT2;
560 xr = a[23] - a[7];
561 a[7] += a[23];
562 a[23] = xr * SQRT2 - a[7];
563 a[7] -= a[6];
564 a[22] -= a[7];
565 a[23] -= a[22];
566
567 xr = a[6];
568 a[6] = a[31] - xr;
569 a[31] = a[31] + xr;
570 xr = a[7];
571 a[7] = a[30] - xr;
572 a[30] = a[30] + xr;
573 xr = a[22];
574 a[22] = a[15] - xr;
575 a[15] = a[15] + xr;
576 xr = a[23];
577 a[23] = a[14] - xr;
578 a[14] = a[14] + xr;
579
580 xr = a[20] - a[8];
581 a[8] += a[20];
582 a[20] = xr * wp[-10 * 18 + 7];
583 xr = a[21] - a[9];
584 a[9] += a[21];
585 a[21] = xr * wp[-10 * 18 + 7];
586
587 xr = a[18] - a[10];
588 a[10] += a[18];
589 a[18] = xr * wp[-12 * 18 + 7];
590 xr = a[19] - a[11];
591 a[11] += a[19];
592 a[19] = xr * wp[-12 * 18 + 7];
593
594 xr = a[16] - a[12];
595 a[12] += a[16];
596 a[16] = xr * wp[-14 * 18 + 7];
597 xr = a[17] - a[13];
598 a[13] += a[17];
599 a[17] = xr * wp[-14 * 18 + 7];
600
601 xr = -a[20] + a[24];
602 a[20] += a[24];
603 a[24] = xr * wp[-12 * 18 + 7];
604 xr = -a[21] + a[25];
605 a[21] += a[25];
606 a[25] = xr * wp[-12 * 18 + 7];
607
608 xr = a[4] - a[8];
609 a[4] += a[8];
610 a[8] = xr * wp[-12 * 18 + 7];
611 xr = a[5] - a[9];
612 a[5] += a[9];
613 a[9] = xr * wp[-12 * 18 + 7];
614
615 xr = a[0] - a[12];
616 a[0] += a[12];
617 a[12] = xr * wp[-4 * 18 + 7];
618 xr = a[1] - a[13];
619 a[1] += a[13];
620 a[13] = xr * wp[-4 * 18 + 7];
621 xr = a[16] - a[28];
622 a[16] += a[28];
623 a[28] = xr * wp[-4 * 18 + 7];
624 xr = -a[17] + a[29];
625 a[17] += a[29];
626 a[29] = xr * wp[-4 * 18 + 7];
627
628 xr = SQRT2 * (a[2] - a[10]);
629 a[2] += a[10];
630 a[10] = xr;
631 xr = SQRT2 * (a[3] - a[11]);
632 a[3] += a[11];
633 a[11] = xr;
634 xr = SQRT2 * (-a[18] + a[26]);
635 a[18] += a[26];
636 a[26] = xr - a[18];
637 xr = SQRT2 * (-a[19] + a[27]);
638 a[19] += a[27];
639 a[27] = xr - a[19];
640
641 xr = a[2];
642 a[19] -= a[3];
643 a[3] -= xr;
644 a[2] = a[31] - xr;
645 a[31] += xr;
646 xr = a[3];
647 a[11] -= a[19];
648 a[18] -= xr;
649 a[3] = a[30] - xr;
650 a[30] += xr;
651 xr = a[18];
652 a[27] -= a[11];
653 a[19] -= xr;
654 a[18] = a[15] - xr;
655 a[15] += xr;
656
657 xr = a[19];
658 a[10] -= xr;
659 a[19] = a[14] - xr;
660 a[14] += xr;
661 xr = a[10];
662 a[11] -= xr;
663 a[10] = a[23] - xr;
664 a[23] += xr;
665 xr = a[11];
666 a[26] -= xr;
667 a[11] = a[22] - xr;
668 a[22] += xr;
669 xr = a[26];
670 a[27] -= xr;
671 a[26] = a[7] - xr;
672 a[7] += xr;
673
674 xr = a[27];
675 a[27] = a[6] - xr;
676 a[6] += xr;
677
678 xr = SQRT2 * (a[0] - a[4]);
679 a[0] += a[4];
680 a[4] = xr;
681 xr = SQRT2 * (a[1] - a[5]);
682 a[1] += a[5];
683 a[5] = xr;
684 xr = SQRT2 * (a[16] - a[20]);
685 a[16] += a[20];
686 a[20] = xr;
687 xr = SQRT2 * (a[17] - a[21]);
688 a[17] += a[21];
689 a[21] = xr;
690
691 xr = -SQRT2 * (a[8] - a[12]);
692 a[8] += a[12];
693 a[12] = xr - a[8];
694 xr = -SQRT2 * (a[9] - a[13]);
695 a[9] += a[13];
696 a[13] = xr - a[9];
697 xr = -SQRT2 * (a[25] - a[29]);
698 a[25] += a[29];
699 a[29] = xr - a[25];
700 xr = -SQRT2 * (a[24] + a[28]);
701 a[24] -= a[28];
702 a[28] = xr - a[24];
703
704 xr = a[24] - a[16];
705 a[24] = xr;
706 xr = a[20] - xr;
707 a[20] = xr;
708 xr = a[28] - xr;
709 a[28] = xr;
710
711 xr = a[25] - a[17];
712 a[25] = xr;
713 xr = a[21] - xr;
714 a[21] = xr;
715 xr = a[29] - xr;
716 a[29] = xr;
717
718 xr = a[17] - a[1];
719 a[17] = xr;
720 xr = a[9] - xr;
721 a[9] = xr;
722 xr = a[25] - xr;
723 a[25] = xr;
724 xr = a[5] - xr;
725 a[5] = xr;
726 xr = a[21] - xr;
727 a[21] = xr;
728 xr = a[13] - xr;
729 a[13] = xr;
730 xr = a[29] - xr;
731 a[29] = xr;
732
733 xr = a[1] - a[0];
734 a[1] = xr;
735 xr = a[16] - xr;
736 a[16] = xr;
737 xr = a[17] - xr;
738 a[17] = xr;
739 xr = a[8] - xr;
740 a[8] = xr;
741 xr = a[9] - xr;
742 a[9] = xr;
743 xr = a[24] - xr;
744 a[24] = xr;
745 xr = a[25] - xr;
746 a[25] = xr;
747 xr = a[4] - xr;
748 a[4] = xr;
749 xr = a[5] - xr;
750 a[5] = xr;
751 xr = a[20] - xr;
752 a[20] = xr;
753 xr = a[21] - xr;
754 a[21] = xr;
755 xr = a[12] - xr;
756 a[12] = xr;
757 xr = a[13] - xr;
758 a[13] = xr;
759 xr = a[28] - xr;
760 a[28] = xr;
761 xr = a[29] - xr;
762 a[29] = xr;
763
764 xr = a[0];
765 a[0] += a[31];
766 a[31] -= xr;
767 xr = a[1];
768 a[1] += a[30];
769 a[30] -= xr;
770 xr = a[16];
771 a[16] += a[15];
772 a[15] -= xr;
773 xr = a[17];
774 a[17] += a[14];
775 a[14] -= xr;
776 xr = a[8];
777 a[8] += a[23];
778 a[23] -= xr;
779 xr = a[9];
780 a[9] += a[22];
781 a[22] -= xr;
782 xr = a[24];
783 a[24] += a[7];
784 a[7] -= xr;
785 xr = a[25];
786 a[25] += a[6];
787 a[6] -= xr;
788 xr = a[4];
789 a[4] += a[27];
790 a[27] -= xr;
791 xr = a[5];
792 a[5] += a[26];
793 a[26] -= xr;
794 xr = a[20];
795 a[20] += a[11];
796 a[11] -= xr;
797 xr = a[21];
798 a[21] += a[10];
799 a[10] -= xr;
800 xr = a[12];
801 a[12] += a[19];
802 a[19] -= xr;
803 xr = a[13];
804 a[13] += a[18];
805 a[18] -= xr;
806 xr = a[28];
807 a[28] += a[3];
808 a[3] -= xr;
809 xr = a[29];
810 a[29] += a[2];
811 a[2] -= xr;
812 }
813
814 }
815
816
817 /*-------------------------------------------------------------------*/
818 /* */
819 /* Function: Calculation of the MDCT */
820 /* In the case of long blocks (type 0,1,3) there are */
821 /* 36 coefficents in the time domain and 18 in the frequency */
822 /* domain. */
823 /* In the case of short blocks (type 2) there are 3 */
824 /* transformations with short length. This leads to 12 coefficents */
825 /* in the time and 6 in the frequency domain. In this case the */
826 /* results are stored side by side in the vector out[]. */
827 /* */
828 /* New layer3 */
829 /* */
830 /*-------------------------------------------------------------------*/
831
832 inline static void
mdct_short(FLOAT * inout)833 mdct_short(FLOAT * inout)
834 {
835 int l;
836 for (l = 0; l < 3; l++) {
837 FLOAT tc0, tc1, tc2, ts0, ts1, ts2;
838
839 ts0 = inout[2 * 3] * win[SHORT_TYPE][0] - inout[5 * 3];
840 tc0 = inout[0 * 3] * win[SHORT_TYPE][2] - inout[3 * 3];
841 tc1 = ts0 + tc0;
842 tc2 = ts0 - tc0;
843
844 ts0 = inout[5 * 3] * win[SHORT_TYPE][0] + inout[2 * 3];
845 tc0 = inout[3 * 3] * win[SHORT_TYPE][2] + inout[0 * 3];
846 ts1 = ts0 + tc0;
847 ts2 = -ts0 + tc0;
848
849 tc0 = (inout[1 * 3] * win[SHORT_TYPE][1] - inout[4 * 3]) * 2.069978111953089e-11; /* tritab_s[1] */
850 ts0 = (inout[4 * 3] * win[SHORT_TYPE][1] + inout[1 * 3]) * 2.069978111953089e-11; /* tritab_s[1] */
851
852 inout[3 * 0] = tc1 * 1.907525191737280e-11 /* tritab_s[2] */ + tc0;
853 inout[3 * 5] = -ts1 * 1.907525191737280e-11 /* tritab_s[0] */ + ts0;
854
855 tc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[2] */ ;
856 ts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0;
857 inout[3 * 1] = tc2 - ts1;
858 inout[3 * 2] = tc2 + ts1;
859
860 tc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0;
861 ts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[0] */ ;
862 inout[3 * 3] = tc1 + ts2;
863 inout[3 * 4] = tc1 - ts2;
864
865 inout++;
866 }
867 }
868
869 inline static void
mdct_long(FLOAT * out,FLOAT const * in)870 mdct_long(FLOAT * out, FLOAT const *in)
871 {
872 FLOAT ct, st;
873 {
874 FLOAT tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8;
875 /* 1,2, 5,6, 9,10, 13,14, 17 */
876 tc1 = in[17] - in[9];
877 tc3 = in[15] - in[11];
878 tc4 = in[14] - in[12];
879 ts5 = in[0] + in[8];
880 ts6 = in[1] + in[7];
881 ts7 = in[2] + in[6];
882 ts8 = in[3] + in[5];
883
884 out[17] = (ts5 + ts7 - ts8) - (ts6 - in[4]);
885 st = (ts5 + ts7 - ts8) * cx[7] + (ts6 - in[4]);
886 ct = (tc1 - tc3 - tc4) * cx[6];
887 out[5] = ct + st;
888 out[6] = ct - st;
889
890 tc2 = (in[16] - in[10]) * cx[6];
891 ts6 = ts6 * cx[7] + in[4];
892 ct = tc1 * cx[0] + tc2 + tc3 * cx[1] + tc4 * cx[2];
893 st = -ts5 * cx[4] + ts6 - ts7 * cx[5] + ts8 * cx[3];
894 out[1] = ct + st;
895 out[2] = ct - st;
896
897 ct = tc1 * cx[1] - tc2 - tc3 * cx[2] + tc4 * cx[0];
898 st = -ts5 * cx[5] + ts6 - ts7 * cx[3] + ts8 * cx[4];
899 out[9] = ct + st;
900 out[10] = ct - st;
901
902 ct = tc1 * cx[2] - tc2 + tc3 * cx[0] - tc4 * cx[1];
903 st = ts5 * cx[3] - ts6 + ts7 * cx[4] - ts8 * cx[5];
904 out[13] = ct + st;
905 out[14] = ct - st;
906 }
907 {
908 FLOAT ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8;
909
910 ts1 = in[8] - in[0];
911 ts3 = in[6] - in[2];
912 ts4 = in[5] - in[3];
913 tc5 = in[17] + in[9];
914 tc6 = in[16] + in[10];
915 tc7 = in[15] + in[11];
916 tc8 = in[14] + in[12];
917
918 out[0] = (tc5 + tc7 + tc8) + (tc6 + in[13]);
919 ct = (tc5 + tc7 + tc8) * cx[7] - (tc6 + in[13]);
920 st = (ts1 - ts3 + ts4) * cx[6];
921 out[11] = ct + st;
922 out[12] = ct - st;
923
924 ts2 = (in[7] - in[1]) * cx[6];
925 tc6 = in[13] - tc6 * cx[7];
926 ct = tc5 * cx[3] - tc6 + tc7 * cx[4] + tc8 * cx[5];
927 st = ts1 * cx[2] + ts2 + ts3 * cx[0] + ts4 * cx[1];
928 out[3] = ct + st;
929 out[4] = ct - st;
930
931 ct = -tc5 * cx[5] + tc6 - tc7 * cx[3] - tc8 * cx[4];
932 st = ts1 * cx[1] + ts2 - ts3 * cx[2] - ts4 * cx[0];
933 out[7] = ct + st;
934 out[8] = ct - st;
935
936 ct = -tc5 * cx[4] + tc6 - tc7 * cx[5] - tc8 * cx[3];
937 st = ts1 * cx[0] - ts2 + ts3 * cx[1] - ts4 * cx[2];
938 out[15] = ct + st;
939 out[16] = ct - st;
940 }
941 }
942
943
944 void
mdct_sub48(lame_internal_flags * gfc,const sample_t * w0,const sample_t * w1)945 mdct_sub48(lame_internal_flags * gfc, const sample_t * w0, const sample_t * w1)
946 {
947 SessionConfig_t const *const cfg = &gfc->cfg;
948 EncStateVar_t *const esv = &gfc->sv_enc;
949 int gr, k, ch;
950 const sample_t *wk;
951
952 wk = w0 + 286;
953 /* thinking cache performance, ch->gr loop is better than gr->ch loop */
954 for (ch = 0; ch < cfg->channels_out; ch++) {
955 for (gr = 0; gr < cfg->mode_gr; gr++) {
956 int band;
957 gr_info *const gi = &(gfc->l3_side.tt[gr][ch]);
958 FLOAT *mdct_enc = gi->xr;
959 FLOAT *samp = esv->sb_sample[ch][1 - gr][0];
960
961 for (k = 0; k < 18 / 2; k++) {
962 window_subband(wk, samp);
963 window_subband(wk + 32, samp + 32);
964 samp += 64;
965 wk += 64;
966 /*
967 * Compensate for inversion in the analysis filter
968 */
969 for (band = 1; band < 32; band += 2) {
970 samp[band - 32] *= -1;
971 }
972 }
973
974 /*
975 * Perform imdct of 18 previous subband samples
976 * + 18 current subband samples
977 */
978 for (band = 0; band < 32; band++, mdct_enc += 18) {
979 int type = gi->block_type;
980 FLOAT const *const band0 = esv->sb_sample[ch][gr][0] + order[band];
981 FLOAT *const band1 = esv->sb_sample[ch][1 - gr][0] + order[band];
982 if (gi->mixed_block_flag && band < 2)
983 type = 0;
984 if (esv->amp_filter[band] < 1e-12) {
985 memset(mdct_enc, 0, 18 * sizeof(FLOAT));
986 }
987 else {
988 if (esv->amp_filter[band] < 1.0) {
989 for (k = 0; k < 18; k++)
990 band1[k * 32] *= esv->amp_filter[band];
991 }
992 if (type == SHORT_TYPE) {
993 for (k = -NS / 4; k < 0; k++) {
994 FLOAT const w = win[SHORT_TYPE][k + 3];
995 mdct_enc[k * 3 + 9] = band0[(9 + k) * 32] * w - band0[(8 - k) * 32];
996 mdct_enc[k * 3 + 18] = band0[(14 - k) * 32] * w + band0[(15 + k) * 32];
997 mdct_enc[k * 3 + 10] = band0[(15 + k) * 32] * w - band0[(14 - k) * 32];
998 mdct_enc[k * 3 + 19] = band1[(2 - k) * 32] * w + band1[(3 + k) * 32];
999 mdct_enc[k * 3 + 11] = band1[(3 + k) * 32] * w - band1[(2 - k) * 32];
1000 mdct_enc[k * 3 + 20] = band1[(8 - k) * 32] * w + band1[(9 + k) * 32];
1001 }
1002 mdct_short(mdct_enc);
1003 }
1004 else {
1005 FLOAT work[18];
1006 for (k = -NL / 4; k < 0; k++) {
1007 FLOAT a, b;
1008 a = win[type][k + 27] * band1[(k + 9) * 32]
1009 + win[type][k + 36] * band1[(8 - k) * 32];
1010 b = win[type][k + 9] * band0[(k + 9) * 32]
1011 - win[type][k + 18] * band0[(8 - k) * 32];
1012 work[k + 9] = a - b * tantab_l[k + 9];
1013 work[k + 18] = a * tantab_l[k + 9] + b;
1014 }
1015
1016 mdct_long(mdct_enc, work);
1017 }
1018 }
1019 /*
1020 * Perform aliasing reduction butterfly
1021 */
1022 if (type != SHORT_TYPE && band != 0) {
1023 for (k = 7; k >= 0; --k) {
1024 FLOAT bu, bd;
1025 bu = mdct_enc[k] * ca[k] + mdct_enc[-1 - k] * cs[k];
1026 bd = mdct_enc[k] * cs[k] - mdct_enc[-1 - k] * ca[k];
1027
1028 mdct_enc[-1 - k] = bu;
1029 mdct_enc[k] = bd;
1030 }
1031 }
1032 }
1033 }
1034 wk = w1 + 286;
1035 if (cfg->mode_gr == 1) {
1036 memcpy(esv->sb_sample[ch][0], esv->sb_sample[ch][1], 576 * sizeof(FLOAT));
1037 }
1038 }
1039 }
1040