Implemented SPEEX_RESET_STATE and reduced memory allocation size.
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 2 Dec 2002 00:12:48 +0000 (00:12 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 2 Dec 2002 00:12:48 +0000 (00:12 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@4137 0101bb08-14d6-0310-b084-bc0e0c8e3800

TODO
doc/manual.lyx
libspeex/misc.h
libspeex/nb_celp.c
libspeex/sb_celp.c
libspeex/speex.h

diff --git a/TODO b/TODO
index 0cbfef3..71a1184 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,19 +1,19 @@
 Features
--Add maximum/minimum/average bit-rate control for VBR
--Add "VAD-only" VBR (constant bit-rate or comfort noise)
--Add encoder/decoder reset function
+*Average bit-rate VBR
+-Add maximum/minimum bit-rate control for VBR
+*Add "VAD-only" VBR (constant bit-rate or comfort noise)
+*Add encoder/decoder reset function
 -Get the encoder to use the rate of packet loss (more conservative pitch gains)
--No transmission when constant noise/silence
+*No transmission when constant noise/silence
 
 Codec
--Ultra-wideband VBR
--Improve VBR 
--Improve perceptual enhancement
--Packet loss concealment
+*Improve perceptual enhancement (including wideband)
 -Improve VAD
 -Improve narrowband vocoder
 
 Standards
--Complete Speex RTP profile
+*Complete Speex RTP profile
 -MIME type registration
 -MS ACM wrapper
+
+*required for 1.0
index 310e3bb..41a362e 100644 (file)
@@ -3871,7 +3871,7 @@ Content
 
 \layout Standard
 
-Asks decoder to set perceptual enhancement on (1) or off(1)
+Asks decoder to set perceptual enhancement off (0) or on(1)
 \end_inset 
 </cell>
 </row>
@@ -3897,7 +3897,7 @@ Asks decoder to set perceptual enhancement on (1) or off(1)
 
 \layout Standard
 
-Asks encoder to set VBR on (1) or off(1)
+Notify decoder of discontinuous transmission (DTX)
 \end_inset 
 </cell>
 </row>
@@ -4053,7 +4053,7 @@ Request acknowloedge (0=no, 1=all, 2=only for in-band data)
 
 \layout Standard
 
-reserved
+Asks encoder to set VBR off (0), on(1), VAD-only (2)
 \end_inset 
 </cell>
 </row>
index 2ece614..dcf8caa 100644 (file)
@@ -36,7 +36,7 @@
 #define MISC_H
 
 #ifndef VERSION
-#define VERSION "Speex-1.0beta2"
+#define VERSION "Speex-1.0beta4"
 #endif
 
 #ifndef RELEASE
index b93e81e..71ce9b1 100644 (file)
@@ -96,7 +96,7 @@ void *nb_encoder_init(SpeexMode *m)
    st->submodeID=mode->defaultSubmode;
    st->pre_mem=0;
    st->pre_mem2=0;
-   st->bounded_pitch = 0;
+   st->bounded_pitch = 1;
 
    /* Allocating input buffer */
    st->inBuf = (float*)speex_alloc(st->bufSize*sizeof(float));
@@ -130,7 +130,7 @@ void *nb_encoder_init(SpeexMode *m)
 
    st->autocorr = (float*)speex_alloc((st->lpcSize+1)*sizeof(float));
 
-   st->stack = (float*)speex_alloc(20000*sizeof(float));
+   st->stack = (float*)speex_alloc(4000*sizeof(float));
 
    st->buf2 = (float*)speex_alloc(st->windowSize*sizeof(float));
 
@@ -412,6 +412,7 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
       for (i=0;i<st->lpcSize;i++)
          st->mem_sw[i]=0;
       st->first=1;
+      st->bounded_pitch = 1;
 
       /* Final signal synthesis from excitation */
       iir_mem2(st->exc, st->interp_qlpc, st->frame, st->frameSize, st->lpcSize, st->mem_sp);
@@ -774,7 +775,7 @@ void *nb_decoder_init(SpeexMode *m)
    st->pre_mem=0;
    st->lpc_enh_enabled=0;
 
-   st->stack = speex_alloc(20000*sizeof(float));
+   st->stack = speex_alloc(2000*sizeof(float));
 
    st->inBuf = (float*)speex_alloc(st->bufSize*sizeof(float));
    st->frame = st->inBuf + st->bufSize - st->windowSize;
@@ -1360,25 +1361,6 @@ void nb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_SET_QUALITY:
       {
          int quality = (*(int*)ptr);
-         /*
-         if (quality<=0)
-            st->submodeID = 0;
-         else if (quality<=1)
-            st->submodeID = 1;
-         else if (quality<=2)
-            st->submodeID = 2;
-         else if (quality<=4)
-            st->submodeID = 3;
-         else if (quality<=6)
-            st->submodeID = 4;
-         else if (quality<=8)
-            st->submodeID = 5;
-         else if (quality<=9)
-            st->submodeID = 6;
-         else if (quality<=10)
-            st->submodeID = 7;
-         else
-         fprintf(stderr, "Unknown nb_ctl quality: %d\n", quality);*/
          if (quality < 0)
             quality = 0;
          if (quality > 10)
@@ -1420,6 +1402,19 @@ void nb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_SAMPLING_RATE:
       (*(int*)ptr)=st->sampling_rate;
       break;
+   case SPEEX_RESET_STATE:
+      {
+         int i;
+         st->bounded_pitch = 1;
+         st->first = 1;
+         for (i=0;i<st->lpcSize;i++)
+            st->lsp[i]=(M_PI*((float)(i+1)))/(st->lpcSize+1);
+         for (i=0;i<st->lpcSize;i++)
+            st->mem_sw[i]=st->mem_sw_whole[i]=st->mem_sp[i]=st->mem_exc[i]=0;
+         for (i=0;i<st->bufSize;i++)
+            st->excBuf[i]=st->swBuf[i]=st->inBuf[i]=st->exc2Buf[i]=0;
+      }
+      break;
    case SPEEX_GET_PI_GAIN:
       {
          int i;
@@ -1495,6 +1490,15 @@ void nb_decoder_ctl(void *state, int request, void *ptr)
          st->user_callback.callback_id=c->callback_id;
       }
       break;
+   case SPEEX_RESET_STATE:
+      {
+         int i;
+         for (i=0;i<2*st->lpcSize;i++)
+            st->mem_sp[i]=0;
+         for (i=0;i<st->bufSize;i++)
+            st->excBuf[i]=st->inBuf[i]=0;
+      }
+      break;
    case SPEEX_GET_PI_GAIN:
       {
          int i;
index 5a07ed4..333991f 100644 (file)
@@ -163,7 +163,7 @@ void *sb_encoder_init(SpeexMode *m)
    st->gamma1=mode->gamma1;
    st->gamma2=mode->gamma2;
    st->first=1;
-   st->stack = speex_alloc(20000*sizeof(float));
+   st->stack = speex_alloc(4000*sizeof(float));
 
    st->x0d=(float*)speex_alloc(st->frame_size*sizeof(float));
    st->x1d=(float*)speex_alloc(st->frame_size*sizeof(float));
@@ -694,7 +694,7 @@ void *sb_decoder_init(SpeexMode *m)
    st->submodeID=mode->defaultSubmode;
 
    st->first=1;
-   st->stack = speex_alloc(20000*sizeof(float));
+   st->stack = speex_alloc(2000*sizeof(float));
 
    st->x0d=(float*)speex_alloc(st->frame_size*sizeof(float));
    st->x1d=(float*)speex_alloc(st->frame_size*sizeof(float));
@@ -1052,6 +1052,20 @@ void sb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_SAMPLING_RATE:
       (*(int*)ptr)=st->sampling_rate;
       break;
+   case SPEEX_RESET_STATE:
+      {
+         int i;
+         st->first = 1;
+         for (i=0;i<st->lpcSize;i++)
+            st->lsp[i]=(M_PI*((float)(i+1)))/(st->lpcSize+1);
+         for (i=0;i<st->lpcSize;i++)
+            st->mem_sw[i]=st->mem_sp[i]=st->mem_sp2[i]=0;
+         for (i=0;i<st->bufSize;i++)
+            st->excBuf[i]=0;
+         for (i=0;i<QMF_ORDER;i++)
+            st->h0_mem[i]=st->h1_mem[i]=st->g0_mem[i]=st->g1_mem[i]=0;
+      }
+      break;
    case SPEEX_GET_PI_GAIN:
       {
          int i;
@@ -1125,6 +1139,15 @@ void sb_decoder_ctl(void *state, int request, void *ptr)
    case SPEEX_SET_USER_HANDLER:
       speex_decoder_ctl(st->st_low, SPEEX_SET_USER_HANDLER, ptr);
       break;
+   case SPEEX_RESET_STATE:
+      {
+         int i;
+         for (i=0;i<2*st->lpcSize;i++)
+            st->mem_sp[i]=0;
+         for (i=0;i<QMF_ORDER;i++)
+            st->h0_mem[i]=st->h1_mem[i]=st->g0_mem[i]=st->g1_mem[i]=0;
+      }
+      break;
    case SPEEX_GET_PI_GAIN:
       {
          int i;
index 730535e..cd97448 100644 (file)
@@ -102,6 +102,8 @@ extern "C" {
 #define SPEEX_SET_SAMPLING_RATE 24
 #define SPEEX_GET_SAMPLING_RATE 25
 
+#define SPEEX_RESET_STATE 26
+
 #define SPEEX_GET_RELATIVE_QUALITY 27
 
    /* Used internally, not to be used in applications */