Move fine_priority calculation after the bust cap.
[opus.git] / libcelt / dump_modes.c
index 627ab96..84b0b71 100644 (file)
@@ -66,16 +66,23 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
    {
       CELTMode *mode = modes[i];
       int mdctSize;
+      int standard, framerate;
+
       mdctSize = mode->shortMdctSize*mode->nbShortMdcts;
-      fprintf(file, "#ifndef DEF_EBANDS%d_%d\n", mode->Fs, mdctSize);
-      fprintf(file, "#define DEF_EBANDS%d_%d\n", mode->Fs, mdctSize);
-      fprintf (file, "static const celt_int16 eBands%d_%d[%d] = {\n", mode->Fs, mdctSize, mode->nbEBands+2);
-      for (j=0;j<mode->nbEBands+2;j++)
-         fprintf (file, "%d, ", mode->eBands[j]);
-      fprintf (file, "};\n");
-      fprintf(file, "#endif\n");
-      fprintf(file, "\n");
-      
+      standard = (mode->Fs == 400*(celt_int32)mode->shortMdctSize);
+      framerate = mode->Fs/mode->shortMdctSize;
+
+      if (!standard)
+      {
+         fprintf(file, "#ifndef DEF_EBANDS%d_%d\n", mode->Fs, mdctSize);
+         fprintf(file, "#define DEF_EBANDS%d_%d\n", mode->Fs, mdctSize);
+         fprintf (file, "static const celt_int16 eBands%d_%d[%d] = {\n", mode->Fs, mdctSize, mode->nbEBands+2);
+         for (j=0;j<mode->nbEBands+2;j++)
+            fprintf (file, "%d, ", mode->eBands[j]);
+         fprintf (file, "};\n");
+         fprintf(file, "#endif\n");
+         fprintf(file, "\n");
+      }
       
       fprintf(file, "#ifndef DEF_WINDOW%d\n", mode->overlap);
       fprintf(file, "#define DEF_WINDOW%d\n", mode->overlap);
@@ -86,22 +93,25 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf(file, "#endif\n");
       fprintf(file, "\n");
       
-      fprintf(file, "#ifndef DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mdctSize);
-      fprintf(file, "#define DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mdctSize);
-      fprintf (file, "static const unsigned char allocVectors%d_%d[%d] = {\n", mode->Fs, mdctSize, mode->nbEBands*mode->nbAllocVectors);
-      for (j=0;j<mode->nbAllocVectors;j++)
+      if (!standard)
       {
-         for (k=0;k<mode->nbEBands;k++)
-            fprintf (file, "%2d, ", mode->allocVectors[j*mode->nbEBands+k]);
-         fprintf (file, "\n");
+         fprintf(file, "#ifndef DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mdctSize);
+         fprintf(file, "#define DEF_ALLOC_VECTORS%d_%d\n", mode->Fs, mdctSize);
+         fprintf (file, "static const unsigned char allocVectors%d_%d[%d] = {\n", mode->Fs, mdctSize, mode->nbEBands*mode->nbAllocVectors);
+         for (j=0;j<mode->nbAllocVectors;j++)
+         {
+            for (k=0;k<mode->nbEBands;k++)
+               fprintf (file, "%2d, ", mode->allocVectors[j*mode->nbEBands+k]);
+            fprintf (file, "\n");
+         }
+         fprintf (file, "};\n");
+         fprintf(file, "#endif\n");
+         fprintf(file, "\n");
       }
-      fprintf (file, "};\n");
-      fprintf(file, "#endif\n");
-      fprintf(file, "\n");
 
-      fprintf(file, "#ifndef DEF_LOGN%d_%d\n", mode->Fs, mdctSize);
-      fprintf(file, "#define DEF_LOGN%d_%d\n", mode->Fs, mdctSize);
-      fprintf (file, "static const celt_int16 logN%d_%d[%d] = {\n", mode->Fs, mdctSize, mode->nbEBands);
+      fprintf(file, "#ifndef DEF_LOGN%d\n", framerate);
+      fprintf(file, "#define DEF_LOGN%d\n", framerate);
+      fprintf (file, "static const celt_int16 logN%d[%d] = {\n", framerate, mode->nbEBands);
       for (j=0;j<mode->nbEBands;j++)
          fprintf (file, "%d, ", mode->logN[j]);
       fprintf (file, "};\n");
@@ -109,13 +119,13 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       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);
+      fprintf(file, "#ifndef DEF_PULSE_CACHE%d\n", mode->Fs/mdctSize);
+      fprintf(file, "#define DEF_PULSE_CACHE%d\n", mode->Fs/mdctSize);
+      fprintf (file, "static const celt_int16 cache_index%d[%d] = {\n", mode->Fs/mdctSize, (mode->maxLM+2)*mode->nbEBands);
       for (j=0;j<mode->nbEBands*(mode->maxLM+2);j++)
          fprintf (file, "%d, ", mode->cache.index[j]);
       fprintf (file, "};\n");
-      fprintf (file, "static const unsigned char cache_bits%d_%d[%d] = {\n", mode->Fs, mdctSize, mode->cache.size);
+      fprintf (file, "static const unsigned char cache_bits%d[%d] = {\n", mode->Fs/mdctSize, mode->cache.size);
       for (j=0;j<mode->cache.size;j++)
          fprintf (file, "%d, ", mode->cache.bits[j]);
       fprintf (file, "};\n");
@@ -132,14 +142,14 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf (file, "};\n");
 
       /* FFT Bitrev tables */
-      for (i=0;i<=mode->mdct.maxshift;i++)
+      for (k=0;k<=mode->mdct.maxshift;k++)
       {
-         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, "#ifndef FFT_BITREV%d\n", mode->mdct.kfft[k]->nfft);
+         fprintf(file, "#define FFT_BITREV%d\n", mode->mdct.kfft[k]->nfft);
+         fprintf (file, "static const celt_int16 fft_bitrev%d[%d] = {\n",
+               mode->mdct.kfft[k]->nfft, mode->mdct.kfft[k]->nfft);
+         for (j=0;j<mode->mdct.kfft[k]->nfft;j++)
+            fprintf (file, "%d, ", mode->mdct.kfft[k]->bitrev[j]);
          fprintf (file, "};\n");
 
          fprintf(file, "#endif\n");
@@ -147,22 +157,22 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       }
 
       /* FFT States */
-      for (i=0;i<=mode->mdct.maxshift;i++)
+      for (k=0;k<=mode->mdct.maxshift;k++)
       {
-         fprintf(file, "#ifndef FFT_STATE%d_%d\n", mode->Fs, mdctSize>>i);
-         fprintf(file, "#define FFT_STATE%d_%d\n", mode->Fs, mdctSize>>i);
-         fprintf (file, "static const kiss_fft_state fft_state%d_%d = {\n",
-               mode->Fs, mdctSize>>i);
-         fprintf (file, "%d,\t/* nfft */\n", mode->mdct.kfft[i]->nfft);
+         fprintf(file, "#ifndef FFT_STATE%d_%d_%d\n", mode->Fs, mdctSize, k);
+         fprintf(file, "#define FFT_STATE%d_%d_%d\n", mode->Fs, mdctSize, k);
+         fprintf (file, "static const kiss_fft_state fft_state%d_%d_%d = {\n",
+               mode->Fs, mdctSize, k);
+         fprintf (file, "%d,\t/* nfft */\n", mode->mdct.kfft[k]->nfft);
 #ifndef FIXED_POINT
-         fprintf (file, "%f,\t/* scale */\n", mode->mdct.kfft[i]->scale);
+         fprintf (file, "%f,\t/* scale */\n", mode->mdct.kfft[k]->scale);
 #endif
-         fprintf (file, "%d,\t/* shift */\n", mode->mdct.kfft[i]->shift);
+         fprintf (file, "%d,\t/* shift */\n", mode->mdct.kfft[k]->shift);
          fprintf (file, "{");
          for (j=0;j<2*MAXFACTORS;j++)
-            fprintf (file, "%d, ", mode->mdct.kfft[i]->factors[j]);
+            fprintf (file, "%d, ", mode->mdct.kfft[k]->factors[j]);
          fprintf (file, "},\t/* factors */\n");
-         fprintf (file, "fft_bitrev%d_%d,\t/* bitrev */\n", mode->Fs, mdctSize>>i);
+         fprintf (file, "fft_bitrev%d,\t/* bitrev */\n", mode->mdct.kfft[k]->nfft);
          fprintf (file, "fft_twiddles%d_%d,\t/* bitrev */\n", mode->Fs, mdctSize);
          fprintf (file, "};\n");
 
@@ -174,11 +184,11 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       fprintf(file, "\n");
 
       /* MDCT twiddles */
-      fprintf(file, "#ifndef MDCT_TWIDDLES%d_%d\n", mode->Fs, mdctSize);
-      fprintf(file, "#define MDCT_TWIDDLES%d_%d\n", mode->Fs, mdctSize);
-      fprintf (file, "static const celt_word16 mdct_twiddles%d_%d[%d] = {\n",
-            mode->Fs, mdctSize, mode->mdct.n/4);
-      for (j=0;j<mode->mdct.n/4;j++)
+      fprintf(file, "#ifndef MDCT_TWIDDLES%d\n", mdctSize);
+      fprintf(file, "#define MDCT_TWIDDLES%d\n", mdctSize);
+      fprintf (file, "static const celt_word16 mdct_twiddles%d[%d] = {\n",
+            mdctSize, mode->mdct.n/4+1);
+      for (j=0;j<=mode->mdct.n/4;j++)
          fprintf (file, WORD16 ", ", mode->mdct.trig[j]);
       fprintf (file, "};\n");
 
@@ -188,7 +198,6 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
 
       /* 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);
       fprintf(file, "%d,\t/* overlap */\n", mode->overlap);
       fprintf(file, "%d,\t/* nbEBands */\n", mode->nbEBands);
@@ -197,24 +206,28 @@ void dump_modes(FILE *file, CELTMode **modes, int nb_modes)
       for (j=0;j<4;j++)
          fprintf(file, WORD16 ", ", mode->preemph[j]);
       fprintf(file, "},\t/* preemph */\n");
-      fprintf(file, "eBands%d_%d,\t/* eBands */\n", mode->Fs, mdctSize);
+      if (standard)
+         fprintf(file, "eband5ms,\t/* eBands */\n");
+      else
+         fprintf(file, "eBands%d_%d,\t/* eBands */\n", mode->Fs, mdctSize);
       fprintf(file, "%d,\t/* nbAllocVectors */\n", mode->nbAllocVectors);
-      fprintf(file, "allocVectors%d_%d,\t/* allocVectors */\n", mode->Fs, mdctSize);
+      if (standard)
+         fprintf(file, "band_allocation,\t/* allocVectors */\n");
+      else
+         fprintf(file, "allocVectors%d_%d,\t/* allocVectors */\n", mode->Fs, mdctSize);
 
       fprintf(file, "{%d, %d, {", mode->mdct.n, mode->mdct.maxshift);
-      for (i=0;i<=mode->mdct.maxshift;i++)
-         fprintf(file, "fft_state%d_%d, ", mode->Fs, mdctSize>>i);
-      fprintf (file, "}, mdct_twiddles%d_%d},\t/* mdct */\n", mode->Fs, mdctSize);
+      for (k=0;k<=mode->mdct.maxshift;k++)
+         fprintf(file, "&fft_state%d_%d_%d, ", mode->Fs, mdctSize, k);
+      fprintf (file, "}, mdct_twiddles%d},\t/* mdct */\n", mdctSize);
 
       fprintf(file, "window%d,\t/* window */\n", mode->overlap);
       fprintf(file, "%d,\t/* maxLM */\n", mode->maxLM);
       fprintf(file, "%d,\t/* nbShortMdcts */\n", mode->nbShortMdcts);
       fprintf(file, "%d,\t/* shortMdctSize */\n", mode->shortMdctSize);
-      fprintf(file, "0,\t/* prob */\n");
-      fprintf(file, "logN%d_%d,\t/* logN */\n", mode->Fs, mdctSize);
-      fprintf(file, "{%d, cache_index%d_%d, cache_bits%d_%d},\t/* cache */\n",
-            mode->cache.size, mode->Fs, mdctSize, mode->Fs, mdctSize);
-      fprintf(file, "0x%x,\t/* marker */\n", 0xa110ca7e);
+      fprintf(file, "logN%d,\t/* logN */\n", framerate);
+      fprintf(file, "{%d, cache_index%d, cache_bits%d},\t/* cache */\n",
+            mode->cache.size, mode->Fs/mdctSize, mode->Fs/mdctSize);
       fprintf(file, "};\n");
    }
    fprintf(file, "\n");
@@ -266,6 +279,12 @@ void dump_header(FILE *file, CELTMode **modes, int nb_modes)
    }
 }
 
+#ifdef FIXED_POINT
+#define BASENAME "static_modes_fixed"
+#else
+#define BASENAME "static_modes_float"
+#endif
+
 int main(int argc, char **argv)
 {
    int i, nb;
@@ -285,10 +304,10 @@ int main(int argc, char **argv)
       frame   = atoi(argv[2*i+2]);
       m[i] = celt_mode_create(Fs, frame, NULL);
    }
-   file = fopen("static_modes.c", "w");
+   file = fopen(BASENAME ".c", "w");
    dump_modes(file, m, nb);
    fclose(file);
-   file = fopen("static_modes.h", "w");
+   file = fopen(BASENAME ".h", "w");
    dump_header(file, m, nb);
    fclose(file);
    for (i=0;i<nb;i++)