2 #include "wmapro_mdct.h"
3 #include "mdct_tables.h" /* for sincos_lookup_wmap */
4 #include "../lib/mdct_lookup.h" /* for revtab */
5 #include "../lib/fft.h" /* for FFT data structures */
7 #include "../lib/codeclib_misc.h" /* for XNPROD31 */
9 void imdct_half(unsigned int nbits
, int32_t *output
, const int32_t *input
){
10 int k
, n8
, n4
, n2
, n
, j
;
11 //const uint16_t *revtab = s->revtab;
12 const int32_t *in1
, *in2
;
13 FFTComplex
*z
= (FFTComplex
*)output
;
20 const int32_t *T
= sincos_lookup_wmap
+ ((n2
) - (1<<7));
23 const int revtab_shift
= (14- nbits
);
26 int step
= 2<<(12-nbits
);
27 for(k
= 0; k
< n4
; k
++) {
28 j
=revtab
[k
]>>revtab_shift
;
29 XNPROD31(*in2
, *in1
, T
[1]<<16, T
[0]<<16, &z
[j
].re
, &z
[j
].im
);
35 ff_fft_calc_c(nbits
-2, z
);
37 /* post rotation + reordering */
38 T
= sincos_lookup_wmap
+ ((n2
) - (1<<7)) + n4
;
40 for(k
= 0; k
< n8
; k
++) {
41 int32_t r0
, i0
, r1
, i1
;
42 XNPROD31(z
[n8
-k
-1].im
, z
[n8
-k
-1].re
, T
[0]<<16, T
[1]<<16, &r0
, &i1
);
43 XNPROD31(z
[n8
+k
].im
, z
[n8
+k
].re
, V
[0]<<16, V
[1]<<16, &r1
, &i0
);