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 */
10 #include "asm_mcf5249.h"
11 #include "codeclib_misc.h"
13 #include "wmapro_math.h"
15 void imdct_half(unsigned int nbits
, int32_t *output
, const int32_t *input
){
16 int k
, n8
, n4
, n2
, n
, j
;
17 const int32_t *in1
, *in2
;
18 FFTComplex
*z
= (FFTComplex
*)output
;
25 const int32_t *T
= sincos_lookup_wmap
+ ((n2
) - (1<<7));
28 const int revtab_shift
= (14- nbits
);
31 for(k
= 0; k
< n4
; k
++) {
32 j
=revtab
[k
]>>revtab_shift
;
33 XNPROD31(*in2
<<2, *in1
<<2, T
[1]<<14, T
[0]<<14, &z
[j
].re
, &z
[j
].im
);
39 ff_fft_calc_c(nbits
-2, z
);
41 /* post rotation + reordering */
42 T
= sincos_lookup_wmap
+ ((n2
) - (1<<7)) + n4
;
44 for(k
= 0; k
< n8
; k
++) {
45 int32_t r0
, i0
, r1
, i1
;
46 XNPROD31(z
[n8
-k
-1].im
, z
[n8
-k
-1].re
, T
[0]<<8, T
[1]<<8, &r0
, &i1
);
47 XNPROD31(z
[n8
+k
].im
, z
[n8
+k
].re
, V
[0]<<8, V
[1]<<8, &r1
, &i0
);