Added SPEEX_GET_FRAME_SIZE to speex_*_ctl calls
authorjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 3 Jun 2002 02:54:58 +0000 (02:54 +0000)
committerjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 3 Jun 2002 02:54:58 +0000 (02:54 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@3340 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/modes.c
libspeex/nb_celp.c
libspeex/nb_celp.h
libspeex/sb_celp.c
libspeex/sb_celp.h
libspeex/speex.h
libspeex/testenc.c
libspeex/testenc_wb.c
src/speexdec.c
src/speexenc.c

index 9679b1a..c8a5aa4 100644 (file)
@@ -141,8 +141,8 @@ SpeexMode low_wb_mode = {
    &nb_decoder_init,
    &nb_decoder_destroy,
    &nb_decode,
-   &nb_ctl,
-   160
+   &nb_encoder_ctl,
+   &nb_decoder_ctl,
 };
 
 SpeexMode speex_nb_mode = {
@@ -153,8 +153,8 @@ SpeexMode speex_nb_mode = {
    &nb_decoder_init,
    &nb_decoder_destroy,
    &nb_decode,
-   &nb_ctl,
-   160
+   &nb_encoder_ctl,
+   &nb_decoder_ctl,
 };
 
 /* Split-band wideband CELP mode*/
@@ -188,8 +188,8 @@ SpeexMode speex_wb_mode = {
    &sb_decoder_init,
    &sb_decoder_destroy,
    &sb_decode,
-   &sb_ctl,
-   320
+   &sb_encoder_ctl,
+   &sb_decoder_ctl,
 };
 
 
@@ -226,7 +226,12 @@ void speex_decode(void *state, SpeexBits *bits, float *out, int lost)
 }
 
 
-void speex_ctl(void *state, int request, void *ptr)
+void speex_encoder_ctl(void *state, int request, void *ptr)
 {
-   (*((SpeexMode**)state))->ctl(state, request, ptr);
+   (*((SpeexMode**)state))->enc_ctl(state, request, ptr);
+}
+
+void speex_decoder_ctl(void *state, int request, void *ptr)
+{
+   (*((SpeexMode**)state))->dec_ctl(state, request, ptr);
 }
index 003eb18..ce9fc4a 100644 (file)
@@ -746,17 +746,31 @@ void nb_decode(void *state, SpeexBits *bits, float *out, int lost)
 
 }
 
+void nb_encoder_ctl(void *state, int request, void *ptr)
+{
+   EncState *st;
+   st=state;     
+   switch(request)
+   {
+   case SPEEX_GET_FRAME_SIZE:
+      (*(int*)ptr) = st->frameSize;
+      break;
+   default:
+      fprintf(stderr, "Unknown nb_ctl request: %d\n", request);
+   }
+}
 
-void nb_ctl(void *state, int request, void *ptr)
+void nb_decoder_ctl(void *state, int request, void *ptr)
 {
+   DecState *st;
+   st=state;     
    switch(request)
    {
    case SPEEX_SET_PF:
-      {
-         DecState *st;
-         st=state;     
-         st->pf_enabled = *((int*)ptr);
-      }
+      st->pf_enabled = *((int*)ptr);
+      break;
+   case SPEEX_GET_FRAME_SIZE:
+      (*(int*)ptr) = st->frameSize;
       break;
    default:
       fprintf(stderr, "Unknown nb_ctl request: %d\n", request);
index 5739d0f..cddf06e 100644 (file)
@@ -144,7 +144,9 @@ void nb_decoder_destroy(void *state);
 /**Decodes one frame*/
 void nb_decode(void *state, SpeexBits *bits, float *out, int lost);
 
-void nb_ctl(void *state, int request, void *ptr);
+void nb_encoder_ctl(void *state, int request, void *ptr);
+
+void nb_decoder_ctl(void *state, int request, void *ptr);
 
 
 #endif
index 9538bd0..57ee35e 100644 (file)
@@ -869,16 +869,32 @@ void sb_decode(void *state, SpeexBits *bits, float *out, int lost)
 }
 
 
-void sb_ctl(void *state, int request, void *ptr)
+void sb_encoder_ctl(void *state, int request, void *ptr)
 {
+   SBEncState *st;
+   st=state;
    switch(request)
    {
+   case SPEEX_GET_FRAME_SIZE:
+      (*(int*)ptr) = st->full_frame_size;
+      break;
+   default:
+      fprintf(stderr, "Unknown nb_ctl request: %d\n", request);
+   }
+
+}
+
+void sb_decoder_ctl(void *state, int request, void *ptr)
+{
+   SBDecState *st;
+   st=state;
+   switch(request)
+   {
+   case SPEEX_GET_FRAME_SIZE:
+      (*(int*)ptr) = st->full_frame_size;
+      break;
    case SPEEX_SET_PF:
-      {
-         SBDecState *st;
-         st=state;
-         speex_ctl(st->st_low, request, ptr);
-      }
+      speex_decoder_ctl(st->st_low, request, ptr);
       break;
    default:
       fprintf(stderr, "Unknown nb_ctl request: %d\n", request);
index 12a9342..839d37c 100644 (file)
@@ -139,7 +139,8 @@ void sb_decoder_destroy(void *state);
 /**Decodes one frame*/
 void sb_decode(void *state, SpeexBits *bits, float *out, int lost);
 
-void sb_ctl(void *state, int request, void *ptr);
+void sb_encoder_ctl(void *state, int request, void *ptr);
 
+void sb_decoder_ctl(void *state, int request, void *ptr);
 
 #endif
index 263d432..bf00847 100644 (file)
@@ -29,6 +29,9 @@ extern "C" {
 #endif
 
 #define SPEEX_SET_PF 0
+#define SPEEX_GET_PF 1
+#define SPEEX_GET_FRAME_SIZE 3
+
 
 struct SpeexMode;
 
@@ -38,7 +41,8 @@ typedef void (*encode_func)(void *state, float *in, SpeexBits *bits);
 typedef void *(*decoder_init_func)(struct SpeexMode *mode);
 typedef void (*decoder_destroy_func)(void *st);
 typedef void (*decode_func)(void *state, SpeexBits *bits, float *out, int lost);
-typedef void (*ctl_func)(void *state, int request, void *ptr);
+typedef void (*encoder_ctl_func)(void *state, int request, void *ptr);
+typedef void (*decoder_ctl_func)(void *state, int request, void *ptr);
 
 /** Struct defining a Speex mode */ 
 typedef struct SpeexMode {
@@ -63,11 +67,11 @@ typedef struct SpeexMode {
    /** Pointer to frame decoding function */
    decode_func dec;
 
-   /** ioctl-like requests for codec state */
-   ctl_func ctl;
+   /** ioctl-like requests for encoder */
+   encoder_ctl_func enc_ctl;
 
-   /** Frame size used for the current mode */
-   int frameSize;
+   /** ioctl-like requests for decoder */
+   decoder_ctl_func dec_ctl;
 
 } SpeexMode;
 
@@ -84,6 +88,9 @@ void speex_encoder_destroy(void *state);
     "in". The encoded bit-stream is saved in "bits".*/
 void speex_encode(void *state, float *in, SpeexBits *bits);
 
+void speex_encoder_ctl(void *state, int request, void *ptr);
+
+
 /** Returns a handle to a newly created decoder state structure. For now, the mode
     arguent can be &nb_mode or &wb_mode . In the future, more modes may be added. 
     Note that for now if you have more than one channels to decode, you need one 
@@ -97,8 +104,9 @@ void speex_decoder_destroy(void *state);
     bits. The output speech is saved written to out. */
 void speex_decode(void *state, SpeexBits *bits, float *out, int lost);
 
+void speex_decoder_ctl(void *state, int request, void *ptr);
+
 
-void speex_ctl(void *state, int request, void *ptr);
 
 /** Default narrowband mode */
 extern SpeexMode speex_nb_mode;
index 6ae167c..9848840 100644 (file)
@@ -24,7 +24,7 @@ int main(int argc, char **argv)
    dec = speex_decoder_init(&speex_nb_mode);
 
    pf=0;
-   speex_ctl(dec, SPEEX_SET_PF, &pf);
+   speex_decoder_ctl(dec, SPEEX_SET_PF, &pf);
 
    if (argc != 4 && argc != 3)
    {
index 6f38dd6..6fa6a75 100644 (file)
@@ -24,7 +24,7 @@ int main(int argc, char **argv)
    dec = speex_decoder_init(&speex_wb_mode);
 
    pf=0;
-   speex_ctl(dec, SPEEX_SET_PF, &pf);
+   speex_decoder_ctl(dec, SPEEX_SET_PF, &pf);
 
    if (argc != 4 && argc != 3)
    {
index b412097..efbb902 100644 (file)
@@ -184,8 +184,8 @@ int main(int argc, char **argv)
                }
                /*Initialize Speex decoder*/
                st = speex_decoder_init(mode);
-               speex_ctl(st, SPEEX_SET_PF, &pf_enabled);
-               frame_size=mode->frameSize;
+               speex_decoder_ctl(st, SPEEX_SET_PF, &pf_enabled);
+               speex_decoder_ctl(st, SPEEX_GET_FRAME_SIZE, &frame_size);
                first=0;
             } else {
                /*End of stream condition*/
index 7ba9c12..4c1eb8d 100644 (file)
@@ -209,7 +209,7 @@ int main(int argc, char **argv)
       }
    }
 
-   frame_size=mode->frameSize;
+   speex_encoder_ctl(st, SPEEX_GET_FRAME_SIZE, &frame_size);
 
    /*Main encoding loop (one frame per iteration)*/
    while (1)