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 */
8 #include "../lib/codeclib_misc.h" /* for XNPROD31 */
9 #include "wmapro_math.h"
11 void imdct_half(unsigned int nbits
, int32_t *output
, const int32_t *input
){
12 int k
, n8
, n4
, n2
, n
, j
;
13 const int32_t *in1
, *in2
;
14 FFTComplex
*z
= (FFTComplex
*)output
;
21 const int32_t *T
= sincos_lookup_wmap
+ ((n2
) - (1<<7));
24 const int revtab_shift
= (14- nbits
);
27 for(k
= 0; k
< n4
; k
++) {
28 j
=revtab
[k
]>>revtab_shift
;
29 XNPROD31(*in2
<<2, *in1
<<2, T
[1]<<14, T
[0]<<14, &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]<<8, T
[1]<<8, &r0
, &i1
);
43 XNPROD31(z
[n8
+k
].im
, z
[n8
+k
].re
, V
[0]<<8, V
[1]<<8, &r1
, &i0
);