2 * This file is part of FFmpeg.
4 * FFmpeg 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 * FFmpeg 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 FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 #define FFT_FIXED_32 0
21 #include "mdct_template.c"
23 /* same as ff_mdct_calcw_c with double-width unscaled output */
24 void ff_mdct_calcw_c(FFTContext
*s
, FFTDouble
*out
, const FFTSample
*input
)
26 int i
, j
, n
, n8
, n4
, n2
, n3
;
28 const uint16_t *revtab
= s
->revtab
;
29 const FFTSample
*tcos
= s
->tcos
;
30 const FFTSample
*tsin
= s
->tsin
;
31 FFTComplex
*x
= s
->tmp_buf
;
32 FFTDComplex
*o
= (FFTDComplex
*)out
;
34 n
= 1 << s
->mdct_bits
;
42 re
= RSCALE(-input
[2*i
+n3
] - input
[n3
-1-2*i
]);
43 im
= RSCALE(-input
[n4
+2*i
] + input
[n4
-1-2*i
]);
45 CMUL(x
[j
].re
, x
[j
].im
, re
, im
, -tcos
[i
], tsin
[i
]);
47 re
= RSCALE( input
[2*i
] - input
[n2
-1-2*i
]);
48 im
= RSCALE(-input
[n2
+2*i
] - input
[ n
-1-2*i
]);
50 CMUL(x
[j
].re
, x
[j
].im
, re
, im
, -tcos
[n8
+ i
], tsin
[n8
+ i
]);
57 FFTDouble r0
, i0
, r1
, i1
;
58 CMULL(i1
, r0
, x
[n8
-i
-1].re
, x
[n8
-i
-1].im
, -tsin
[n8
-i
-1], -tcos
[n8
-i
-1]);
59 CMULL(i0
, r1
, x
[n8
+i
].re
, x
[n8
+i
].im
, -tsin
[n8
+i
], -tcos
[n8
+i
]);