X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=imdct.c;h=93577b5451a0cbb8c8da58e997a9f4d77179243e;hp=3495e61181b1074a5223955d6d66d90381436fbe;hb=4643fd6eeee81acc0e82e47e7895a3111775bbba;hpb=a694ab16b6ff43b545ccd530360b7224433a5b76 diff --git a/imdct.c b/imdct.c index 3495e611..93577b54 100644 --- a/imdct.c +++ b/imdct.c @@ -7,18 +7,14 @@ * Copyright (c) 2002 Fabrice Bellard * Partly based on libdjbfft by D. J. Bernstein * - * Licensed under the GNU Lesser General Public License. - * For licencing details see COPYING.LIB. + * Licensed under the GNU Lesser General Public License, see file COPYING.LIB. */ /** * \file imdct.c Inverse modified discrete cosine transform. */ -#include #include -#include -#include #include #include "para.h" @@ -58,8 +54,10 @@ struct mdct_context { struct fft_context fft; }; -/** cos(2 * pi * x / n) for 0 <= x <= n / 4, followed by its reverse */ -#define COSINE_TAB(n) fftsample_t cos_ ## n[n / 2] __aligned(16) +/** \cond cosine_tabs */ + +/* cos(2 * pi * x / n) for 0 <= x <= n / 4, followed by its reverse */ +#define COSINE_TAB(n) static fftsample_t cos_ ## n[n / 2] __a_aligned(16) COSINE_TAB(16); COSINE_TAB(32); @@ -79,8 +77,9 @@ static fftsample_t *cos_tabs[] = { cos_16, cos_32, cos_64, cos_128, cos_256, cos_512, cos_1024, cos_2048, cos_4096, cos_8192, cos_16384, cos_32768, cos_65536, }; +/** \endcond cosine_tabs */ -static int split_radix_permutation(int i, int n) +__a_const static int split_radix_permutation(int i, int n) { int m; if (n <= 2) @@ -141,28 +140,26 @@ static int split_radix_permutation(int i, int n) } /* z[0...8n - 1], w[1...2n - 1] */ -#define PASS(name)\ -static void name(struct fft_complex *z, const fftsample_t *wre, unsigned int n)\ -{\ - fftsample_t t1, t2, t3, t4, t5, t6;\ - int o1 = 2 * n;\ - int o2 = 4 * n;\ - int o3 = 6 * n;\ - const fftsample_t *wim = wre + o1;\ - n--;\ -\ - TRANSFORM_ZERO(z[0], z[o1], z[o2], z[o3]);\ - TRANSFORM(z[1], z[o1 + 1], z[o2 + 1], z[o3 + 1], wre[1], wim[-1]);\ - do {\ - z += 2;\ - wre += 2;\ - wim -= 2;\ - TRANSFORM(z[0], z[o1], z[o2], z[o3], wre[0], wim[0]);\ - TRANSFORM(z[1], z[o1 + 1], z[o2 + 1], z[o3 + 1], wre[1], wim[-1]);\ - } while (--n);\ +static void pass(struct fft_complex *z, const fftsample_t *wre, unsigned int n) +{ + fftsample_t t1, t2, t3, t4, t5, t6; + int o1 = 2 * n; + int o2 = 4 * n; + int o3 = 6 * n; + const fftsample_t *wim = wre + o1; + + n--; + TRANSFORM_ZERO(z[0], z[o1], z[o2], z[o3]); + TRANSFORM(z[1], z[o1 + 1], z[o2 + 1], z[o3 + 1], wre[1], wim[-1]); + do { + z += 2; + wre += 2; + wim -= 2; + TRANSFORM(z[0], z[o1], z[o2], z[o3], wre[0], wim[0]); + TRANSFORM(z[1], z[o1 + 1], z[o2 + 1], z[o3 + 1], wre[1], wim[-1]); + } while (--n); } -PASS(pass) #undef BUTTERFLIES #define BUTTERFLIES BUTTERFLIES_BIG @@ -293,7 +290,6 @@ static void imdct_half(struct mdct_context *s, fftsample_t *output, fft(&s->fft, z); /* post rotation + reordering */ - output += n4; for (k = 0; k < n8; k++) { fftsample_t r0, i0, r1, i1; CMUL(r0, i1, z[n8 - k - 1].im, z[n8 - k - 1].re,