Ejemplo n.º 1
0
static void fft15(CeltIMDCTContext *s, FFTComplex *out, const FFTComplex *in, ptrdiff_t stride)
{
    const FFTComplex *exptab = s->exptab[0];
    FFTComplex tmp[5];
    FFTComplex tmp1[5];
    FFTComplex tmp2[5];
    int k;

    fft5(tmp,  in,              stride * 3);
    fft5(tmp1, in +     stride, stride * 3);
    fft5(tmp2, in + 2 * stride, stride * 3);

    for (k = 0; k < 5; k++) {
        FFTComplex t1, t2;

        CMUL(t1, tmp1[k], exptab[k]);
        CMUL(t2, tmp2[k], exptab[2 * k]);
        out[k].re = tmp[k].re + t1.re + t2.re;
        out[k].im = tmp[k].im + t1.im + t2.im;

        CMUL(t1, tmp1[k], exptab[k + 5]);
        CMUL(t2, tmp2[k], exptab[2 * (k + 5)]);
        out[k + 5].re = tmp[k].re + t1.re + t2.re;
        out[k + 5].im = tmp[k].im + t1.im + t2.im;

        CMUL(t1, tmp1[k], exptab[k + 10]);
        CMUL(t2, tmp2[k], exptab[2 * k + 5]);
        out[k + 10].re = tmp[k].re + t1.re + t2.re;
        out[k + 10].im = tmp[k].im + t1.im + t2.im;
    }
}
Ejemplo n.º 2
0
static void fft15_c(FFTComplex *out, FFTComplex *in, FFTComplex *exptab, ptrdiff_t stride)
{
    int k;
    FFTComplex tmp1[5], tmp2[5], tmp3[5];

    fft5(tmp1, in + 0, exptab + 19);
    fft5(tmp2, in + 1, exptab + 19);
    fft5(tmp3, in + 2, exptab + 19);

    for (k = 0; k < 5; k++) {
        FFTComplex t[2];

        CMUL3(t[0], tmp2[k], exptab[k]);
        CMUL3(t[1], tmp3[k], exptab[2 * k]);
        out[stride*k].re = tmp1[k].re + t[0].re + t[1].re;
        out[stride*k].im = tmp1[k].im + t[0].im + t[1].im;

        CMUL3(t[0], tmp2[k], exptab[k + 5]);
        CMUL3(t[1], tmp3[k], exptab[2 * (k + 5)]);
        out[stride*(k + 5)].re = tmp1[k].re + t[0].re + t[1].re;
        out[stride*(k + 5)].im = tmp1[k].im + t[0].im + t[1].im;

        CMUL3(t[0], tmp2[k], exptab[k + 10]);
        CMUL3(t[1], tmp3[k], exptab[2 * k + 5]);
        out[stride*(k + 10)].re = tmp1[k].re + t[0].re + t[1].re;
        out[stride*(k + 10)].im = tmp1[k].im + t[0].im + t[1].im;
    }
}