adjusted VBR for the new 4 kbps mode (still early stage)
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 15 Jan 2003 07:20:39 +0000 (07:20 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 15 Jan 2003 07:20:39 +0000 (07:20 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@4245 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/modes.c
libspeex/nb_celp.c
libspeex/vbr.c

index e07000f..490ecbe 100644 (file)
@@ -482,8 +482,8 @@ static SpeexSBMode sb_wb_mode = {
    0.7,
    {NULL, &wb_submode1, &wb_submode2, &wb_submode3, &wb_submode4, NULL, NULL, NULL},
    3,
-   {1, 1, 2, 3, 4, 5, 5, 6, 6, 7, 7},
-   {0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4},
+   {1, 8, 2, 3, 4, 5, 5, 6, 6, 7, 7},
+   {1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4},
    vbr_hb_thresh,
    5
 };
index ae28e4f..d8c3857 100644 (file)
@@ -358,7 +358,9 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
       if (st->vbr_enabled) 
       {
          int mode;
-         mode = 7;
+         int choice=0;
+         float min_diff=100;
+         mode = 8;
          while (mode)
          {
             int v1;
@@ -368,11 +370,15 @@ int nb_encode(void *state, float *in, SpeexBits *bits)
                thresh = vbr_nb_thresh[mode][v1];
             else
                thresh = (st->vbr_quality-v1)*vbr_nb_thresh[mode][v1+1] + (1+v1-st->vbr_quality)*vbr_nb_thresh[mode][v1];
-            if (st->relative_quality > thresh)
-               break;
+            if (st->relative_quality > thresh && 
+                st->relative_quality-thresh<min_diff)
+            {
+               choice = mode;
+               min_diff = st->relative_quality-thresh;
+            }
             mode--;
          }
-         
+         mode=choice;
          if (mode==0)
          {
             if (st->dtx_count==0 || lsp_dist>.05 || st->dtx_count>20)
index cedde74..c910179 100644 (file)
 float vbr_nb_thresh[8][11]={
    {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0}, /*   CNG   */
    { 3.5,  2.5,  2.0,  1.2,  0.5,  0.0, -0.5, -0.7, -0.8, -0.9, -1.0}, /*  2 kbps */
-   { 8.5,  5.6,  4.7,  4.2,  3.9,  3.5,  3.0,  2.5,  2.0,  1.0,  0.0}, /*  6 kbps */
+   {10.0,  6.6,  5.2,  4.5,  3.9,  3.5,  3.0,  2.5,  2.3,  1.8,  1.0}, /*  6 kbps */
    {11.0,  8.5,  7.5,  6.5,  5.0,  3.9,  3.9,  3.9,  3.5,  3.0,  1.0}, /*  8 kbps */
    {11.0, 11.0,  9.9,  9.0,  8.0,  7.0,  6.5,  6.0,  5.0,  4.0,  2.0}, /* 11 kbps */
    {11.0, 11.0, 11.0, 11.0,  9.5,  9.0,  8.0,  7.0,  6.5,  5.0,  3.0}, /* 15 kbps */
    {11.0, 11.0, 11.0, 11.0, 11.0, 11.0,  9.5,  8.5,  8.0,  6.5,  4.0}, /* 18 kbps */
-   {11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0,  9.8,  7.5,  5.5}  /* 24 kbps */ 
+   {11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0,  9.8,  7.5,  5.5}, /* 24 kbps */ 
+   { 8.5,  5.3,  3.7,  3.0,  2.5,  2.0,  1.8,  1.5,  1.0,  0.0,  0.0}  /*  4 kbps */
 };