Defining RADIX_TWO_ONLY removes all butterflies, except for radix 2 and 4.
authorJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Wed, 5 Mar 2008 06:34:45 +0000 (17:34 +1100)
committerJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Wed, 5 Mar 2008 06:34:45 +0000 (17:34 +1100)
libcelt/kiss_fft.c
tests/dft-test.c
tests/mdct-test.c
tests/real-fft-test.c

index b072044..275a117 100644 (file)
@@ -188,6 +188,7 @@ static void ki_bfly4(
    }
 }
 
+#ifndef RADIX_TWO_ONLY
 
 static void kf_bfly3(
                      kiss_fft_cpx * Fout,
@@ -477,6 +478,7 @@ static void ki_bfly_generic(
       }
    }
 }
+#endif
 
 static
 void compute_bitrev_table(
@@ -534,10 +536,14 @@ void kf_work(
 
     switch (p) {
         case 2: kf_bfly2(Fout,fstride,st,m, N, m2); break;
-        case 3: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; kf_bfly3(Fout,fstride,st,m);} break; 
         case 4: kf_bfly4(Fout,fstride,st,m, N, m2); break;
+#ifndef RADIX_TWO_ONLY
+        case 3: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; kf_bfly3(Fout,fstride,st,m);} break; 
         case 5: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; kf_bfly5(Fout,fstride,st,m);} break; 
         default: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; kf_bfly_generic(Fout,fstride,st,m,p);} break;
+#else
+       default: celt_fatal("kiss_fft: only powers of two enabled");
+#endif
     }    
 }
 
@@ -564,10 +570,14 @@ void ki_work(
 
    switch (p) {
       case 2: ki_bfly2(Fout,fstride,st,m, N, m2); break;
-      case 3: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; ki_bfly3(Fout,fstride,st,m);} break; 
       case 4: ki_bfly4(Fout,fstride,st,m, N, m2); break;
+#ifndef RADIX_TWO_ONLY
+      case 3: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; ki_bfly3(Fout,fstride,st,m);} break; 
       case 5: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; ki_bfly5(Fout,fstride,st,m);} break; 
       default: for (i=0;i<N;i++){Fout=Fout_beg+i*m2; ki_bfly_generic(Fout,fstride,st,m,p);} break;
+#else
+      default: celt_fatal("kiss_fft: only powers of two enabled");
+#endif
    }    
 }
 
index 7f15331..fab680b 100644 (file)
@@ -104,6 +104,11 @@ int main(int argc,char ** argv)
     }else{
         test1d(32,0);
         test1d(32,1);
+        test1d(128,0);
+        test1d(128,1);
+        test1d(256,0);
+        test1d(256,1);
+#ifndef RADIX_TWO_ONLY
         test1d(36,0);
         test1d(36,1);
         test1d(50,0);
@@ -112,10 +117,7 @@ int main(int argc,char ** argv)
         test1d(120,1);
         test1d(105,0);
         test1d(105,1);
-        test1d(128,0);
-        test1d(128,1);
-        test1d(256,0);
-        test1d(256,1);
+#endif
     }
     return ret;
 }
index dea054f..8b3a7bb 100644 (file)
@@ -123,6 +123,11 @@ int main(int argc,char ** argv)
     }else{
         test1d(32,0);
         test1d(32,1);
+        test1d(256,0);
+        test1d(256,1);
+        test1d(512,0);
+        test1d(512,1);
+#ifndef RADIX_TWO_ONLY
         test1d(40,0);
         test1d(40,1);
         test1d(56,0);
@@ -131,12 +136,9 @@ int main(int argc,char ** argv)
         test1d(120,1);
         test1d(240,0);
         test1d(240,1);
-        test1d(256,0);
-        test1d(256,1);
         test1d(480,0);
         test1d(480,1);
-        test1d(512,0);
-        test1d(512,1);
+#endif
     }
     return ret;
 }
index 25db1a4..fc73f70 100644 (file)
@@ -64,7 +64,11 @@ double snr_compare_scal( kiss_fft_scalar * vec1,kiss_fft_scalar * vec2, int n)
     }
     return snr;
 }
+#ifdef RADIX_TWO_ONLY
+#define NFFT 1024
+#else
 #define NFFT 8*3*5
+#endif
 
 #ifndef NUMFFTS
 #define NUMFFTS 10000