void ff_imdct_calc(MDCTContext *s, FFTSample *output,

                   const FFTSample *input, FFTSample *tmp)

{

    int k, n8, n4, n2, n, j;

    const uint16_t *revtab = s->fft.revtab;

    const FFTSample *tcos = s->tcos;

    const FFTSample *tsin = s->tsin;

    const FFTSample *in1, *in2;

    FFTComplex *z = (FFTComplex *)tmp;



    n = 1 << s->nbits;

    n2 = n >> 1;

    n4 = n >> 2;

    n8 = n >> 3;



    /* pre rotation */

    in1 = input;

    in2 = input + n2 - 1;

    for(k = 0; k < n4; k++) {

        j=revtab[k];

        CMUL(z[j].re, z[j].im, *in2, *in1, tcos[k], tsin[k]);

        in1 += 2;

        in2 -= 2;

    }

    ff_fft_calc(&s->fft, z);



    /* post rotation + reordering */

    /* XXX: optimize */

    for(k = 0; k < n4; k++) {

        CMUL(z[k].re, z[k].im, z[k].re, z[k].im, tcos[k], tsin[k]);

    }

    for(k = 0; k < n8; k++) {

        output[2*k] = -z[n8 + k].im;

        output[n2-1-2*k] = z[n8 + k].im;



        output[2*k+1] = z[n8-1-k].re;

        output[n2-1-2*k-1] = -z[n8-1-k].re;



        output[n2 + 2*k]=-z[k+n8].re;

        output[n-1- 2*k]=-z[k+n8].re;



        output[n2 + 2*k+1]=z[n8-k-1].im;

        output[n-2 - 2 * k] = z[n8-k-1].im;

    }

}

void ff_imdct_calc(MDCTContext *s, FFTSample *output,

                   const FFTSample *input, FFTSample *tmp)

{

    int k, n8, n4, n2, n, j;

    const uint16_t *revtab = s->fft.revtab;

    const FFTSample *tcos = s->tcos;

    const FFTSample *tsin = s->tsin;

    const FFTSample *in1, *in2;

    FFTComplex *z = (FFTComplex *)tmp;



    n = 1 << s->nbits;

    n2 = n >> 1;

    n4 = n >> 2;

    n8 = n >> 3;



    

    in1 = input;

    in2 = input + n2 - 1;

    for(k = 0; k < n4; k++) {

        j=revtab[k];

        CMUL(z[j].re, z[j].im, *in2, *in1, tcos[k], tsin[k]);

        in1 += 2;

        in2 -= 2;

    }

    ff_fft_calc(&s->fft, z);



    

    

    for(k = 0; k < n4; k++) {

        CMUL(z[k].re, z[k].im, z[k].re, z[k].im, tcos[k], tsin[k]);

    }

    for(k = 0; k < n8; k++) {

        output[2*k] = -z[n8 + k].im;

        output[n2-1-2*k] = z[n8 + k].im;



        output[2*k+1] = z[n8-1-k].re;

        output[n2-1-2*k-1] = -z[n8-1-k].re;



        output[n2 + 2*k]=-z[k+n8].re;

        output[n-1- 2*k]=-z[k+n8].re;



        output[n2 + 2*k+1]=z[n8-k-1].im;

        output[n-2 - 2 * k] = z[n8-k-1].im;

    }

}

    n8 = n >> 3;     n8 = n >> 3; void ff_imdct_calc(MDCTContext *s, FFTSample *output,                    const FFTSample *input, FFTSample *tmp)     int k, n8, n4, n2, n, j;     n8 = n >> 3;
void FUNC_0(MDCTContext *VAR_0, FFTSample *VAR_1,

                   const FFTSample *VAR_2, FFTSample *VAR_3)

{

    int VAR_4, VAR_5, VAR_6, VAR_7, VAR_8, VAR_9;

    const uint16_t *VAR_10 = VAR_0->fft.VAR_10;

    const FFTSample *VAR_11 = VAR_0->VAR_11;

    const FFTSample *VAR_12 = VAR_0->VAR_12;

    const FFTSample *VAR_13, *in2;

    FFTComplex *z = (FFTComplex *)VAR_3;



    VAR_8 = 1 << VAR_0->nbits;

    VAR_7 = VAR_8 >> 1;

    VAR_6 = VAR_8 >> 2;

    VAR_5 = VAR_8 >> 3;



    

    VAR_13 = VAR_2;

    in2 = VAR_2 + VAR_7 - 1;

    for(VAR_4 = 0; VAR_4 < VAR_6; VAR_4++) {

        VAR_9=VAR_10[VAR_4];

        CMUL(z[VAR_9].re, z[VAR_9].im, *in2, *VAR_13, VAR_11[VAR_4], VAR_12[VAR_4]);

        VAR_13 += 2;

        in2 -= 2;

    }

    ff_fft_calc(&VAR_0->fft, z);



    

    

    for(VAR_4 = 0; VAR_4 < VAR_6; VAR_4++) {

        CMUL(z[VAR_4].re, z[VAR_4].im, z[VAR_4].re, z[VAR_4].im, VAR_11[VAR_4], VAR_12[VAR_4]);

    }

    for(VAR_4 = 0; VAR_4 < VAR_5; VAR_4++) {

        VAR_1[2*VAR_4] = -z[VAR_5 + VAR_4].im;

        VAR_1[VAR_7-1-2*VAR_4] = z[VAR_5 + VAR_4].im;



        VAR_1[2*VAR_4+1] = z[VAR_5-1-VAR_4].re;

        VAR_1[VAR_7-1-2*VAR_4-1] = -z[VAR_5-1-VAR_4].re;



        VAR_1[VAR_7 + 2*VAR_4]=-z[VAR_4+VAR_5].re;

        VAR_1[VAR_8-1- 2*VAR_4]=-z[VAR_4+VAR_5].re;



        VAR_1[VAR_7 + 2*VAR_4+1]=z[VAR_5-VAR_4-1].im;

        VAR_1[VAR_8-2 - 2 * VAR_4] = z[VAR_5-VAR_4-1].im;

    }

}

void FUNC_0(MDCTContext *VAR_0, FFTSample *VAR_1,
const FFTSample *VAR_2, FFTSample *VAR_3)
{ int VAR_4, VAR_5, VAR_6, VAR_7, VAR_8, VAR_9; const uint16_t *VAR_10 = VAR_0->fft.VAR_10; const FFTSample *VAR_11 = VAR_0->VAR_11; const FFTSample *VAR_12 = VAR_0->VAR_12; const FFTSample *VAR_13, *in2; FFTComplex *z = (FFTComplex *)VAR_3; VAR_8 = 1 << VAR_0->nbits; VAR_7 = VAR_8 >> 1; VAR_6 = VAR_8 >> 2; VAR_5 = VAR_8 >> 3; VAR_13 = VAR_2; in2 = VAR_2 + VAR_7 - 1; for(VAR_4 = 0; VAR_4 < VAR_6; VAR_4++) { VAR_9=VAR_10[VAR_4]; CMUL(z[VAR_9].re, z[VAR_9].im, *in2, *VAR_13, VAR_11[VAR_4], VAR_12[VAR_4]); VAR_13 += 2; in2 -= 2; } ff_fft_calc(&VAR_0->fft, z); for(VAR_4 = 0; VAR_4 < VAR_6; VAR_4++) { CMUL(z[VAR_4].re, z[VAR_4].im, z[VAR_4].re, z[VAR_4].im, VAR_11[VAR_4], VAR_12[VAR_4]); } for(VAR_4 = 0; VAR_4 < VAR_5; VAR_4++) { VAR_1[2*VAR_4] = -z[VAR_5 + VAR_4].im; VAR_1[VAR_7-1-2*VAR_4] = z[VAR_5 + VAR_4].im; VAR_1[2*VAR_4+1] = z[VAR_5-1-VAR_4].re; VAR_1[VAR_7-1-2*VAR_4-1] = -z[VAR_5-1-VAR_4].re; VAR_1[VAR_7 + 2*VAR_4]=-z[VAR_4+VAR_5].re; VAR_1[VAR_8-1- 2*VAR_4]=-z[VAR_4+VAR_5].re; VAR_1[VAR_7 + 2*VAR_4+1]=z[VAR_5-VAR_4-1].im; VAR_1[VAR_8-2 - 2 * VAR_4] = z[VAR_5-VAR_4-1].im; } }