bit of cleaning up, default sampling rate
[opus.git] / libcelt / modes.c
index 48303d4..a841ec5 100644 (file)
 #include "modes.h"
 
 #define NBANDS 18
-#define PBANDS 5
-#define PITCH_END 37
+#define PBANDS 8
+#define PITCH_END 74
 
 #define NBANDS128 15
-#define PBANDS128 5
-#define PITCH_END128 36
+#define PBANDS128 8
+#define PITCH_END128 45
 
 static const float means[15] = {
    14.8621, 12.6918, 10.2978, 9.5862, 10.3784, 
@@ -57,31 +57,50 @@ static const int decay18[18] = {
    14800, 13800, 12600, 12000, 11000, 11000, 10000, 10000, 9800, 8400, 8400, 8000, 7500, 7000, 7000, 7000, 6000, 6000
 };
 
-const int qbank0[NBANDS   +2] = {0, 2, 4, 6, 8, 10, 12, 14, 16, 19, 22, 26, 31, 37, 45, 56, 71, 91, 116, 128};
-const int pbank0[PBANDS   +2] = {0, 4, 8, 12, 19, PITCH_END, 128};
-const int qpulses0[NBANDS   ] = {7, 5, 5, 4, 4,  3,  3,  2,  3,  2,  2,  2,  2,  0,  0,  0,  0,  0};
+const int qbank0[NBANDS   +2] = {0,  4,  8, 12, 16, 20, 24, 28, 32, 38, 44, 52, 62, 74, 90,112,142,182, 232,256};
+const int pbank0[PBANDS   +2] = {0,  4,  8, 12, 16,     24,         38,         62, PITCH_END, 256};
+//const int pbank0[PBANDS   +2] = {0, 4, 8, 12, 19, PITCH_END, 128};
+const int qpulses0[NBANDS   ] = {7,  6,  6,  5,  5,  5,  5,  4,  3,  3,  3,  3,  3,  3,  -3,  -2,  0,  0};
 //const int qpulses0[NBANDS   ] = {7, 5, 5, 5, 4,  4,  3,  3,  3,  3,  4,  3,  3, -2,  0,  0,  0,  0};
 
 
 const int qbank1[NBANDS128+2] = {0, 2, 4, 6, 8, 12, 16, 20, 24, 28, 36, 44, 52, 68, 84, 116, 128};
 
-const int qpulses1[NBANDS128] = {7, 5, 5, 5, 4,  5,  4,  5,  5,  4, -2, 0, 0, 0,  0};
-const int qpulses2[NBANDS128] = {28,24,20,16,24,20, 18, 12, 10,  10,-7, -4, 0, 0,  0};
+const int qpulses1[NBANDS128] = {7, 5, 5, 5, 4,  5,  4,  5,  5,  4,  2, 0, 0, 0,  0};
+const int qpulses2[NBANDS] = {28,25,23,20,18,15, 13, 11, 10,  8,8, 7, 7, -6,  -5, -4, -1, -1};
+//const int qpulses2[NBANDS128] = {28,24,20,16,24,20, 18, 12, 10,  10,-7, -4, 1, 1,  1, 1, 1, 1};
 const int qpulses2s[NBANDS128] ={38,30,24,20,24,20, 18, 16, 14, 20,-20,-14, -8, -8,  -5};
 
-const int pbank1[PBANDS128+2] = {0, 4, 8, 12, 20, PITCH_END128, 128};
+const int qpulses4s[NBANDS] ={38,31,25,21,18,16, 14, 12, 14, 12,14,15, 14, 15, 16, 12, 10, 6};
+
+//const int qpulses4s[NBANDS128] ={38,35,30,27,24,22, 21, 20, 22, 20,20,20, 20, 20, 14, 12, 12, 12};
+
+const int pbank1[PBANDS128+2] = {0, 2, 4, 6, 8, 12, 20, 28, PITCH_END128, 128};
+//const int pbank1[PBANDS128+2] = {0, 4, 8, 12, 20, PITCH_END128, 128};
+
+#define NALLOCS 7
+int bitalloc0[NBANDS*NALLOCS] = 
+   { 5,  4,  4,  4,  3,  3,  2,  2,  2,  2,  1,  1,  1,  1,  0,  0,  0,  0,
+     8,  7,  7,  6,  6,  6,  5,  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
+    10,  9,  9,  8,  8,  8,  8,  8,  8,  8,  9, 10, 11, 12, 17, 15,  6,  7,
+    16, 15, 14, 14, 14, 13, 13, 13, 13, 13, 15, 16, 17, 18, 20, 18, 11, 12,
+    26, 25, 24, 22, 20, 18, 19, 19, 25, 22, 25, 30, 30, 35, 35, 35, 35, 25,
+    32, 30, 28, 27, 25, 24, 23, 21, 29, 27, 35, 40, 42, 50, 59, 54, 51, 36,
+    42, 40, 38, 37, 35, 34, 33, 31, 39, 37, 45, 50, 52, 60, 60, 60, 60, 46,
+};
 
 
 #define NBANDS256 15
-#define PBANDS256 5
-#define PITCH_END256 72
-const int qbank3[NBANDS256+2] = {0, 4, 8, 12, 16, 24, 32, 40, 48, 56, 72, 88, 104, 126, 168, 232, 256};
-const int pbank3[PBANDS256+2] = {0, 8, 16, 24, 40, PITCH_END256, 256};
+#define PBANDS256 8
+#define PITCH_END256 88
+const int qbank3[NBANDS256+2] = {0, 4, 8, 12, 16, 24, 32, 40, 48, 56, 72, 88, 104, 136, 168, 232, 256};
+//const int pbank3[PBANDS256+2] = {0, 8, 16, 24, 40, PITCH_END256, 256};
+const int pbank3[PBANDS256+2] = {0, 4, 8, 12, 16, 24, 40, 56, PITCH_END256, 256};
 
-const CELTMode mode0 = {
+static const CELTMode mono_mode = {
    128,         /**< overlap */
-   128,         /**< mdctSize */
-   2,           /**< nbMdctBlocks */
+   256,         /**< mdctSize */
+   1,           /**< nbMdctBlocks */
    1,           /**< channels */
    
    NBANDS,      /**< nbEBands */
@@ -95,90 +114,52 @@ const CELTMode mode0 = {
    0.8,         /**< ePredCoef */
    means18,     /**< eMeans */
    decay18,     /**< eDecay */
-};
-
-
-/* Approx 38 kbps @ 44.1 kHz */
-const CELTMode mode1 = {
-   128,         /**< overlap */
-   128,         /**< mdctSize */
-   2,           /**< nbMdctBlocks */
-   1,           /**< channels */
-   
-   NBANDS128,   /**< nbEBands */
-   PBANDS128,   /**< nbPBands */
-   PITCH_END128,/**< pitchEnd */
-   
-   qbank1,      /**< eBands */
-   pbank1,      /**< pBands*/
-   qpulses1,    /**< nbPulses */
    
-   0.7,         /**< ePredCoef */
-   means,       /**< eMeans */
-   decay,       /**< eDecay */
+   NALLOCS,     /**< nbAllocVectors */
+   bitalloc0,   /**< allocVectors */
 };
 
-/* Approx 58 kbps @ 44.1 kHz */
-const CELTMode mode2 = {
-   128,         /**< overlap */
-   128,         /**< mdctSize */
-   2,           /**< nbMdctBlocks */
-   1,           /**< channels */
-   
-   NBANDS128,   /**< nbEBands */
-   PBANDS128,   /**< nbPBands */
-   PITCH_END128,/**< pitchEnd */
-   
-   qbank1,      /**< eBands */
-   pbank1,      /**< pBands*/
-   qpulses2,    /**< nbPulses */
-   
-   0.7,         /**< ePredCoef */
-   means,       /**< eMeans */
-   decay,       /**< eDecay */
-};
 
-const CELTMode mode3 = {
+/* Stereo mode around 120 kbps */
+static const CELTMode stereo_mode = {
    128,         /**< overlap */
    256,         /**< mdctSize */
    1,           /**< nbMdctBlocks */
-   1,           /**< channels */
-   
-   NBANDS256,   /**< nbEBands */
-   PBANDS256,   /**< nbPBands */
-   PITCH_END256,/**< pitchEnd */
-   
-   qbank3,      /**< eBands */
-   pbank3,      /**< pBands*/
-   qpulses1,    /**< nbPulses */
-   
-   0.7,         /**< ePredCoef */
-   means,       /**< eMeans */
-   decay,       /**< eDecay */
-};
-
-/* Stereo mode around 120 kbps */
-const CELTMode mode4 = {
-   128,         /**< overlap */
-   128,         /**< mdctSize */
-   2,           /**< nbMdctBlocks */
    2,           /**< channels */
    
-   NBANDS128,   /**< nbEBands */
-   PBANDS128,   /**< nbPBands */
-   PITCH_END128,/**< pitchEnd */
+   NBANDS,      /**< nbEBands */
+   PBANDS,      /**< nbPBands */
+   PITCH_END,   /**< pitchEnd */
    
-   qbank1,      /**< eBands */
-   pbank1,      /**< pBands*/
-   qpulses2s,   /**< nbPulses */
+   qbank0,      /**< eBands */
+   pbank0,      /**< pBands*/
+   qpulses4s,   /**< nbPulses */
    
-   0.7,         /**< ePredCoef */
-   means,       /**< eMeans */
-   decay,       /**< eDecay */
+   0.8,         /**< ePredCoef */
+   means18,     /**< eMeans */
+   decay18,     /**< eDecay */
+   
+   NALLOCS,     /**< nbAllocVectors */
+   bitalloc0,   /**< allocVectors */
 };
 
-const CELTMode const *celt_mode0 = &mode0;
-const CELTMode const *celt_mode1 = &mode1;
-const CELTMode const *celt_mode2 = &mode2;
-const CELTMode const *celt_mode3 = &mode3;
-const CELTMode const *celt_mode4 = &mode4;
+const CELTMode const *celt_mono = &mono_mode;
+const CELTMode const *celt_stereo = &stereo_mode;
+
+
+int celt_mode_info(const CELTMode *mode, int request, celt_int32_t *value)
+{
+   switch (request)
+   {
+      case CELT_GET_FRAME_SIZE:
+         *value = mode->mdctSize;
+         break;
+      case CELT_GET_LOOKAHEAD:
+         *value = mode->overlap;
+         break;
+      case CELT_GET_NB_CHANNELS:
+         *value = mode->nbChannels;
+         break;
+   }
+}
+