2 * This file is part of Libav.
4 * Libav is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * Libav is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with Libav; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 #define CONFIG_FFT_FLOAT 0
22 /* same as ff_mdct_calcw_c with double-width unscaled output */
23 void ff_mdct_calcw_c(FFTContext
*s
, FFTDouble
*out
, const FFTSample
*input
)
25 int i
, j
, n
, n8
, n4
, n2
, n3
;
27 const uint16_t *revtab
= s
->revtab
;
28 const FFTSample
*tcos
= s
->tcos
;
29 const FFTSample
*tsin
= s
->tsin
;
30 FFTComplex
*x
= s
->tmp_buf
;
31 FFTDComplex
*o
= (FFTDComplex
*)out
;
33 n
= 1 << s
->mdct_bits
;
41 re
= RSCALE(-input
[2*i
+n3
] - input
[n3
-1-2*i
]);
42 im
= RSCALE(-input
[n4
+2*i
] + input
[n4
-1-2*i
]);
44 CMUL(x
[j
].re
, x
[j
].im
, re
, im
, -tcos
[i
], tsin
[i
]);
46 re
= RSCALE( input
[2*i
] - input
[n2
-1-2*i
]);
47 im
= RSCALE(-input
[n2
+2*i
] - input
[ n
-1-2*i
]);
49 CMUL(x
[j
].re
, x
[j
].im
, re
, im
, -tcos
[n8
+ i
], tsin
[n8
+ i
]);
56 FFTDouble r0
, i0
, r1
, i1
;
57 CMULL(i1
, r0
, x
[n8
-i
-1].re
, x
[n8
-i
-1].im
, -tsin
[n8
-i
-1], -tcos
[n8
-i
-1]);
58 CMULL(i0
, r1
, x
[n8
+i
].re
, x
[n8
+i
].im
, -tsin
[n8
+i
], -tcos
[n8
+i
]);