simplify fft_init() due to split_radix is always 1.
authorAndre Noll <maan@systemlinux.org>
Wed, 14 Oct 2009 19:17:28 +0000 (21:17 +0200)
committerAndre Noll <maan@systemlinux.org>
Wed, 18 Nov 2009 18:34:13 +0000 (19:34 +0100)
imdct.c

diff --git a/imdct.c b/imdct.c
index e2cfe03..89ee2df 100644 (file)
--- a/imdct.c
+++ b/imdct.c
@@ -327,9 +327,7 @@ void imdct(struct mdct_context *s, float *output, const float *input)
 
 static int fft_init(struct fft_context *s, int nbits, int inverse)
 {
 
 static int fft_init(struct fft_context *s, int nbits, int inverse)
 {
-       int i, j, m, n;
-       float alpha, c1, s1, s2;
-       int split_radix = 1;
+       int i, j, n;
 
        if (nbits < 2 || nbits > 16)
                return -E_FFT_BAD_PARAMS;
 
        if (nbits < 2 || nbits > 16)
                return -E_FFT_BAD_PARAMS;
@@ -341,64 +339,21 @@ static int fft_init(struct fft_context *s, int nbits, int inverse)
        s->revtab = para_malloc(n * sizeof(uint16_t));
        s->inverse = inverse;
 
        s->revtab = para_malloc(n * sizeof(uint16_t));
        s->inverse = inverse;
 
-       s2 = inverse ? 1.0 : -1.0;
-
        s->exptab1 = NULL;
 
        s->exptab1 = NULL;
 
-       if (split_radix) {
-               for (j = 4; j <= nbits; j++) {
-                       int k = 1 << j;
-                       double freq = 2 * M_PI / k;
-                       fftsample_t *tab = ff_cos_tabs[j - 4];
-                       for (i = 0; i <= k / 4; i++)
-                               tab[i] = cos(i * freq);
-                       for (i = 1; i < k / 4; i++)
-                               tab[k / 2 - i] = tab[i];
-               }
-               for (i = 0; i < n; i++)
-                       s->revtab[-split_radix_permutation(
-                               i, n, s->inverse) & (n - 1)] = i;
-               s->tmp_buf = para_malloc(n * sizeof(struct fft_complex));
-       } else {
-               int np, nblocks, np2, l;
-               struct fft_complex *q;
-
-               for (i = 0; i < (n / 2); i++) {
-                       alpha = 2 * M_PI * (float) i / (float) n;
-                       c1 = cos(alpha);
-                       s1 = sin(alpha) * s2;
-                       s->exptab[i].re = c1;
-                       s->exptab[i].im = s1;
-               }
-
-               np = 1 << nbits;
-               nblocks = np >> 3;
-               np2 = np >> 1;
-               s->exptab1 = para_malloc(np * 2 * sizeof(struct fft_complex));
-               q = s->exptab1;
-               do {
-                       for (l = 0; l < np2; l += 2 * nblocks) {
-                               *q++ = s->exptab[l];
-                               *q++ = s->exptab[l + nblocks];
-
-                               q->re = -s->exptab[l].im;
-                               q->im = s->exptab[l].re;
-                               q++;
-                               q->re = -s->exptab[l + nblocks].im;
-                               q->im = s->exptab[l + nblocks].re;
-                               q++;
-                       }
-                       nblocks = nblocks >> 1;
-               } while (nblocks != 0);
-               freep(&s->exptab);
-               /* compute bit reverse table */
-               for (i = 0; i < n; i++) {
-                       m = 0;
-                       for (j = 0; j < nbits; j++)
-                               m |= ((i >> j) & 1) << (nbits - j - 1);
-                       s->revtab[i] = m;
-               }
+       for (j = 4; j <= nbits; j++) {
+               int k = 1 << j;
+               double freq = 2 * M_PI / k;
+               fftsample_t *tab = ff_cos_tabs[j - 4];
+               for (i = 0; i <= k / 4; i++)
+                       tab[i] = cos(i * freq);
+               for (i = 1; i < k / 4; i++)
+                       tab[k / 2 - i] = tab[i];
        }
        }
+       for (i = 0; i < n; i++)
+               s->revtab[-split_radix_permutation(
+                       i, n, s->inverse) & (n - 1)] = i;
+       s->tmp_buf = para_malloc(n * sizeof(struct fft_complex));
        return 0;
 }
 
        return 0;
 }