]> 4ch.mooo.com Git - 16.git/blob - src/lib/doslib/ext/lame/newmdct.c
596cac919da22889cad11076ca15b5b667d073d3
[16.git] / src / lib / doslib / ext / lame / newmdct.c
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 "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
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
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
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
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 }