]> git.sesse.net Git - vlc/blob - src/ac3_decoder/ac3_srfft.h
*Bugfixes, cleanings in gtk.
[vlc] / src / ac3_decoder / ac3_srfft.h
1 /*****************************************************************************
2  * ac3_srfft.h: ac3 FFT
3  *****************************************************************************
4  * Copyright (C) 1999, 2000 VideoLAN
5  * $Id: ac3_srfft.h,v 1.3 2001/05/14 15:58:04 reno Exp $
6  *
7  * Authors: Renaud Dartus <reno@videolan.org>
8  *          Aaron Holtzman <aholtzma@engr.uvic.ca>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  * 
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
23  *****************************************************************************/
24
25 static const complex_t delta16[4] = 
26  { {1.00000000000000,  0.00000000000000},
27    {0.92387953251129, -0.38268343236509},
28    {0.70710678118655, -0.70710678118655},
29    {0.38268343236509, -0.92387953251129}};
30
31 static const complex_t delta16_3[4] = 
32  { {1.00000000000000,  0.00000000000000},
33    {0.38268343236509, -0.92387953251129},
34    {-0.70710678118655, -0.70710678118655},
35    {-0.92387953251129, 0.38268343236509}};
36
37 static const complex_t delta32[8] = 
38  { {1.00000000000000,  0.00000000000000},
39    {0.98078528040323, -0.19509032201613},
40    {0.92387953251129, -0.38268343236509},
41    {0.83146961230255, -0.55557023301960},
42    {0.70710678118655, -0.70710678118655},
43    {0.55557023301960, -0.83146961230255},
44    {0.38268343236509, -0.92387953251129},
45    {0.19509032201613, -0.98078528040323}};
46
47 static const complex_t delta32_3[8] = 
48  { {1.00000000000000,  0.00000000000000},
49    {0.83146961230255, -0.55557023301960},
50    {0.38268343236509, -0.92387953251129},
51    {-0.19509032201613, -0.98078528040323},
52    {-0.70710678118655, -0.70710678118655},
53    {-0.98078528040323, -0.19509032201613},
54    {-0.92387953251129, 0.38268343236509},
55    {-0.55557023301960, 0.83146961230255}};
56
57 static const complex_t delta64[16] = 
58  { {1.00000000000000,  0.00000000000000},
59    {0.99518472667220, -0.09801714032956},
60    {0.98078528040323, -0.19509032201613},
61    {0.95694033573221, -0.29028467725446},
62    {0.92387953251129, -0.38268343236509},
63    {0.88192126434836, -0.47139673682600},
64    {0.83146961230255, -0.55557023301960},
65    {0.77301045336274, -0.63439328416365},
66    {0.70710678118655, -0.70710678118655},
67    {0.63439328416365, -0.77301045336274},
68    {0.55557023301960, -0.83146961230255},
69    {0.47139673682600, -0.88192126434835},
70    {0.38268343236509, -0.92387953251129},
71    {0.29028467725446, -0.95694033573221},
72    {0.19509032201613, -0.98078528040323},
73    {0.09801714032956, -0.99518472667220}};
74
75 static const complex_t delta64_3[16] = 
76  { {1.00000000000000,  0.00000000000000},
77    {0.95694033573221, -0.29028467725446},
78    {0.83146961230255, -0.55557023301960},
79    {0.63439328416365, -0.77301045336274},
80    {0.38268343236509, -0.92387953251129},
81    {0.09801714032956, -0.99518472667220},
82    {-0.19509032201613, -0.98078528040323},
83    {-0.47139673682600, -0.88192126434836},
84    {-0.70710678118655, -0.70710678118655},
85    {-0.88192126434835, -0.47139673682600},
86    {-0.98078528040323, -0.19509032201613},
87    {-0.99518472667220, 0.09801714032956},
88    {-0.92387953251129, 0.38268343236509},
89    {-0.77301045336274, 0.63439328416365},
90    {-0.55557023301960, 0.83146961230255},
91    {-0.29028467725446, 0.95694033573221}};
92
93 static const complex_t delta128[32] = 
94  { {1.00000000000000,  0.00000000000000},
95    {0.99879545620517, -0.04906767432742},
96    {0.99518472667220, -0.09801714032956},
97    {0.98917650996478, -0.14673047445536},
98    {0.98078528040323, -0.19509032201613},
99    {0.97003125319454, -0.24298017990326},
100    {0.95694033573221, -0.29028467725446},
101    {0.94154406518302, -0.33688985339222},
102    {0.92387953251129, -0.38268343236509},
103    {0.90398929312344, -0.42755509343028},
104    {0.88192126434836, -0.47139673682600},
105    {0.85772861000027, -0.51410274419322},
106    {0.83146961230255, -0.55557023301960},
107    {0.80320753148064, -0.59569930449243},
108    {0.77301045336274, -0.63439328416365},
109    {0.74095112535496, -0.67155895484702},
110    {0.70710678118655, -0.70710678118655},
111    {0.67155895484702, -0.74095112535496},
112    {0.63439328416365, -0.77301045336274},
113    {0.59569930449243, -0.80320753148064},
114    {0.55557023301960, -0.83146961230255},
115    {0.51410274419322, -0.85772861000027},
116    {0.47139673682600, -0.88192126434835},
117    {0.42755509343028, -0.90398929312344},
118    {0.38268343236509, -0.92387953251129},
119    {0.33688985339222, -0.94154406518302},
120    {0.29028467725446, -0.95694033573221},
121    {0.24298017990326, -0.97003125319454},
122    {0.19509032201613, -0.98078528040323},
123    {0.14673047445536, -0.98917650996478},
124    {0.09801714032956, -0.99518472667220},
125    {0.04906767432742, -0.99879545620517}};
126
127 static const complex_t delta128_3[32] = 
128  { {1.00000000000000,  0.00000000000000},
129    {0.98917650996478, -0.14673047445536},
130    {0.95694033573221, -0.29028467725446},
131    {0.90398929312344, -0.42755509343028},
132    {0.83146961230255, -0.55557023301960},
133    {0.74095112535496, -0.67155895484702},
134    {0.63439328416365, -0.77301045336274},
135    {0.51410274419322, -0.85772861000027},
136    {0.38268343236509, -0.92387953251129},
137    {0.24298017990326, -0.97003125319454},
138    {0.09801714032956, -0.99518472667220},
139    {-0.04906767432742, -0.99879545620517},
140    {-0.19509032201613, -0.98078528040323},
141    {-0.33688985339222, -0.94154406518302},
142    {-0.47139673682600, -0.88192126434836},
143    {-0.59569930449243, -0.80320753148065},
144    {-0.70710678118655, -0.70710678118655},
145    {-0.80320753148065, -0.59569930449243},
146    {-0.88192126434835, -0.47139673682600},
147    {-0.94154406518302, -0.33688985339222},
148    {-0.98078528040323, -0.19509032201613},
149    {-0.99879545620517, -0.04906767432742},
150    {-0.99518472667220, 0.09801714032956},
151    {-0.97003125319454, 0.24298017990326},
152    {-0.92387953251129, 0.38268343236509},
153    {-0.85772861000027, 0.51410274419322},
154    {-0.77301045336274, 0.63439328416365},
155    {-0.67155895484702, 0.74095112535496},
156    {-0.55557023301960, 0.83146961230255},
157    {-0.42755509343028, 0.90398929312344},
158    {-0.29028467725446, 0.95694033573221},
159    {-0.14673047445536, 0.98917650996478}};
160
161 #define HSQRT2 0.707106781188;
162
163 #define TRANSZERO(A0,A4,A8,A12) { \
164   u_r = wTB[0].real; \
165   v_i = u_r - wTB[k*2].real; \
166   u_r += wTB[k*2].real; \
167   u_i = wTB[0].imag; \
168   v_r = wTB[k*2].imag - u_i; \
169   u_i += wTB[k*2].imag; \
170   a_r = A0.real; \
171   a_i = A0.imag; \
172   a1_r = a_r; \
173   a1_r += u_r; \
174   A0.real = a1_r; \
175   a_r -= u_r; \
176   A8.real = a_r; \
177   a1_i = a_i; \
178   a1_i += u_i; \
179   A0.imag = a1_i; \
180   a_i -= u_i; \
181   A8.imag = a_i; \
182   a1_r = A4.real; \
183   a1_i = A4.imag; \
184   a_r = a1_r; \
185   a_r -= v_r; \
186   A4.real = a_r; \
187   a1_r += v_r; \
188   A12.real = a1_r; \
189   a_i = a1_i; \
190   a_i -= v_i; \
191   A4.imag = a_i; \
192   a1_i += v_i; \
193   A12.imag = a1_i; \
194   }
195
196 #define TRANSHALF_16(A2,A6,A10,A14) {\
197   u_r = wTB[2].real; \
198   a_r = u_r; \
199   u_i = wTB[2].imag; \
200   u_r += u_i; \
201   u_i -= a_r; \
202   a_r = wTB[6].real; \
203   a1_r = a_r; \
204   a_i = wTB[6].imag; \
205   a_r = a_i - a_r; \
206   a_i += a1_r; \
207   v_i = u_r - a_r; \
208   u_r += a_r; \
209   v_r = u_i + a_i; \
210   u_i -= a_i; \
211   v_i *= HSQRT2; \
212   v_r *= HSQRT2; \
213   u_r *= HSQRT2; \
214   u_i *= HSQRT2; \
215   a_r = A2.real; \
216   a_i = A2.imag; \
217   a1_r = a_r; \
218   a1_r += u_r; \
219   A2.real = a1_r; \
220   a_r -= u_r; \
221   A10.real = a_r; \
222   a1_i = a_i; \
223   a1_i += u_i; \
224   A2.imag = a1_i; \
225   a_i -= u_i; \
226   A10.imag = a_i; \
227   a1_r = A6.real; \
228   a1_i = A6.imag;  \
229   a_r = a1_r; \
230   a1_r += v_r; \
231   A6.real = a1_r; \
232   a_r -= v_r; \
233   A14.real = a_r; \
234   a_i = a1_i; \
235   a1_i -= v_i; \
236   A6.imag = a1_i; \
237   a_i += v_i; \
238   A14.imag = a_i; \
239   }
240
241 #define TRANS(A1,A5,A9,A13,WT,WB,D,D3) { \
242   u_r = WT.real; \
243   a_r = u_r; \
244   a_r *= D.imag; \
245   u_r *= D.real; \
246   a_i = WT.imag; \
247   a1_i = a_i; \
248   a1_i *= D.real; \
249   a_i *= D.imag; \
250   u_r -= a_i; \
251   u_i = a_r; \
252   u_i += a1_i; \
253   a_r = WB.real; \
254   a1_r = a_r; \
255   a1_r *= D3.real; \
256   a_r *= D3.imag; \
257   a_i = WB.imag; \
258   a1_i = a_i; \
259   a_i *= D3.real; \
260   a1_i *= D3.imag; \
261   a1_r -= a1_i; \
262   a_r += a_i; \
263   v_i = u_r - a1_r; \
264   u_r += a1_r; \
265   v_r = a_r - u_i; \
266   u_i += a_r; \
267   a_r = A1.real; \
268   a_i = A1.imag; \
269   a1_r = a_r; \
270   a1_r += u_r; \
271   A1.real = a1_r; \
272   a_r -= u_r; \
273   A9.real = a_r; \
274   a1_i = a_i; \
275   a1_i += u_i; \
276   A1.imag = a1_i; \
277   a_i -= u_i; \
278   A9.imag = a_i; \
279   a1_r = A5.real; \
280   a1_i = A5.imag;  \
281   a_r = a1_r; \
282   a1_r -= v_r; \
283   A5.real = a1_r; \
284   a_r += v_r; \
285   A13.real = a_r; \
286   a_i = a1_i; \
287   a1_i -= v_i; \
288   A5.imag = a1_i; \
289   a_i += v_i; \
290   A13.imag = a_i; \
291   }