2 |
- |
1 |
/*
|
|
|
2 |
* MP3 window subband -> subband filtering -> mdct routine
|
|
|
3 |
*
|
|
|
4 |
* Copyright (c) 1999 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.25 2001/01/17 09:54:20 robert Exp $ */
|
|
|
28 |
|
|
|
29 |
#ifdef HAVE_CONFIG_H
|
|
|
30 |
# include <config.h>
|
|
|
31 |
#endif
|
|
|
32 |
|
|
|
33 |
#include "util.h"
|
|
|
34 |
#include "l3side.h"
|
|
|
35 |
#include "newmdct.h"
|
|
|
36 |
|
|
|
37 |
#ifdef WITH_DMALLOC
|
|
|
38 |
#include <dmalloc.h>
|
|
|
39 |
#endif
|
|
|
40 |
|
|
|
41 |
#define SCALE (32768.0/ 2.384e-06)
|
|
|
42 |
|
|
|
43 |
#ifndef USE_GOGO_SUBBAND
|
|
|
44 |
static const FLOAT8 enwindow[] =
|
|
|
45 |
{
|
|
|
46 |
-4.77e-07*0.740951125354959/2.384e-06, 1.03951e-04*0.740951125354959/2.384e-06, 9.53674e-04*0.740951125354959/2.384e-06, 2.841473e-03*0.740951125354959/2.384e-06,
|
|
|
47 |
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*/
|
|
|
48 |
1.2398e-05*0.740951125354959/2.384e-06, 1.91212e-04*0.740951125354959/2.384e-06, 2.283096e-03*0.740951125354959/2.384e-06,1.6994476e-02*0.740951125354959/2.384e-06,
|
|
|
49 |
-1.8756866e-02*0.740951125354959/2.384e-06,-2.630711e-03*0.740951125354959/2.384e-06, -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, 9.30786e-04*0.773010453362737/2.384e-06, 2.521515e-03*0.773010453362737/2.384e-06,
|
|
|
55 |
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*/
|
|
|
56 |
1.1444e-05*0.773010453362737/2.384e-06, 1.65462e-04*0.773010453362737/2.384e-06, 2.110004e-03*0.773010453362737/2.384e-06,1.6112804e-02*0.773010453362737/2.384e-06,
|
|
|
57 |
-1.9634247e-02*0.773010453362737/2.384e-06,-2.803326e-03*0.773010453362737/2.384e-06, -2.77042e-04*0.773010453362737/2.384e-06, -1.6689e-05*0.773010453362737/2.384e-06,
|
|
|
58 |
8.206787908286602e-01,
|
|
|
59 |
3.901806440322567e-01,
|
|
|
60 |
|
|
|
61 |
|
|
|
62 |
-4.77e-07*0.803207531480645/2.384e-06, 1.07288e-04*0.803207531480645/2.384e-06, 9.02653e-04*0.803207531480645/2.384e-06, 2.174854e-03*0.803207531480645/2.384e-06,
|
|
|
63 |
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*/
|
|
|
64 |
1.0014e-05*0.803207531480645/2.384e-06, 1.40190e-04*0.803207531480645/2.384e-06, 1.937389e-03*0.803207531480645/2.384e-06,1.5233517e-02*0.803207531480645/2.384e-06,
|
|
|
65 |
-2.0506859e-02*0.803207531480645/2.384e-06,-2.974033e-03*0.803207531480645/2.384e-06, -3.07560e-04*0.803207531480645/2.384e-06, -1.8120e-05*0.803207531480645/2.384e-06,
|
|
|
66 |
7.416505462720353e-01,
|
|
|
67 |
5.805693545089249e-01,
|
|
|
68 |
|
|
|
69 |
|
|
|
70 |
-4.77e-07*0.831469612302545/2.384e-06, 1.08242e-04*0.831469612302545/2.384e-06, 8.68797e-04*0.831469612302545/2.384e-06, 1.800537e-03*0.831469612302545/2.384e-06,
|
|
|
71 |
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*/
|
|
|
72 |
9.060e-06*0.831469612302545/2.384e-06, 1.16348e-04*0.831469612302545/2.384e-06, 1.766682e-03*0.831469612302545/2.384e-06,1.4358521e-02*0.831469612302545/2.384e-06,
|
|
|
73 |
-2.1372318e-02*0.831469612302545/2.384e-06, -3.14188e-03*0.831469612302545/2.384e-06, -3.39031e-04*0.831469612302545/2.384e-06, -1.9550e-05*0.831469612302545/2.384e-06,
|
|
|
74 |
6.681786379192989e-01,
|
|
|
75 |
7.653668647301797e-01,
|
|
|
76 |
|
|
|
77 |
|
|
|
78 |
-4.77e-07*0.857728610000272/2.384e-06, 1.08719e-04*0.857728610000272/2.384e-06, 8.29220e-04*0.857728610000272/2.384e-06, 1.399517e-03*0.857728610000272/2.384e-06,
|
|
|
79 |
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*/
|
|
|
80 |
8.106e-06*0.857728610000272/2.384e-06, 9.3937e-05*0.857728610000272/2.384e-06, 1.597881e-03*0.857728610000272/2.384e-06,1.3489246e-02*0.857728610000272/2.384e-06,
|
|
|
81 |
-2.2228718e-02*0.857728610000272/2.384e-06,-3.306866e-03*0.857728610000272/2.384e-06, -3.71456e-04*0.857728610000272/2.384e-06, -2.1458e-05*0.857728610000272/2.384e-06,
|
|
|
82 |
5.993769336819237e-01,
|
|
|
83 |
9.427934736519954e-01,
|
|
|
84 |
|
|
|
85 |
|
|
|
86 |
-4.77e-07*0.881921264348355/2.384e-06, 1.08719e-04*0.881921264348355/2.384e-06, 7.8392e-04*0.881921264348355/2.384e-06, 9.71317e-04*0.881921264348355/2.384e-06,
|
|
|
87 |
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*/
|
|
|
88 |
7.629e-06*0.881921264348355/2.384e-06, 7.2956e-05*0.881921264348355/2.384e-06, 1.432419e-03*0.881921264348355/2.384e-06,1.2627602e-02*0.881921264348355/2.384e-06,
|
|
|
89 |
-2.3074150e-02*0.881921264348355/2.384e-06,-3.467083e-03*0.881921264348355/2.384e-06, -4.04358e-04*0.881921264348355/2.384e-06, -2.3365e-05*0.881921264348355/2.384e-06,
|
|
|
90 |
5.345111359507916e-01,
|
|
|
91 |
1.111140466039205e+00,
|
|
|
92 |
|
|
|
93 |
|
|
|
94 |
-9.54e-07*0.903989293123443/2.384e-06, 1.08242e-04*0.903989293123443/2.384e-06, 7.31945e-04*0.903989293123443/2.384e-06, 5.15938e-04*0.903989293123443/2.384e-06,
|
|
|
95 |
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*/
|
|
|
96 |
6.676e-06*0.903989293123443/2.384e-06, 5.2929e-05*0.903989293123443/2.384e-06, 1.269817e-03*0.903989293123443/2.384e-06,1.1775017e-02*0.903989293123443/2.384e-06,
|
|
|
97 |
-2.3907185e-02*0.903989293123443/2.384e-06,-3.622532e-03*0.903989293123443/2.384e-06, -4.38213e-04*0.903989293123443/2.384e-06, -2.5272e-05*0.903989293123443/2.384e-06,
|
|
|
98 |
4.729647758913199e-01,
|
|
|
99 |
1.268786568327291e+00,
|
|
|
100 |
|
|
|
101 |
|
|
|
102 |
-9.54e-07*0.92387953251128675613/2.384e-06, 1.06812e-04*0.92387953251128675613/2.384e-06, 6.74248e-04*0.92387953251128675613/2.384e-06, 3.3379e-05*0.92387953251128675613/2.384e-06,
|
|
|
103 |
3.4412861e-02*0.92387953251128675613/2.384e-06, 4.573822e-03*0.92387953251128675613/2.384e-06, 9.54151e-04*0.92387953251128675613/2.384e-06, 7.6771e-05*0.92387953251128675613/2.384e-06,
|
|
|
104 |
6.199e-06*0.92387953251128675613/2.384e-06, 3.4332e-05*0.92387953251128675613/2.384e-06, 1.111031e-03*0.92387953251128675613/2.384e-06,1.0933399e-02*0.92387953251128675613/2.384e-06,
|
|
|
105 |
-2.4725437e-02*0.92387953251128675613/2.384e-06,-3.771782e-03*0.92387953251128675613/2.384e-06, -4.72546e-04*0.92387953251128675613/2.384e-06, -2.7657e-05*0.92387953251128675613/2.384e-06,
|
|
|
106 |
4.1421356237309504879e-01, /* tan(PI/8) */
|
|
|
107 |
1.414213562373095e+00,
|
|
|
108 |
|
|
|
109 |
|
|
|
110 |
-9.54e-07*0.941544065183021/2.384e-06, 1.05381e-04*0.941544065183021/2.384e-06, 6.10352e-04*0.941544065183021/2.384e-06, -4.75883e-04*0.941544065183021/2.384e-06,
|
|
|
111 |
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*/
|
|
|
112 |
5.245e-06*0.941544065183021/2.384e-06, 1.7166e-05*0.941544065183021/2.384e-06, 9.56535e-04*0.941544065183021/2.384e-06,1.0103703e-02*0.941544065183021/2.384e-06,
|
|
|
113 |
-2.5527000e-02*0.941544065183021/2.384e-06,-3.914356e-03*0.941544065183021/2.384e-06, -5.07355e-04*0.941544065183021/2.384e-06, -3.0041e-05*0.941544065183021/2.384e-06,
|
|
|
114 |
3.578057213145241e-01,
|
|
|
115 |
1.546020906725474e+00,
|
|
|
116 |
|
|
|
117 |
|
|
|
118 |
-9.54e-07*0.956940335732209/2.384e-06, 1.02520e-04*0.956940335732209/2.384e-06, 5.39303e-04*0.956940335732209/2.384e-06,-1.011848e-03*0.956940335732209/2.384e-06,
|
|
|
119 |
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*/
|
|
|
120 |
4.768e-06*0.956940335732209/2.384e-06, 9.54e-07*0.956940335732209/2.384e-06, 8.06808e-04*0.956940335732209/2.384e-06, 9.287834e-03*0.956940335732209/2.384e-06,
|
|
|
121 |
-2.6310921e-02*0.956940335732209/2.384e-06,-4.048824e-03*0.956940335732209/2.384e-06, -5.42164e-04*0.956940335732209/2.384e-06, -3.2425e-05*0.956940335732209/2.384e-06,
|
|
|
122 |
3.033466836073424e-01,
|
|
|
123 |
1.662939224605090e+00,
|
|
|
124 |
|
|
|
125 |
|
|
|
126 |
-1.431e-06*0.970031253194544/2.384e-06, 9.9182e-05*0.970031253194544/2.384e-06, 4.62532e-04*0.970031253194544/2.384e-06,-1.573563e-03*0.970031253194544/2.384e-06,
|
|
|
127 |
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*/
|
|
|
128 |
4.292e-06*0.970031253194544/2.384e-06, -1.3828e-05*0.970031253194544/2.384e-06, 6.61850e-04*0.970031253194544/2.384e-06, 8.487225e-03*0.970031253194544/2.384e-06,
|
|
|
129 |
-2.7073860e-02*0.970031253194544/2.384e-06,-4.174709e-03*0.970031253194544/2.384e-06, -5.76973e-04*0.970031253194544/2.384e-06, -3.4809e-05*0.970031253194544/2.384e-06,
|
|
|
130 |
2.504869601913055e-01,
|
|
|
131 |
1.763842528696710e+00,
|
|
|
132 |
|
|
|
133 |
|
|
|
134 |
-1.431e-06*0.98078528040323/2.384e-06, 9.5367e-05*0.98078528040323/2.384e-06, 3.78609e-04*0.98078528040323/2.384e-06,-2.161503e-03*0.98078528040323/2.384e-06,
|
|
|
135 |
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*/
|
|
|
136 |
3.815e-06*0.98078528040323/2.384e-06, -2.718e-05*0.98078528040323/2.384e-06, 5.22137e-04*0.98078528040323/2.384e-06, 7.703304e-03*0.98078528040323/2.384e-06,
|
|
|
137 |
-2.7815342e-02*0.98078528040323/2.384e-06,-4.290581e-03*0.98078528040323/2.384e-06, -6.11782e-04*0.98078528040323/2.384e-06, -3.7670e-05*0.98078528040323/2.384e-06,
|
|
|
138 |
1.989123673796580e-01,
|
|
|
139 |
1.847759065022573e+00,
|
|
|
140 |
|
|
|
141 |
|
|
|
142 |
-1.907e-06*0.989176509964781/2.384e-06, 9.0122e-05*0.989176509964781/2.384e-06, 2.88486e-04*0.989176509964781/2.384e-06,-2.774239e-03*0.989176509964781/2.384e-06,
|
|
|
143 |
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*/
|
|
|
144 |
3.338e-06*0.989176509964781/2.384e-06, -3.9577e-05*0.989176509964781/2.384e-06, 3.88145e-04*0.989176509964781/2.384e-06, 6.937027e-03*0.989176509964781/2.384e-06,
|
|
|
145 |
-2.8532982e-02*0.989176509964781/2.384e-06,-4.395962e-03*0.989176509964781/2.384e-06, -6.46591e-04*0.989176509964781/2.384e-06, -4.0531e-05*0.989176509964781/2.384e-06,
|
|
|
146 |
1.483359875383474e-01,
|
|
|
147 |
1.913880671464418e+00,
|
|
|
148 |
|
|
|
149 |
|
|
|
150 |
-1.907e-06*0.995184726672197/2.384e-06, 8.4400e-05*0.995184726672197/2.384e-06, 1.91689e-04*0.995184726672197/2.384e-06,-3.411293e-03*0.995184726672197/2.384e-06,
|
|
|
151 |
3.1706810e-02*0.995184726672197/2.384e-06, 4.728317e-03*0.995184726672197/2.384e-06, 8.09669e-04*0.995184726672197/2.384e-06, 5.579e-05*0.995184726672197/2.384e-06,
|
|
|
152 |
3.338e-06*0.995184726672197/2.384e-06, -5.0545e-05*0.995184726672197/2.384e-06, 2.59876e-04*0.995184726672197/2.384e-06, 6.189346e-03*0.995184726672197/2.384e-06,
|
|
|
153 |
-2.9224873e-02*0.995184726672197/2.384e-06,-4.489899e-03*0.995184726672197/2.384e-06, -6.80923e-04*0.995184726672197/2.384e-06, -4.3392e-05*0.995184726672197/2.384e-06,
|
|
|
154 |
9.849140335716425e-02,
|
|
|
155 |
1.961570560806461e+00,
|
|
|
156 |
|
|
|
157 |
|
|
|
158 |
-2.384e-06*0.998795456205172/2.384e-06, 7.7724e-05*0.998795456205172/2.384e-06, 8.8215e-05*0.998795456205172/2.384e-06,-4.072189e-03*0.998795456205172/2.384e-06,
|
|
|
159 |
3.1132698e-02*0.998795456205172/2.384e-06, 4.691124e-03*0.998795456205172/2.384e-06, 7.79152e-04*0.998795456205172/2.384e-06, 5.2929e-05*0.998795456205172/2.384e-06,
|
|
|
160 |
2.861e-06*0.998795456205172/2.384e-06, -6.0558e-05*0.998795456205172/2.384e-06, 1.37329e-04*0.998795456205172/2.384e-06, 5.462170e-03*0.998795456205172/2.384e-06,
|
|
|
161 |
-2.9890060e-02*0.998795456205172/2.384e-06,-4.570484e-03*0.998795456205172/2.384e-06, -7.14302e-04*0.998795456205172/2.384e-06, -4.6253e-05*0.998795456205172/2.384e-06,
|
|
|
162 |
4.912684976946725e-02,
|
|
|
163 |
1.990369453344394e+00,
|
|
|
164 |
|
|
|
165 |
|
|
|
166 |
3.5780907e-02 * SQRT2*0.5/2.384e-06,1.7876148e-02 * SQRT2*0.5/2.384e-06, 3.134727e-03 * SQRT2*0.5/2.384e-06, 2.457142e-03 * SQRT2*0.5/2.384e-06,
|
|
|
167 |
9.71317e-04 * SQRT2*0.5/2.384e-06, 2.18868e-04 * SQRT2*0.5/2.384e-06, 1.01566e-04 * SQRT2*0.5/2.384e-06, 1.3828e-05 * SQRT2*0.5/2.384e-06,
|
|
|
168 |
|
|
|
169 |
3.0526638e-02/2.384e-06, 4.638195e-03/2.384e-06, 7.47204e-04/2.384e-06, 4.9591e-05/2.384e-06,
|
|
|
170 |
4.756451e-03/2.384e-06, 2.1458e-05/2.384e-06, -6.9618e-05/2.384e-06,/* 2.384e-06/2.384e-06*/
|
|
|
171 |
};
|
|
|
172 |
#endif
|
|
|
173 |
|
|
|
174 |
|
|
|
175 |
#define NS 12
|
|
|
176 |
#define NL 36
|
|
|
177 |
|
|
|
178 |
static const FLOAT8 win[4][NL] = {
|
|
|
179 |
{
|
|
|
180 |
2.382191739347913e-13,
|
|
|
181 |
6.423305872147834e-13,
|
|
|
182 |
9.400849094049688e-13,
|
|
|
183 |
1.122435026096556e-12,
|
|
|
184 |
1.183840321267481e-12,
|
|
|
185 |
1.122435026096556e-12,
|
|
|
186 |
9.400849094049690e-13,
|
|
|
187 |
6.423305872147839e-13,
|
|
|
188 |
2.382191739347918e-13,
|
|
|
189 |
|
|
|
190 |
5.456116108943412e-12,
|
|
|
191 |
4.878985199565852e-12,
|
|
|
192 |
4.240448995017367e-12,
|
|
|
193 |
3.559909094758252e-12,
|
|
|
194 |
2.858043359288075e-12,
|
|
|
195 |
2.156177623817898e-12,
|
|
|
196 |
1.475637723558783e-12,
|
|
|
197 |
8.371015190102974e-13,
|
|
|
198 |
2.599706096327376e-13,
|
|
|
199 |
|
|
|
200 |
-5.456116108943412e-12,
|
|
|
201 |
-4.878985199565852e-12,
|
|
|
202 |
-4.240448995017367e-12,
|
|
|
203 |
-3.559909094758252e-12,
|
|
|
204 |
-2.858043359288076e-12,
|
|
|
205 |
-2.156177623817898e-12,
|
|
|
206 |
-1.475637723558783e-12,
|
|
|
207 |
-8.371015190102975e-13,
|
|
|
208 |
-2.599706096327376e-13,
|
|
|
209 |
|
|
|
210 |
-2.382191739347923e-13,
|
|
|
211 |
-6.423305872147843e-13,
|
|
|
212 |
-9.400849094049696e-13,
|
|
|
213 |
-1.122435026096556e-12,
|
|
|
214 |
-1.183840321267481e-12,
|
|
|
215 |
-1.122435026096556e-12,
|
|
|
216 |
-9.400849094049694e-13,
|
|
|
217 |
-6.423305872147840e-13,
|
|
|
218 |
-2.382191739347918e-13,
|
|
|
219 |
},
|
|
|
220 |
{
|
|
|
221 |
2.382191739347913e-13,
|
|
|
222 |
6.423305872147834e-13,
|
|
|
223 |
9.400849094049688e-13,
|
|
|
224 |
1.122435026096556e-12,
|
|
|
225 |
1.183840321267481e-12,
|
|
|
226 |
1.122435026096556e-12,
|
|
|
227 |
9.400849094049688e-13,
|
|
|
228 |
6.423305872147841e-13,
|
|
|
229 |
2.382191739347918e-13,
|
|
|
230 |
|
|
|
231 |
5.456116108943413e-12,
|
|
|
232 |
4.878985199565852e-12,
|
|
|
233 |
4.240448995017367e-12,
|
|
|
234 |
3.559909094758253e-12,
|
|
|
235 |
2.858043359288075e-12,
|
|
|
236 |
2.156177623817898e-12,
|
|
|
237 |
1.475637723558782e-12,
|
|
|
238 |
8.371015190102975e-13,
|
|
|
239 |
2.599706096327376e-13,
|
|
|
240 |
|
|
|
241 |
-5.461314069809755e-12,
|
|
|
242 |
-4.921085770524055e-12,
|
|
|
243 |
-4.343405037091838e-12,
|
|
|
244 |
-3.732668368707687e-12,
|
|
|
245 |
-3.093523840190885e-12,
|
|
|
246 |
-2.430835727329465e-12,
|
|
|
247 |
-1.734679010007751e-12,
|
|
|
248 |
-9.748253656609281e-13,
|
|
|
249 |
-2.797435120168326e-13,
|
|
|
250 |
|
|
|
251 |
0.000000000000000e+00,
|
|
|
252 |
0.000000000000000e+00,
|
|
|
253 |
0.000000000000000e+00,
|
|
|
254 |
0.000000000000000e+00,
|
|
|
255 |
0.000000000000000e+00,
|
|
|
256 |
0.000000000000000e+00,
|
|
|
257 |
-2.283748241799531e-13,
|
|
|
258 |
-4.037858874020686e-13,
|
|
|
259 |
-2.146547464825323e-13,
|
|
|
260 |
},
|
|
|
261 |
{
|
|
|
262 |
1.316524975873958e-01, /* win[SHORT_TYPE] */
|
|
|
263 |
4.142135623730950e-01,
|
|
|
264 |
7.673269879789602e-01,
|
|
|
265 |
|
|
|
266 |
1.091308501069271e+00, /* tantab_l */
|
|
|
267 |
1.303225372841206e+00,
|
|
|
268 |
1.569685577117490e+00,
|
|
|
269 |
1.920982126971166e+00,
|
|
|
270 |
2.414213562373094e+00,
|
|
|
271 |
3.171594802363212e+00,
|
|
|
272 |
4.510708503662055e+00,
|
|
|
273 |
7.595754112725146e+00,
|
|
|
274 |
2.290376554843115e+01,
|
|
|
275 |
|
|
|
276 |
0.98480775301220802032, /* cx */
|
|
|
277 |
0.64278760968653936292,
|
|
|
278 |
0.34202014332566882393,
|
|
|
279 |
0.93969262078590842791,
|
|
|
280 |
-0.17364817766693030343,
|
|
|
281 |
-0.76604444311897790243,
|
|
|
282 |
0.86602540378443870761,
|
|
|
283 |
0.500000000000000e+00,
|
|
|
284 |
|
|
|
285 |
-5.144957554275265e-01, /* ca */
|
|
|
286 |
-4.717319685649723e-01,
|
|
|
287 |
-3.133774542039019e-01,
|
|
|
288 |
-1.819131996109812e-01,
|
|
|
289 |
-9.457419252642064e-02,
|
|
|
290 |
-4.096558288530405e-02,
|
|
|
291 |
-1.419856857247115e-02,
|
|
|
292 |
-3.699974673760037e-03,
|
|
|
293 |
|
|
|
294 |
8.574929257125442e-01, /* cs */
|
|
|
295 |
8.817419973177052e-01,
|
|
|
296 |
9.496286491027329e-01,
|
|
|
297 |
9.833145924917901e-01,
|
|
|
298 |
9.955178160675857e-01,
|
|
|
299 |
9.991605581781475e-01,
|
|
|
300 |
9.998991952444470e-01,
|
|
|
301 |
9.999931550702802e-01,
|
|
|
302 |
},
|
|
|
303 |
{
|
|
|
304 |
0.000000000000000e+00,
|
|
|
305 |
0.000000000000000e+00,
|
|
|
306 |
0.000000000000000e+00,
|
|
|
307 |
0.000000000000000e+00,
|
|
|
308 |
0.000000000000000e+00,
|
|
|
309 |
0.000000000000000e+00,
|
|
|
310 |
2.283748241799531e-13,
|
|
|
311 |
4.037858874020686e-13,
|
|
|
312 |
2.146547464825323e-13,
|
|
|
313 |
|
|
|
314 |
5.461314069809755e-12,
|
|
|
315 |
4.921085770524055e-12,
|
|
|
316 |
4.343405037091838e-12,
|
|
|
317 |
3.732668368707687e-12,
|
|
|
318 |
3.093523840190885e-12,
|
|
|
319 |
2.430835727329466e-12,
|
|
|
320 |
1.734679010007751e-12,
|
|
|
321 |
9.748253656609281e-13,
|
|
|
322 |
2.797435120168326e-13,
|
|
|
323 |
|
|
|
324 |
-5.456116108943413e-12,
|
|
|
325 |
-4.878985199565852e-12,
|
|
|
326 |
-4.240448995017367e-12,
|
|
|
327 |
-3.559909094758253e-12,
|
|
|
328 |
-2.858043359288075e-12,
|
|
|
329 |
-2.156177623817898e-12,
|
|
|
330 |
-1.475637723558782e-12,
|
|
|
331 |
-8.371015190102975e-13,
|
|
|
332 |
-2.599706096327376e-13,
|
|
|
333 |
|
|
|
334 |
-2.382191739347913e-13,
|
|
|
335 |
-6.423305872147834e-13,
|
|
|
336 |
-9.400849094049688e-13,
|
|
|
337 |
-1.122435026096556e-12,
|
|
|
338 |
-1.183840321267481e-12,
|
|
|
339 |
-1.122435026096556e-12,
|
|
|
340 |
-9.400849094049688e-13,
|
|
|
341 |
-6.423305872147841e-13,
|
|
|
342 |
-2.382191739347918e-13,
|
|
|
343 |
}
|
|
|
344 |
};
|
|
|
345 |
|
|
|
346 |
#define tantab_l (win[SHORT_TYPE]+3)
|
|
|
347 |
#define cx (win[SHORT_TYPE]+12)
|
|
|
348 |
#define ca (win[SHORT_TYPE]+20)
|
|
|
349 |
#define cs (win[SHORT_TYPE]+28)
|
|
|
350 |
|
|
|
351 |
/************************************************************************
|
|
|
352 |
*
|
|
|
353 |
* window_subband()
|
|
|
354 |
*
|
|
|
355 |
* PURPOSE: Overlapping window on PCM samples
|
|
|
356 |
*
|
|
|
357 |
* SEMANTICS:
|
|
|
358 |
* 32 16-bit pcm samples are scaled to fractional 2's complement and
|
|
|
359 |
* concatenated to the end of the window buffer #x#. The updated window
|
|
|
360 |
* buffer #x# is then windowed by the analysis window #c# to produce the
|
|
|
361 |
* windowed sample #z#
|
|
|
362 |
*
|
|
|
363 |
************************************************************************/
|
|
|
364 |
|
|
|
365 |
/*
|
|
|
366 |
* new IDCT routine written by Takehiro TOMINAGA
|
|
|
367 |
*/
|
|
|
368 |
static const int order[] = {
|
|
|
369 |
0, 1,16,17, 8, 9,24,25, 4, 5,20,21,12,13,28,29,
|
|
|
370 |
2, 3,18,19,10,11,26,27, 6, 7,22,23,14,15,30,31
|
|
|
371 |
};
|
|
|
372 |
|
|
|
373 |
|
|
|
374 |
/* returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 */
|
|
|
375 |
INLINE static void
|
|
|
376 |
window_subband(const sample_t *x1, FLOAT8 a[SBLIMIT])
|
|
|
377 |
{
|
|
|
378 |
int i;
|
|
|
379 |
FLOAT8 const *wp = enwindow+10;
|
|
|
380 |
|
|
|
381 |
const sample_t *x2 = &x1[238-14-286];
|
|
|
382 |
|
|
|
383 |
for (i = -15; i < 0; i++) {
|
|
|
384 |
FLOAT8 w, s, t;
|
|
|
385 |
|
|
|
386 |
w = wp[-10]; s = x2[-224] * w; t = x1[ 224] * w;
|
|
|
387 |
w = wp[-9]; s += x2[-160] * w; t += x1[ 160] * w;
|
|
|
388 |
w = wp[-8]; s += x2[- 96] * w; t += x1[ 96] * w;
|
|
|
389 |
w = wp[-7]; s += x2[- 32] * w; t += x1[ 32] * w;
|
|
|
390 |
w = wp[-6]; s += x2[ 32] * w; t += x1[- 32] * w;
|
|
|
391 |
w = wp[-5]; s += x2[ 96] * w; t += x1[- 96] * w;
|
|
|
392 |
w = wp[-4]; s += x2[ 160] * w; t += x1[-160] * w;
|
|
|
393 |
w = wp[-3]; s += x2[ 224] * w; t += x1[-224] * w;
|
|
|
394 |
|
|
|
395 |
w = wp[-2]; s += x1[-256] * w; t -= x2[ 256] * w;
|
|
|
396 |
w = wp[-1]; s += x1[-192] * w; t -= x2[ 192] * w;
|
|
|
397 |
w = wp[ 0]; s += x1[-128] * w; t -= x2[ 128] * w;
|
|
|
398 |
w = wp[ 1]; s += x1[- 64] * w; t -= x2[ 64] * w;
|
|
|
399 |
w = wp[ 2]; s += x1[ 0] * w; t -= x2[ 0] * w;
|
|
|
400 |
w = wp[ 3]; s += x1[ 64] * w; t -= x2[- 64] * w;
|
|
|
401 |
w = wp[ 4]; s += x1[ 128] * w; t -= x2[-128] * w;
|
|
|
402 |
w = wp[ 5]; s += x1[ 192] * w; t -= x2[-192] * w;
|
|
|
403 |
|
|
|
404 |
/*
|
|
|
405 |
* this multiplyer could be removed, but it needs more 256 FLOAT data.
|
|
|
406 |
* thinking about the data cache performance, I think we should not
|
|
|
407 |
* use such a huge table. tt 2000/Oct/25
|
|
|
408 |
*/
|
|
|
409 |
s *= wp[6];
|
|
|
410 |
w = t - s;
|
|
|
411 |
a[30+i*2] = t + s;
|
|
|
412 |
a[31+i*2] = wp[7] * w;
|
|
|
413 |
wp += 18;
|
|
|
414 |
x1--;
|
|
|
415 |
x2++;
|
|
|
416 |
}
|
|
|
417 |
{
|
|
|
418 |
FLOAT8 s,t,u,v;
|
|
|
419 |
t = x1[- 16] * wp[-10]; s = x1[ -32] * wp[-2];
|
|
|
420 |
t += (x1[- 48] - x1[ 16]) * wp[-9]; s += x1[ -96] * wp[-1];
|
|
|
421 |
t += (x1[- 80] + x1[ 48]) * wp[-8]; s += x1[-160] * wp[ 0];
|
|
|
422 |
t += (x1[-112] - x1[ 80]) * wp[-7]; s += x1[-224] * wp[ 1];
|
|
|
423 |
t += (x1[-144] + x1[112]) * wp[-6]; s -= x1[ 32] * wp[ 2];
|
|
|
424 |
t += (x1[-176] - x1[144]) * wp[-5]; s -= x1[ 96] * wp[ 3];
|
|
|
425 |
t += (x1[-208] + x1[176]) * wp[-4]; s -= x1[ 160] * wp[ 4];
|
|
|
426 |
t += (x1[-240] - x1[208]) * wp[-3]; s -= x1[ 224];
|
|
|
427 |
|
|
|
428 |
u = s - t;
|
|
|
429 |
v = s + t;
|
|
|
430 |
|
|
|
431 |
t = a[14];
|
|
|
432 |
s = a[15] - t;
|
|
|
433 |
|
|
|
434 |
a[31] = v + t; // A0
|
|
|
435 |
a[30] = u + s; // A1
|
|
|
436 |
a[15] = u - s; // A2
|
|
|
437 |
a[14] = v - t; // A3
|
|
|
438 |
}
|
|
|
439 |
{
|
|
|
440 |
FLOAT8 xr;
|
|
|
441 |
xr = a[28] - a[ 0]; a[ 0] += a[28]; a[28] = xr * wp[-2*18+7];
|
|
|
442 |
xr = a[29] - a[ 1]; a[ 1] += a[29]; a[29] = xr * wp[-2*18+7];
|
|
|
443 |
|
|
|
444 |
xr = a[26] - a[ 2]; a[ 2] += a[26]; a[26] = xr * wp[-4*18+7];
|
|
|
445 |
xr = a[27] - a[ 3]; a[ 3] += a[27]; a[27] = xr * wp[-4*18+7];
|
|
|
446 |
|
|
|
447 |
xr = a[24] - a[ 4]; a[ 4] += a[24]; a[24] = xr * wp[-6*18+7];
|
|
|
448 |
xr = a[25] - a[ 5]; a[ 5] += a[25]; a[25] = xr * wp[-6*18+7];
|
|
|
449 |
|
|
|
450 |
xr = a[22] - a[ 6]; a[ 6] += a[22]; a[22] = xr * SQRT2;
|
|
|
451 |
xr = a[23] - a[ 7]; a[ 7] += a[23]; a[23] = xr * SQRT2 - a[ 7];
|
|
|
452 |
a[ 7] -= a[ 6];
|
|
|
453 |
a[22] -= a[ 7];
|
|
|
454 |
a[23] -= a[22];
|
|
|
455 |
|
|
|
456 |
xr = a[ 6]; a[ 6] = a[31] - xr; a[31] = a[31] + xr;
|
|
|
457 |
xr = a[ 7]; a[ 7] = a[30] - xr; a[30] = a[30] + xr;
|
|
|
458 |
xr = a[22]; a[22] = a[15] - xr; a[15] = a[15] + xr;
|
|
|
459 |
xr = a[23]; a[23] = a[14] - xr; a[14] = a[14] + xr;
|
|
|
460 |
|
|
|
461 |
xr = a[20] - a[ 8]; a[ 8] += a[20]; a[20] = xr * wp[-10*18+7];
|
|
|
462 |
xr = a[21] - a[ 9]; a[ 9] += a[21]; a[21] = xr * wp[-10*18+7];
|
|
|
463 |
|
|
|
464 |
xr = a[18] - a[10]; a[10] += a[18]; a[18] = xr * wp[-12*18+7];
|
|
|
465 |
xr = a[19] - a[11]; a[11] += a[19]; a[19] = xr * wp[-12*18+7];
|
|
|
466 |
|
|
|
467 |
xr = a[16] - a[12]; a[12] += a[16]; a[16] = xr * wp[-14*18+7];
|
|
|
468 |
xr = a[17] - a[13]; a[13] += a[17]; a[17] = xr * wp[-14*18+7];
|
|
|
469 |
|
|
|
470 |
xr = -a[20] + a[24]; a[20] += a[24]; a[24] = xr * wp[-12*18+7];
|
|
|
471 |
xr = -a[21] + a[25]; a[21] += a[25]; a[25] = xr * wp[-12*18+7];
|
|
|
472 |
|
|
|
473 |
xr = a[ 4] - a[ 8]; a[ 4] += a[ 8]; a[ 8] = xr * wp[-12*18+7];
|
|
|
474 |
xr = a[ 5] - a[ 9]; a[ 5] += a[ 9]; a[ 9] = xr * wp[-12*18+7];
|
|
|
475 |
|
|
|
476 |
xr = a[ 0] - a[12]; a[ 0] += a[12]; a[12] = xr * wp[-4*18+7];
|
|
|
477 |
xr = a[ 1] - a[13]; a[ 1] += a[13]; a[13] = xr * wp[-4*18+7];
|
|
|
478 |
xr = a[16] - a[28]; a[16] += a[28]; a[28] = xr * wp[-4*18+7];
|
|
|
479 |
xr = -a[17] + a[29]; a[17] += a[29]; a[29] = xr * wp[-4*18+7];
|
|
|
480 |
|
|
|
481 |
xr = SQRT2 * (a[ 2] - a[10]); a[ 2] += a[10]; a[10] = xr;
|
|
|
482 |
xr = SQRT2 * (a[ 3] - a[11]); a[ 3] += a[11]; a[11] = xr;
|
|
|
483 |
xr = SQRT2 * (-a[18] + a[26]); a[18] += a[26]; a[26] = xr - a[18];
|
|
|
484 |
xr = SQRT2 * (-a[19] + a[27]); a[19] += a[27]; a[27] = xr - a[19];
|
|
|
485 |
|
|
|
486 |
xr = a[ 2]; a[19] -= a[ 3]; a[ 3] -= xr; a[ 2] = a[31] - xr; a[31] += xr;
|
|
|
487 |
xr = a[ 3]; a[11] -= a[19]; a[18] -= xr; a[ 3] = a[30] - xr; a[30] += xr;
|
|
|
488 |
xr = a[18]; a[27] -= a[11]; a[19] -= xr; a[18] = a[15] - xr; a[15] += xr;
|
|
|
489 |
|
|
|
490 |
xr = a[19]; a[10] -= xr; a[19] = a[14] - xr; a[14] += xr;
|
|
|
491 |
xr = a[10]; a[11] -= xr; a[10] = a[23] - xr; a[23] += xr;
|
|
|
492 |
xr = a[11]; a[26] -= xr; a[11] = a[22] - xr; a[22] += xr;
|
|
|
493 |
xr = a[26]; a[27] -= xr; a[26] = a[ 7] - xr; a[ 7] += xr;
|
|
|
494 |
|
|
|
495 |
xr = a[27]; a[27] = a[ 6] - xr; a[ 6] += xr;
|
|
|
496 |
|
|
|
497 |
xr = SQRT2 * (a[ 0] - a[ 4]); a[ 0] += a[ 4]; a[ 4] = xr;
|
|
|
498 |
xr = SQRT2 * (a[ 1] - a[ 5]); a[ 1] += a[ 5]; a[ 5] = xr;
|
|
|
499 |
xr = SQRT2 * (a[16] - a[20]); a[16] += a[20]; a[20] = xr;
|
|
|
500 |
xr = SQRT2 * (a[17] - a[21]); a[17] += a[21]; a[21] = xr;
|
|
|
501 |
|
|
|
502 |
xr = -SQRT2 * (a[ 8] - a[12]); a[ 8] += a[12]; a[12] = xr - a[ 8];
|
|
|
503 |
xr = -SQRT2 * (a[ 9] - a[13]); a[ 9] += a[13]; a[13] = xr - a[ 9];
|
|
|
504 |
xr = -SQRT2 * (a[25] - a[29]); a[25] += a[29]; a[29] = xr - a[25];
|
|
|
505 |
xr = -SQRT2 * (a[24] + a[28]); a[24] -= a[28]; a[28] = xr - a[24];
|
|
|
506 |
|
|
|
507 |
xr = a[24] - a[16]; a[24] = xr;
|
|
|
508 |
xr = a[20] - xr; a[20] = xr;
|
|
|
509 |
xr = a[28] - xr; a[28] = xr;
|
|
|
510 |
|
|
|
511 |
xr = a[25] - a[17]; a[25] = xr;
|
|
|
512 |
xr = a[21] - xr; a[21] = xr;
|
|
|
513 |
xr = a[29] - xr; a[29] = xr;
|
|
|
514 |
|
|
|
515 |
xr = a[17] - a[ 1]; a[17] = xr;
|
|
|
516 |
xr = a[ 9] - xr; a[ 9] = xr;
|
|
|
517 |
xr = a[25] - xr; a[25] = xr;
|
|
|
518 |
xr = a[ 5] - xr; a[ 5] = xr;
|
|
|
519 |
xr = a[21] - xr; a[21] = xr;
|
|
|
520 |
xr = a[13] - xr; a[13] = xr;
|
|
|
521 |
xr = a[29] - xr; a[29] = xr;
|
|
|
522 |
|
|
|
523 |
xr = a[ 1] - a[ 0]; a[ 1] = xr;
|
|
|
524 |
xr = a[16] - xr; a[16] = xr;
|
|
|
525 |
xr = a[17] - xr; a[17] = xr;
|
|
|
526 |
xr = a[ 8] - xr; a[ 8] = xr;
|
|
|
527 |
xr = a[ 9] - xr; a[ 9] = xr;
|
|
|
528 |
xr = a[24] - xr; a[24] = xr;
|
|
|
529 |
xr = a[25] - xr; a[25] = xr;
|
|
|
530 |
xr = a[ 4] - xr; a[ 4] = xr;
|
|
|
531 |
xr = a[ 5] - xr; a[ 5] = xr;
|
|
|
532 |
xr = a[20] - xr; a[20] = xr;
|
|
|
533 |
xr = a[21] - xr; a[21] = xr;
|
|
|
534 |
xr = a[12] - xr; a[12] = xr;
|
|
|
535 |
xr = a[13] - xr; a[13] = xr;
|
|
|
536 |
xr = a[28] - xr; a[28] = xr;
|
|
|
537 |
xr = a[29] - xr; a[29] = xr;
|
|
|
538 |
|
|
|
539 |
xr = a[ 0]; a[ 0] += a[31]; a[31] -= xr;
|
|
|
540 |
xr = a[ 1]; a[ 1] += a[30]; a[30] -= xr;
|
|
|
541 |
xr = a[16]; a[16] += a[15]; a[15] -= xr;
|
|
|
542 |
xr = a[17]; a[17] += a[14]; a[14] -= xr;
|
|
|
543 |
xr = a[ 8]; a[ 8] += a[23]; a[23] -= xr;
|
|
|
544 |
xr = a[ 9]; a[ 9] += a[22]; a[22] -= xr;
|
|
|
545 |
xr = a[24]; a[24] += a[ 7]; a[ 7] -= xr;
|
|
|
546 |
xr = a[25]; a[25] += a[ 6]; a[ 6] -= xr;
|
|
|
547 |
xr = a[ 4]; a[ 4] += a[27]; a[27] -= xr;
|
|
|
548 |
xr = a[ 5]; a[ 5] += a[26]; a[26] -= xr;
|
|
|
549 |
xr = a[20]; a[20] += a[11]; a[11] -= xr;
|
|
|
550 |
xr = a[21]; a[21] += a[10]; a[10] -= xr;
|
|
|
551 |
xr = a[12]; a[12] += a[19]; a[19] -= xr;
|
|
|
552 |
xr = a[13]; a[13] += a[18]; a[18] -= xr;
|
|
|
553 |
xr = a[28]; a[28] += a[ 3]; a[ 3] -= xr;
|
|
|
554 |
xr = a[29]; a[29] += a[ 2]; a[ 2] -= xr;
|
|
|
555 |
}
|
|
|
556 |
|
|
|
557 |
}
|
|
|
558 |
|
|
|
559 |
|
|
|
560 |
/*-------------------------------------------------------------------*/
|
|
|
561 |
/* */
|
|
|
562 |
/* Function: Calculation of the MDCT */
|
|
|
563 |
/* In the case of long blocks (type 0,1,3) there are */
|
|
|
564 |
/* 36 coefficents in the time domain and 18 in the frequency */
|
|
|
565 |
/* domain. */
|
|
|
566 |
/* In the case of short blocks (type 2) there are 3 */
|
|
|
567 |
/* transformations with short length. This leads to 12 coefficents */
|
|
|
568 |
/* in the time and 6 in the frequency domain. In this case the */
|
|
|
569 |
/* results are stored side by side in the vector out[]. */
|
|
|
570 |
/* */
|
|
|
571 |
/* New layer3 */
|
|
|
572 |
/* */
|
|
|
573 |
/*-------------------------------------------------------------------*/
|
|
|
574 |
|
|
|
575 |
inline static void mdct_short(FLOAT8 *inout)
|
|
|
576 |
{
|
|
|
577 |
int l;
|
|
|
578 |
for ( l = 0; l < 3; l++ ) {
|
|
|
579 |
FLOAT8 tc0,tc1,tc2,ts0,ts1,ts2;
|
|
|
580 |
|
|
|
581 |
ts0 = inout[2*3] * win[SHORT_TYPE][0] - inout[5*3];
|
|
|
582 |
tc0 = inout[0*3] * win[SHORT_TYPE][2] - inout[3*3];
|
|
|
583 |
tc1 = ts0 + tc0;
|
|
|
584 |
tc2 = ts0 - tc0;
|
|
|
585 |
|
|
|
586 |
ts0 = inout[5*3] * win[SHORT_TYPE][0] + inout[2*3];
|
|
|
587 |
tc0 = inout[3*3] * win[SHORT_TYPE][2] + inout[0*3];
|
|
|
588 |
ts1 = ts0 + tc0;
|
|
|
589 |
ts2 = -ts0 + tc0;
|
|
|
590 |
|
|
|
591 |
tc0 = (inout[1*3] * win[SHORT_TYPE][1] - inout[4*3]) * 2.069978111953089e-11; /* tritab_s[1] */
|
|
|
592 |
ts0 = (inout[4*3] * win[SHORT_TYPE][1] + inout[1*3]) * 2.069978111953089e-11; /* tritab_s[1] */
|
|
|
593 |
|
|
|
594 |
inout[3*0] = tc1 * 1.907525191737280e-11 /* tritab_s[2] */ + tc0;
|
|
|
595 |
inout[3*5] = -ts1 * 1.907525191737280e-11 /* tritab_s[0] */ + ts0;
|
|
|
596 |
|
|
|
597 |
tc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[2] */;
|
|
|
598 |
ts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0;
|
|
|
599 |
inout[3*1] = tc2-ts1;
|
|
|
600 |
inout[3*2] = tc2+ts1;
|
|
|
601 |
|
|
|
602 |
tc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0;
|
|
|
603 |
ts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[0] */;
|
|
|
604 |
inout[3*3] = tc1+ts2;
|
|
|
605 |
inout[3*4] = tc1-ts2;
|
|
|
606 |
|
|
|
607 |
inout++;
|
|
|
608 |
}
|
|
|
609 |
}
|
|
|
610 |
|
|
|
611 |
inline static void mdct_long(FLOAT8 *out, FLOAT8 *in)
|
|
|
612 |
{
|
|
|
613 |
FLOAT8 ct,st;
|
|
|
614 |
{
|
|
|
615 |
FLOAT8 tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8;
|
|
|
616 |
// 1,2, 5,6, 9,10, 13,14, 17
|
|
|
617 |
tc1 = in[17]-in[ 9];
|
|
|
618 |
tc3 = in[15]-in[11];
|
|
|
619 |
tc4 = in[14]-in[12];
|
|
|
620 |
ts5 = in[ 0]+in[ 8];
|
|
|
621 |
ts6 = in[ 1]+in[ 7];
|
|
|
622 |
ts7 = in[ 2]+in[ 6];
|
|
|
623 |
ts8 = in[ 3]+in[ 5];
|
|
|
624 |
|
|
|
625 |
out[17] = (ts5+ts7-ts8)-(ts6-in[4]);
|
|
|
626 |
st = (ts5+ts7-ts8)*cx[7]+(ts6-in[4]);
|
|
|
627 |
ct = (tc1-tc3-tc4)*cx[6];
|
|
|
628 |
out[5] = ct+st;
|
|
|
629 |
out[6] = ct-st;
|
|
|
630 |
|
|
|
631 |
tc2 = (in[16]-in[10])*cx[6];
|
|
|
632 |
ts6 = ts6*cx[7] + in[4];
|
|
|
633 |
ct = tc1*cx[0] + tc2 + tc3*cx[1] + tc4*cx[2];
|
|
|
634 |
st = -ts5*cx[4] + ts6 - ts7*cx[5] + ts8*cx[3];
|
|
|
635 |
out[1] = ct+st;
|
|
|
636 |
out[2] = ct-st;
|
|
|
637 |
|
|
|
638 |
ct = tc1*cx[1] - tc2 - tc3*cx[2] + tc4*cx[0];
|
|
|
639 |
st = -ts5*cx[5] + ts6 - ts7*cx[3] + ts8*cx[4];
|
|
|
640 |
out[ 9] = ct+st;
|
|
|
641 |
out[10] = ct-st;
|
|
|
642 |
|
|
|
643 |
ct = tc1*cx[2] - tc2 + tc3*cx[0] - tc4*cx[1];
|
|
|
644 |
st = ts5*cx[3] - ts6 + ts7*cx[4] - ts8*cx[5];
|
|
|
645 |
out[13] = ct+st;
|
|
|
646 |
out[14] = ct-st;
|
|
|
647 |
}
|
|
|
648 |
{
|
|
|
649 |
FLOAT8 ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8;
|
|
|
650 |
|
|
|
651 |
ts1 = in[ 8]-in[ 0];
|
|
|
652 |
ts3 = in[ 6]-in[ 2];
|
|
|
653 |
ts4 = in[ 5]-in[ 3];
|
|
|
654 |
tc5 = in[17]+in[ 9];
|
|
|
655 |
tc6 = in[16]+in[10];
|
|
|
656 |
tc7 = in[15]+in[11];
|
|
|
657 |
tc8 = in[14]+in[12];
|
|
|
658 |
|
|
|
659 |
out[0] = (tc5+tc7+tc8)+(tc6+in[13]);
|
|
|
660 |
ct = (tc5+tc7+tc8)*cx[7]-(tc6+in[13]);
|
|
|
661 |
st = (ts1-ts3+ts4)*cx[6];
|
|
|
662 |
out[11] = ct+st;
|
|
|
663 |
out[12] = ct-st;
|
|
|
664 |
|
|
|
665 |
ts2 = (in[7]-in[1])*cx[6];
|
|
|
666 |
tc6 = in[13] - tc6*cx[7];
|
|
|
667 |
ct = tc5*cx[3] - tc6 + tc7*cx[4] + tc8*cx[5];
|
|
|
668 |
st = ts1*cx[2] + ts2 + ts3*cx[0] + ts4*cx[1];
|
|
|
669 |
out[3] = ct+st;
|
|
|
670 |
out[4] = ct-st;
|
|
|
671 |
|
|
|
672 |
ct = -tc5*cx[5] + tc6 - tc7*cx[3] - tc8*cx[4];
|
|
|
673 |
st = ts1*cx[1] + ts2 - ts3*cx[2] - ts4*cx[0];
|
|
|
674 |
out[7] = ct+st;
|
|
|
675 |
out[8] = ct-st;
|
|
|
676 |
|
|
|
677 |
ct = -tc5*cx[4] + tc6 - tc7*cx[5] - tc8*cx[3];
|
|
|
678 |
st = ts1*cx[0] - ts2 + ts3*cx[1] - ts4*cx[2];
|
|
|
679 |
out[15] = ct+st;
|
|
|
680 |
out[16] = ct-st;
|
|
|
681 |
}
|
|
|
682 |
}
|
|
|
683 |
|
|
|
684 |
|
|
|
685 |
void mdct_sub48( lame_internal_flags *gfc, const sample_t *w0, const sample_t *w1,
|
|
|
686 |
FLOAT8 mdct_freq[2][2][576] )
|
|
|
687 |
{
|
|
|
688 |
int gr, k, ch;
|
|
|
689 |
const sample_t *wk;
|
|
|
690 |
|
|
|
691 |
wk = w0 + 286;
|
|
|
692 |
/* thinking cache performance, ch->gr loop is better than gr->ch loop */
|
|
|
693 |
for (ch = 0; ch < gfc->channels_out; ch++) {
|
|
|
694 |
for (gr = 0; gr < gfc->mode_gr; gr++) {
|
|
|
695 |
int band;
|
|
|
696 |
FLOAT8 *mdct_enc = &mdct_freq[gr][ch][0];
|
|
|
697 |
gr_info *gi = &(gfc->l3_side.gr[gr].ch[ch].tt);
|
|
|
698 |
FLOAT8 *samp = gfc->sb_sample[ch][1 - gr][0];
|
|
|
699 |
|
|
|
700 |
for (k = 0; k < 18 / 2; k++) {
|
|
|
701 |
window_subband(wk, samp);
|
|
|
702 |
window_subband(wk + 32, samp + 32);
|
|
|
703 |
samp += 64;
|
|
|
704 |
wk += 64;
|
|
|
705 |
/*
|
|
|
706 |
* Compensate for inversion in the analysis filter
|
|
|
707 |
*/
|
|
|
708 |
for (band = 1; band < 32; band+=2) {
|
|
|
709 |
samp[band-32] *= -1;
|
|
|
710 |
}
|
|
|
711 |
}
|
|
|
712 |
|
|
|
713 |
|
|
|
714 |
/* apply filters on the polyphase filterbank outputs */
|
|
|
715 |
/* bands <= gfc->highpass_band will be zeroed out below */
|
|
|
716 |
/* bands >= gfc->lowpass_band will be zeroed out below */
|
|
|
717 |
if (gfc->filter_type==0) {
|
|
|
718 |
for (band=gfc->highpass_start_band; band <= gfc->highpass_end_band; band++) {
|
|
|
719 |
for (k=0; k<18; k++)
|
|
|
720 |
gfc->sb_sample[ch][1-gr][k][order[band]]*=gfc->amp_highpass[band];
|
|
|
721 |
}
|
|
|
722 |
for (band=gfc->lowpass_start_band; band <= gfc->lowpass_end_band; band++) {
|
|
|
723 |
for (k=0; k<18; k++)
|
|
|
724 |
gfc->sb_sample[ch][1-gr][k][order[band]]*=gfc->amp_lowpass[band];
|
|
|
725 |
}
|
|
|
726 |
}
|
|
|
727 |
|
|
|
728 |
|
|
|
729 |
|
|
|
730 |
/*
|
|
|
731 |
* Perform imdct of 18 previous subband samples
|
|
|
732 |
* + 18 current subband samples
|
|
|
733 |
*/
|
|
|
734 |
for (band = 0; band < 32; band++, mdct_enc += 18) {
|
|
|
735 |
int type = gi->block_type;
|
|
|
736 |
FLOAT8 *band0, *band1;
|
|
|
737 |
band0 = gfc->sb_sample[ch][ gr][0] + order[band];
|
|
|
738 |
band1 = gfc->sb_sample[ch][1-gr][0] + order[band];
|
|
|
739 |
if (gi->mixed_block_flag && band < 2)
|
|
|
740 |
type = 0;
|
|
|
741 |
if (band >= gfc->lowpass_band || band <= gfc->highpass_band) {
|
|
|
742 |
memset((char *)mdct_enc,0,18*sizeof(FLOAT8));
|
|
|
743 |
} else {
|
|
|
744 |
if (type == SHORT_TYPE) {
|
|
|
745 |
for (k = -NS/4; k < 0; k++) {
|
|
|
746 |
FLOAT8 w = win[SHORT_TYPE][k+3];
|
|
|
747 |
mdct_enc[k*3+ 9] = band0[( 9+k)*32] * w - band0[( 8-k)*32];
|
|
|
748 |
mdct_enc[k*3+18] = band0[(14-k)*32] * w + band0[(15+k)*32];
|
|
|
749 |
mdct_enc[k*3+10] = band0[(15+k)*32] * w - band0[(14-k)*32];
|
|
|
750 |
mdct_enc[k*3+19] = band1[( 2-k)*32] * w + band1[( 3+k)*32];
|
|
|
751 |
mdct_enc[k*3+11] = band1[( 3+k)*32] * w - band1[( 2-k)*32];
|
|
|
752 |
mdct_enc[k*3+20] = band1[( 8-k)*32] * w + band1[( 9+k)*32];
|
|
|
753 |
}
|
|
|
754 |
mdct_short(mdct_enc);
|
|
|
755 |
} else {
|
|
|
756 |
FLOAT8 work[18];
|
|
|
757 |
for (k = -NL/4; k < 0; k++) {
|
|
|
758 |
FLOAT8 a, b;
|
|
|
759 |
a = win[type][k+27] * band1[(k+9)*32]
|
|
|
760 |
+ win[type][k+36] * band1[(8-k)*32];
|
|
|
761 |
b = win[type][k+ 9] * band0[(k+9)*32]
|
|
|
762 |
- win[type][k+18] * band0[(8-k)*32];
|
|
|
763 |
work[k+ 9] = a - b*tantab_l[k+9];
|
|
|
764 |
work[k+18] = a*tantab_l[k+9] + b;
|
|
|
765 |
}
|
|
|
766 |
|
|
|
767 |
mdct_long(mdct_enc, work);
|
|
|
768 |
}
|
|
|
769 |
}
|
|
|
770 |
/*
|
|
|
771 |
* Perform aliasing reduction butterfly
|
|
|
772 |
*/
|
|
|
773 |
if (type != SHORT_TYPE) {
|
|
|
774 |
if (band == 0)
|
|
|
775 |
continue;
|
|
|
776 |
for (k = 7; k >= 0; --k) {
|
|
|
777 |
FLOAT8 bu,bd;
|
|
|
778 |
bu = mdct_enc[k] * ca[k] + mdct_enc[-1-k] * cs[k];
|
|
|
779 |
bd = mdct_enc[k] * cs[k] - mdct_enc[-1-k] * ca[k];
|
|
|
780 |
|
|
|
781 |
mdct_enc[-1-k] = bu;
|
|
|
782 |
mdct_enc[k] = bd;
|
|
|
783 |
}
|
|
|
784 |
}
|
|
|
785 |
}
|
|
|
786 |
}
|
|
|
787 |
wk = w1 + 286;
|
|
|
788 |
if (gfc->mode_gr == 1) {
|
|
|
789 |
memcpy(gfc->sb_sample[ch][0], gfc->sb_sample[ch][1], 576 * sizeof(FLOAT8));
|
|
|
790 |
}
|
|
|
791 |
}
|
|
|
792 |
}
|