Some cleaning up, a few less warnings and the decoder no longer does an
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sat, 8 Dec 2007 14:19:36 +0000 (01:19 +1100)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sat, 8 Dec 2007 14:19:36 +0000 (01:19 +1100)
infinitete loop in Laplace decoding when the data is corrupted.

configure.ac
libcelt/bands.c
libcelt/celt.c
libcelt/testcelt.c
libcelt/vq.c
libentcode/laplace.c

index ac39dde..2ccfa82 100644 (file)
@@ -6,7 +6,7 @@ AM_CONFIG_HEADER([config.h])
 
 CELT_MAJOR_VERSION=0
 CELT_MINOR_VERSION=0
-CELT_MICRO_VERSION=0
+CELT_MICRO_VERSION=1
 CELT_EXTRA_VERSION=
 CELT_VERSION=$CELT_MAJOR_VERSION.$CELT_MINOR_VERSION.$CELT_MICRO_VERSION$CELT_EXTRA_VERSION
 
index 6a32137..131692f 100644 (file)
@@ -155,7 +155,7 @@ void quant_bands(const CELTMode *m, float *X, float *P, ec_enc *enc)
    
    for (i=0;i<m->nbEBands;i++)
    {
-      int q, id;
+      int q;
       q = m->nbPulses[i];
       if (q>0) {
          float n = sqrt(B*(eBands[i+1]-eBands[i]));
@@ -185,7 +185,7 @@ void unquant_bands(const CELTMode *m, float *X, float *P, ec_dec *dec)
    
    for (i=0;i<m->nbEBands;i++)
    {
-      int q, id;
+      int q;
       q = m->nbPulses[i];
       if (q>0) {
          float n = sqrt(B*(eBands[i+1]-eBands[i]));
index 26dff19..5d0cfca 100644 (file)
@@ -390,16 +390,13 @@ void celt_decoder_destroy(CELTDecoder *st)
    celt_free(st);
 }
 
-int celt_decode_lost(CELTDecoder *st, short *pcm)
+static void celt_decode_lost(CELTDecoder *st, short *pcm)
 {
    int i, N, B;
    N = st->block_size;
    B = st->nb_blocks;
    
    float X[B*N];         /**< Interleaved signal MDCTs */
-   float P[B*N];         /**< Interleaved pitch MDCTs*/
-   float bandE[st->mode->nbEBands];
-   float gains[st->mode->nbPBands];
    int pitch_index;
    
    pitch_index = st->last_pitch_index;
@@ -448,7 +445,7 @@ int celt_decode(CELTDecoder *st, char *data, int len, short *pcm)
    ec_dec_init(&dec,&buf);
    
    /* Get the pitch index */
-   pitch_index = ec_dec_uint(&dec, MAX_PERIOD-(B+1)*N);;
+   pitch_index = ec_dec_uint(&dec, MAX_PERIOD-(B+1)*N);
    st->last_pitch_index = pitch_index;
    
    /* Get band energies */
index b7abc61..ef62457 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "celt.h"
 #include <stdio.h>
+#include <stdlib.h>
 
 #define FRAME_SIZE 256
 #define NBLOCKS 2
index 701e219..54d0ee0 100644 (file)
@@ -303,7 +303,7 @@ void alg_unquant(float *x, int N, int K, float *p, ec_dec *dec)
 
 void copy_unquant(float *x, int N, int K, float *Y, int B, int N0, ec_dec *dec)
 {
-   int i,j;
+   int j;
    int sign;
    float s;
    int best;
index b06b5ff..8fac282 100644 (file)
@@ -31,7 +31,6 @@
 
 #include "entenc.h"
 #include "entdec.h"
-#include <stdio.h>
 
 static int ec_laplace_get_total(int decay)
 {
@@ -83,7 +82,7 @@ int ec_laplace_decode(ec_dec *dec, int decay)
    fl = 0;
    fs = 1<<15;
    fh = fs;
-   while (fm >= fh)
+   while (fm >= fh && fs != 0)
    {
       fl = fh;
       fs = (fs*decay)>>14;
@@ -100,12 +99,15 @@ int ec_laplace_decode(ec_dec *dec, int decay)
          fh -= fs;
       }
    }
-   //printf ("fl/fh: %d/%d\n", fl, fh);
+   /* Preventing an infinite loop in case something screws up in the decoding */
+   if (fl==fh)
+      fl--;
    ec_dec_update(dec, fl, fh, ft);
    return val;
 }
 
 #if 0
+#include <stdio.h>
 int main()
 {
    int val;