Fixed bugs in stereo and zero-mode and did some VBR tuning... it's looking
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Thu, 14 Nov 2002 04:49:14 +0000 (04:49 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Thu, 14 Nov 2002 04:49:14 +0000 (04:49 +0000)
good.

git-svn-id: http://svn.xiph.org/trunk/speex@4109 0101bb08-14d6-0310-b084-bc0e0c8e3800

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

index 3ff3c01..37cbf48 100644 (file)
@@ -320,7 +320,7 @@ static SpeexNBMode nb_mode = {
    {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, &nb_submode7,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
    5,
-   {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7}
+   {1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7}
 };
 
 
index f3d553f..883ee4d 100644 (file)
@@ -390,7 +390,14 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
             mode = 7;
             while (mode)
             {
-               if (level > vbr_nb_thresh[mode][vqual])
+               int v1;
+               float thresh;
+               v1=(int)floor(st->vbr_quality);
+               if (v1==10)
+                  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 (level > thresh)
                   break;
                mode--;
             }
@@ -418,7 +425,7 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
       st->first=1;
 
       /* Final signal synthesis from excitation */
-      iir_mem2(st->exc, st->interp_qlpc, st->frame, st->subframeSize, st->lpcSize, st->mem_sp);
+      iir_mem2(st->exc, st->interp_qlpc, st->frame, st->frameSize, st->lpcSize, st->mem_sp);
 
       in[0] = st->frame[0] + st->preemph*st->pre_mem2;
       for (i=1;i<st->frameSize;i++)
@@ -988,9 +995,9 @@ int nb_decode(void *state, SpeexBits *bits, float *out)
       for (i=0;i<st->frameSize;i++)
          st->exc[i]=0;
       st->first=1;
-      
+
       /* Final signal synthesis from excitation */
-      iir_mem2(st->exc, st->interp_qlpc, st->frame, st->subframeSize, st->lpcSize, st->mem_sp);
+      iir_mem2(st->exc, st->interp_qlpc, st->frame, st->frameSize, st->lpcSize, st->mem_sp);
 
       out[0] = st->frame[0] + st->preemph*st->pre_mem;
       for (i=1;i<st->frameSize;i++)
index 74b9fe9..09b8873 100644 (file)
@@ -90,8 +90,8 @@ void speex_decode_stereo(float *data, int frame_size, SpeexStereoState *stereo)
    e_left  = e_sum*balance / (1+balance);
    e_right = e_sum-e_left;
 
-   e_left  = sqrt(e_left/e_tot);
-   e_right = sqrt(e_right/e_tot);
+   e_left  = sqrt(e_left/(e_tot+.01));
+   e_right = sqrt(e_right/(e_tot+.01));
 
    for (i=frame_size-1;i>=0;i--)
    {
index cda0149..454dcac 100644 (file)
@@ -48,7 +48,7 @@
 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}, /* silence */
    { 4.5,  3.5,  2.5,  1.5,  0.5,  0.0,  0.0,  0.0,  0.0,  0.0, -1.0}, /*  2 kbps */
-   { 9.5,  7.5,  6.5,  5.5,  5.0,  4.0,  4.5,  3.0,  2.0,  1.0,  0.0}, /*  6 kbps */
+   { 9.0,  7.5,  6.5,  5.5,  5.0,  4.0,  4.5,  3.0,  2.0,  1.0,  0.0}, /*  6 kbps */
    {11.0,  9.5,  8.5,  7.5,  7.0,  6.5,  6.0,  5.0,  4.0,  3.0,  1.0}, /*  8 kbps */
    {11.0, 11.0, 11.0,  9.5,  8.5,  7.5,  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.5,  6.5,  5.0,  3.0}, /* 15 kbps */