FFT cleanup
authorJean-Marc Valin <jean-marc.valin@octasic.com>
Wed, 25 Aug 2010 21:15:05 +0000 (17:15 -0400)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Wed, 25 Aug 2010 21:15:05 +0000 (17:15 -0400)
libcelt/_kiss_fft_guts.h
libcelt/cwrs.c
libcelt/dump_modes.c
libcelt/kiss_fft.c
libcelt/mdct.c
libcelt/mdct.h

index f68e7fb..74d9ecb 100644 (file)
@@ -24,7 +24,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */
 #include "kiss_fft.h"
 
-#define MAXFACTORS 32
+#define MAXFACTORS 8
 /* e.g. an fft of length 128 has 4 factors 
  as far as kissfft is concerned
  4*4*4*2
@@ -36,7 +36,7 @@ struct kiss_fft_state{
     kiss_fft_scalar scale;
 #endif
     int shift;
-    int factors[2*MAXFACTORS];
+    celt_int16 factors[2*MAXFACTORS];
     celt_int16 *bitrev;
     kiss_twiddle_cpx *twiddles;
 };
index 5540a2d..843dcd5 100644 (file)
@@ -644,7 +644,7 @@ celt_uint32 icwrs(int _n,int _k,celt_uint32 *_nc,const int *_y,
   return i;
 }
 
-
+#ifndef STATIC_MODES
 void get_required_bits(celt_int16 *_bits,int _n,int _maxk,int _frac){
   int k;
   /*_maxk==0 => there's nothing to do.*/
@@ -665,7 +665,7 @@ void get_required_bits(celt_int16 *_bits,int _n,int _maxk,int _frac){
     RESTORE_STACK;
   }
 }
-
+#endif /* STATIC_MODES */
 
 void encode_pulses(const int *_y,int _n,int _k,ec_enc *_enc){
   celt_uint32 i;
index cb0432b..8c05845 100644 (file)
@@ -108,6 +108,7 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf(file, "#endif\n");
       fprintf(file, "\n");
 
+      /* Pulse cache */
       fprintf(file, "#ifndef DEF_PULSE_CACHE%d_%d\n", mode->Fs, mdctSize);
       fprintf(file, "#define DEF_PULSE_CACHE%d_%d\n", mode->Fs, mdctSize);
       fprintf (file, "static const celt_int16 cache_index%d_%d[%d] = {\n", mode->Fs, mdctSize, (mode->maxLM+2)*mode->nbEBands);
@@ -121,6 +122,24 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf(file, "#endif\n");
       fprintf(file, "\n");
 
+      /* FFTs */
+      /*
+      for (i=0;i<mode->mdct.maxshift;i++)
+      {
+         fprintf(file, "#ifndef FFT_BITREV%d_%d\n", mode->Fs, mdctSize>>i);
+         fprintf(file, "#define FFT_BITREV%d_%d\n", mode->Fs, mdctSize>>i);
+         fprintf (file, "static const celt_int16 fft_bitrev%d_%d[%d] = {\n",
+               mode->Fs, mdctSize/i, mode->mdct.kfft[i]->nfft);
+         for (j=0;j<mode->mdct.kfft[i]->nfft;j++)
+            fprintf (file, "%d, ", mode->mdct.kfft[i]->bitrev[j]);
+         fprintf (file, "};\n");
+
+         fprintf(file, "#endif\n");
+         fprintf(file, "\n");
+      }
+      */
+
+      /* Print the actual mode data */
       fprintf(file, "static const CELTMode mode%d_%d_%d = {\n", mode->Fs, mdctSize, mode->overlap);
       fprintf(file, "0x%x,\t/* marker */\n", 0xa110ca7e);
       fprintf(file, INT32 ",\t/* Fs */\n", mode->Fs);
@@ -135,7 +154,7 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf(file, "%d,\t/* nbAllocVectors */\n", mode->nbAllocVectors);
       fprintf(file, "allocVectors%d_%d,\t/* allocVectors */\n", mode->Fs, mdctSize);
 
-      fprintf(file, "{%d, 0, 0, 0},\t", 2*mode->shortMdctSize*mode->nbShortMdcts);
+      fprintf(file, "{%d, %d, 0, 0},\t", mode->mdct.n, mode->mdct.maxshift);
       fprintf (file, "/* mdct */\n");
 
       fprintf(file, "window%d,\t/* window */\n", mode->overlap);
index e0960f7..b1159be 100644 (file)
@@ -439,7 +439,7 @@ void compute_bitrev_table(
          celt_int16 *f,
          const size_t fstride,
          int in_stride,
-         int * factors,
+         celt_int16 * factors,
          const kiss_fft_cfg st
             )
 {
@@ -472,7 +472,7 @@ static void kf_work(
         const kiss_fft_cpx * f,
         size_t fstride,
         int in_stride,
-        int * factors,
+        celt_int16 * factors,
         const kiss_fft_cfg st,
         int N,
         int s2,
@@ -506,7 +506,7 @@ static void ki_work(
              const kiss_fft_cpx * f,
              size_t fstride,
              int in_stride,
-             int * factors,
+             celt_int16 * factors,
              const kiss_fft_cfg st,
              int N,
              int s2,
@@ -539,7 +539,7 @@ static void ki_work(
     p[i] * m[i] = m[i-1]
     m0 = n                  */
 static 
-int kf_factor(int n,int * facbuf)
+int kf_factor(int n,celt_int16 * facbuf)
 {
     int p=4;
 
index b2b82f8..6a8f897 100644 (file)
@@ -66,7 +66,6 @@ void clt_mdct_init(mdct_lookup *l,int N, int maxshift)
    l->n = N;
    N2 = N>>1;
    N4 = N>>2;
-   l->kfft = celt_alloc(sizeof(kiss_fft_cfg)*(maxshift+1));
    l->maxshift = maxshift;
    for (i=0;i<=maxshift;i++)
    {
@@ -97,7 +96,6 @@ void clt_mdct_clear(mdct_lookup *l)
    int i;
    for (i=0;i<=l->maxshift;i++)
       kiss_fft_free(l->kfft[i]);
-   celt_free(l->kfft);
    celt_free(l->trig);
 }
 
index 678f3f7..9170cb7 100644 (file)
@@ -52,7 +52,7 @@
 typedef struct {
    int n;
    int maxshift;
-   kiss_fft_cfg *kfft;
+   kiss_fft_cfg kfft[4];
    kiss_twiddle_scalar * restrict trig;
 } mdct_lookup;