More header work
authorjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 12 Jun 2002 06:39:39 +0000 (06:39 +0000)
committerjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 12 Jun 2002 06:39:39 +0000 (06:39 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@3379 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/modes.c
libspeex/nb_celp.c
libspeex/speex.h
libspeex/speex_header.c
libspeex/speex_header.h

index 41c7c19..b404a46 100644 (file)
@@ -202,6 +202,7 @@ static SpeexNBMode low_sb_mode = {
 
 SpeexMode low_wb_mode = {
    &low_sb_mode,
+   -1,
    &nb_encoder_init,
    &nb_encoder_destroy,
    &nb_encode,
@@ -217,6 +218,7 @@ SpeexMode low_wb_mode = {
 
 SpeexMode speex_nb_mode = {
    &nb_mode,
+   0,
    &nb_encoder_init,
    &nb_encoder_destroy,
    &nb_encode,
@@ -232,6 +234,7 @@ SpeexMode speex_nb_mode = {
 
 SpeexMode speex_nb_lbr_mode = {
    &nb_lbr_mode,
+   1,
    &nb_encoder_init,
    &nb_encoder_destroy,
    &nb_encode,
@@ -270,6 +273,7 @@ static SpeexSBMode sb_wb_mode = {
 
 SpeexMode speex_wb_mode = {
    &sb_wb_mode,
+   2,
    &sb_encoder_init,
    &sb_encoder_destroy,
    &sb_encode,
index 1ed0a05..7475986 100644 (file)
@@ -261,7 +261,7 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
       syn_filt(st->exc, st->bw_lpc2, st->sw, st->frameSize, st->lpcSize);
       
       open_loop_nbest_pitch(st->sw, st->min_pitch, st->max_pitch, st->frameSize, &ol_pitch, 1, st->stack);
-      printf ("ol_pitch: %d\n", ol_pitch);
+      /*printf ("ol_pitch: %d\n", ol_pitch);*/
       if (st->lbr_pitch)
          speex_bits_pack(bits, ol_pitch-st->min_pitch, 7);
 
@@ -273,7 +273,7 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
       
       ol_gain=sqrt(1+ol_gain/st->frameSize);
 
-      printf ("ol_gain: %f\n", ol_gain);
+      /*printf ("ol_gain: %f\n", ol_gain);*/
       if (1) {
          int qe = (int)(floor(3.5*log(ol_gain)));
          if (qe<0)
@@ -426,7 +426,7 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
          pitch = st->ltp_quant(target, sw, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2,
                                exc, st->ltp_params, st->min_pitch, st->max_pitch, 
                                st->lpcSize, st->subframeSize, bits, st->stack, exc2);
-      printf ("cl_pitch: %d\n", pitch);
+      /*printf ("cl_pitch: %d\n", pitch);*/
       st->pitch[sub]=pitch;
 
       /* Update target for adaptive codebook contribution */
@@ -508,20 +508,7 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
             ener+=st->buf2[i]*st->buf2[i];
          ener=sqrt(.1+ener/st->subframeSize);
 
-         printf ("cl_ener: %f %f\n", ener, ol_gain);
-         if (0){
-            static float old_ener=1;
-            if (sub)
-               printf ("ener: %f %f\n", old_ener, ener);
-            old_ener=ener;
-         }
          ener /= ol_gain;
-         {
-            float ratio = log(ener);
-            if (ratio<-3)
-               ratio=-3;
-         printf ("ener_ratio: %f\n", ratio);
-         }
          if (0) {
             int qe = (int)(floor(7*log(ener)));
             if (qe<0)
@@ -537,10 +524,10 @@ void nb_encode(void *state, float *in, SpeexBits *bits)
             speex_bits_pack(bits, qe, 3);
             ener=exc_gain_quant_scal[qe];
             ener=exp(ener);
-            printf ("encode gain: %d %f\n", qe, ener);
+            /*printf ("encode gain: %d %f\n", qe, ener);*/
          }
          ener*=ol_gain;
-         printf ("transmit gain: %f\n", ener);
+         /*printf ("transmit gain: %f\n", ener);*/
          ener_1 = 1/ener;
          
          for (i=0;i<st->subframeSize;i++)
@@ -737,7 +724,7 @@ void nb_decode(void *state, SpeexBits *bits, float *out, int lost)
       int qe;
       qe = speex_bits_unpack_unsigned(bits, 5);
       ol_gain = exp(qe/3.5);
-      printf ("decode_ol_gain: %f\n", ol_gain);
+      /*printf ("decode_ol_gain: %f\n", ol_gain);*/
    }
 
    /*Loop on subframes */
@@ -806,7 +793,7 @@ void nb_decode(void *state, SpeexBits *bits, float *out, int lost)
          /*ener = exp(q_energy/7.0);*/
 
          ener = ol_gain*exp(exc_gain_quant_scal[q_energy]);
-         printf ("decode_cl_gain: %f\n", ener);
+         /*printf ("decode_cl_gain: %f\n", ener);*/
 
          /*printf ("unquant_energy: %d %f\n", q_energy, ener);*/
          
index 4ba9ce0..92c5fdc 100644 (file)
@@ -48,6 +48,9 @@ typedef struct SpeexMode {
    /** Pointer to the low-level mode data */
    void *mode;
 
+   /*ID of the mode*/
+   int modeID;
+
    /** Pointer to encoder initialization function */
    encoder_init_func enc_init;
 
index f6c56bc..6fcbcdf 100644 (file)
@@ -44,12 +44,8 @@ typedef struct SpeexHeader {
 } SpeexHeader;
 */
 
-void init_header(SpeexHeader *header, int rate, int nb_channels, int mode)
+void speex_init_header(SpeexHeader *header, int rate, int nb_channels, SpeexMode *m)
 {
-   SpeexMode *m;
-   
-   m = speex_mode_list[mode];
-
    strncpy(header->speex_string, "Speex   ", 8);
    strncpy(header->speex_version, VERSION, SPEEX_HEADER_VERSION_LENGTH-1);
    header->speex_version[SPEEX_HEADER_VERSION_LENGTH-1]=0;
@@ -58,7 +54,9 @@ void init_header(SpeexHeader *header, int rate, int nb_channels, int mode)
    header->header_size = sizeof(SpeexHeader);
    
    header->rate = rate;
-   header->mode = mode;
+   header->mode = m->modeID;
+   if (m->modeID<0)
+      fprintf (stderr, "This mode is meant to be used alone\n");
    header->nb_channels = nb_channels;
    header->bitrate = nb_channels * m->bitrate;
    header->frame_size = m->frame_size;
@@ -95,10 +93,18 @@ SpeexHeader *speex_packet_to_header(char *packet, int size)
 {
    SpeexHeader *le_header;
 
+   if (strncmp(packet, "Speex   ", 8)!=0)
+   {
+      fprintf (stderr, "This doesn't look like a Speex file\n");
+      return NULL;
+   }
+
    if (sizeof(SpeexHeader) != size)
    {
       fprintf (stderr, "Speex header size mismarch\n");
+      return NULL;
    }
+   
    le_header = malloc(sizeof(SpeexHeader));
    
    memcpy(le_header, packet, sizeof(SpeexHeader));
index 44b85b3..a96c436 100644 (file)
@@ -22,6 +22,7 @@
 #ifndef SPEEX_HEADER_H
 #define SPEEX_HEADER_H
 
+struct SpeexMode;
 #define SPEEX_HEADER_VERSION_LENGTH 20
 
 #define SPEEX_HEADER_VERSION -1
@@ -43,7 +44,7 @@ typedef struct SpeexHeader {
    int reserved4;
 } SpeexHeader;
 
-void init_header(SpeexHeader *header, int rate, int nb_channels, int mode);
+void speex_init_header(SpeexHeader *header, int rate, int nb_channels, struct SpeexMode *m);
 
 char *speex_header_to_packet(SpeexHeader *header, int *size);