Updating static modes (not done yet)
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sun, 27 Jun 2010 13:51:20 +0000 (09:51 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sun, 27 Jun 2010 13:51:20 +0000 (09:51 -0400)
libcelt/dump_modes.c

index 688229d..5df8021 100644 (file)
@@ -54,7 +54,7 @@
 
 void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
 {
-   int i, j;
+   int i, j, k;
    fprintf(file, "/* The contents of this file is automatically generated and contains static\n");
    fprintf(file, "   definitions for some pre-defined modes */\n");
    fprintf(file, "#include \"modes.h\"\n");
@@ -85,10 +85,9 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       
       fprintf(file, "#ifndef DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mode->mdctSize);
       fprintf(file, "#define DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mode->mdctSize);
-      fprintf (file, "static const celt_int16 allocVectors%d_%d[%d] = {\n", mode->Fs, mode->mdctSize, mode->nbEBands*mode->nbAllocVectors);
+      fprintf (file, "static const unsigned char allocVectors%d_%d[%d] = {\n", mode->Fs, mode->mdctSize, mode->nbEBands*mode->nbAllocVectors);
       for (j=0;j<mode->nbAllocVectors;j++)
       {
-         int k;
          for (k=0;k<mode->nbEBands;k++)
             fprintf (file, "%2d, ", mode->allocVectors[j*mode->nbEBands+k]);
          fprintf (file, "\n");
@@ -97,29 +96,42 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf(file, "#endif\n");
       fprintf(file, "\n");
 
-      fprintf(file, "#ifndef DEF_ALLOC_CACHE%d_%d\n", mode->Fs, mode->mdctSize);
-      fprintf(file, "#define DEF_ALLOC_CACHE%d_%d\n", mode->Fs, mode->mdctSize);
-      for (j=0;j<mode->nbEBands;j++)
+      for (k=0;(1<<k>>1)<=mode->nbShortMdcts;k++)
       {
-         int k;
-         if (j==0 || (mode->bits[j] != mode->bits[j-1]))
+         int mdctSize = mode->shortMdctSize;
+         if (k>=1)
+            mdctSize <<= k-1;
+         else
+            mdctSize >>= 1;
+         fprintf(file, "#ifndef DEF_ALLOC_CACHE%d_%d\n", mode->Fs, mdctSize);
+         fprintf(file, "#define DEF_ALLOC_CACHE%d_%d\n", mode->Fs, mdctSize);
+         for (j=0;j<mode->nbEBands;j++)
          {
-            fprintf (file, "static const celt_int16 allocCache_band%d_%d_%d[MAX_PSEUDO] = {\n", j, mode->Fs, mode->mdctSize);
-            for (k=0;k<MAX_PSEUDO;k++)
-               fprintf (file, "%2d, ", mode->bits[j][k]);
-            fprintf (file, "};\n");
-         } else {
-            fprintf (file, "#define allocCache_band%d_%d_%d allocCache_band%d_%d_%d\n", j, mode->Fs, mode->mdctSize, j-1, mode->Fs, mode->mdctSize);
+            int m;
+            if (mode->_bits[k][j]==NULL)
+            {
+               fprintf (file, "#define allocCache_band%d_%d_%d NULL\n", j, mode->Fs, mdctSize);
+               continue;
+            }
+            if (j==0 || (mode->_bits[k][j] != mode->_bits[k][j-1]))
+            {
+               fprintf (file, "static const celt_int16 allocCache_band%d_%d_%d[MAX_PSEUDO] = {\n", j, mode->Fs, mdctSize);
+               for (m=0;m<MAX_PSEUDO;m++)
+                  fprintf (file, "%2d, ", mode->_bits[k][j][m]);
+               fprintf (file, "};\n");
+            } else {
+               fprintf (file, "#define allocCache_band%d_%d_%d allocCache_band%d_%d_%d\n", j, mode->Fs, mdctSize, j-1, mode->Fs, mdctSize);
+            }
          }
+         fprintf (file, "static const celt_int16 *allocCache%d_%d[%d] = {\n", mode->Fs, mdctSize, mode->nbEBands);
+         for (j=0;j<mode->nbEBands;j++)
+         {
+            fprintf (file, "allocCache_band%d_%d_%d, ", j, mode->Fs, mdctSize);
+         }
+         fprintf (file, "};\n");
+         fprintf(file, "#endif\n");
+         fprintf(file, "\n");
       }
-      fprintf (file, "static const celt_int16 *allocCache%d_%d[%d] = {\n", mode->Fs, mode->mdctSize, mode->nbEBands);
-      for (j=0;j<mode->nbEBands;j++)
-      {
-         fprintf (file, "allocCache_band%d_%d_%d, ", j, mode->Fs, mode->mdctSize);
-      }
-      fprintf (file, "};\n");
-      fprintf(file, "#endif\n");
-      fprintf(file, "\n");
 
       fprintf(file, "#ifndef DEF_LOGN%d_%d\n", mode->Fs, mode->mdctSize);
       fprintf(file, "#define DEF_LOGN%d_%d\n", mode->Fs, mode->mdctSize);
@@ -141,12 +153,28 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf(file, WORD16 ",\t/* ePredCoef */\n", mode->ePredCoef);
       fprintf(file, "%d,\t/* nbAllocVectors */\n", mode->nbAllocVectors);
       fprintf(file, "allocVectors%d_%d,\t/* allocVectors */\n", mode->Fs, mode->mdctSize);
-      fprintf(file, "allocCache%d_%d,\t/* bits */\n", mode->Fs, mode->mdctSize);
-      fprintf(file, "{%d, 0, 0},\t/* mdct */\n", 2*mode->mdctSize);
+      fprintf(file, "NULL,\t/* bits */\n");
+      //fprintf(file, "allocCacheTop%d_%d,\t/* _bits */\n", mode->Fs, mode->mdctSize);
+      fprintf (file, "{ ");
+      for (k=0;(1<<k>>1)<=mode->nbShortMdcts;k++)
+      {
+         int mdctSize = mode->shortMdctSize;
+         if (k>=1)
+            mdctSize <<= k-1;
+         else
+            mdctSize >>= 1;
+         fprintf (file, "allocCache%d_%d, ", mode->Fs, mdctSize);
+      }
+      fprintf (file, "}, /* _bits */\n");
+
+      fprintf (file, "{ ");
+      for (k=0;(1<<k)<=mode->nbShortMdcts;k++)
+         fprintf(file, "{%d, 0, 0},\t ", 2*mode->shortMdctSize<<k);
+      fprintf (file, "}, /* mdct */\n");
+
       fprintf(file, "window%d,\t/* window */\n", mode->overlap);
       fprintf(file, "%d,\t/* nbShortMdcts */\n", mode->nbShortMdcts);
       fprintf(file, "%d,\t/* shortMdctSize */\n", mode->shortMdctSize);
-      fprintf(file, "{%d, 0, 0},\t/* shortMdct */\n", 2*mode->mdctSize);
       fprintf(file, "0,\t/* prob */\n");
       fprintf(file, "logN%d_%d,\t/* logN */\n", mode->Fs, mode->mdctSize);
       fprintf(file, "0x%x,\t/* marker */\n", 0xa110ca7e);