Re-ordered the parameters in the stream: [energy, pitch index, pitch gains]
authorJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Mon, 11 Feb 2008 05:44:48 +0000 (16:44 +1100)
committerJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Mon, 11 Feb 2008 05:44:48 +0000 (16:44 +1100)
Also fixed a bug that was exposed by the change (and removed some warnings)

libcelt/celt.c
libcelt/celt.h
libcelt/kiss_fft.c
libcelt/modes.c
libcelt/pgain_table.h
libcelt/psy.c
libcelt/quant_bands.c
libcelt/rate.c
libcelt/testcelt.c

index 29454d9..336647c 100644 (file)
@@ -258,7 +258,6 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
       }
    }
    find_spectral_pitch(st->fft, &st->psy, in, st->out_mem, MAX_PERIOD, (B+1)*N, C, &pitch_index);
-   ec_enc_uint(&st->enc, pitch_index, MAX_PERIOD-(B+1)*N);
    
    /* Compute MDCTs of the pitch part */
    compute_mdcts(&st->mdct_lookup, st->window, st->out_mem+pitch_index*C, P, N, B, C);
@@ -298,6 +297,9 @@ int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, i
    /* Pitch prediction */
    compute_pitch_gain(st->mode, X, P, gains, bandE);
    quant_pitch(gains, st->mode->nbPBands, &st->enc);
+   
+   ec_enc_uint(&st->enc, pitch_index, MAX_PERIOD-(B+1)*N);
+
    pitch_quant_bands(st->mode, X, P, gains);
 
    //for (i=0;i<B*N;i++) printf("%f ",P[i]);printf("\n");
@@ -509,7 +511,7 @@ static void celt_decode_lost(CELTDecoder *st, short *pcm)
    }
 }
 
-int celt_decode(CELTDecoder *st, char *data, int len, celt_int16_t *pcm)
+int celt_decode(CELTDecoder *st, unsigned char *data, int len, celt_int16_t *pcm)
 {
    int i, c, N, B, C;
    N = st->block_size;
@@ -533,18 +535,21 @@ int celt_decode(CELTDecoder *st, char *data, int len, celt_int16_t *pcm)
    ec_byte_readinit(&buf,data,len);
    ec_dec_init(&dec,&buf);
    
+   /* Get band energies */
+   unquant_energy(st->mode, bandE, st->oldBandE, &dec);
+   
+   /* Get the pitch gains */
+   unquant_pitch(gains, st->mode->nbPBands, &dec);
+   
    /* Get the pitch index */
    pitch_index = ec_dec_uint(&dec, MAX_PERIOD-(B+1)*N);
    st->last_pitch_index = pitch_index;
    
-   /* Get band energies */
-   unquant_energy(st->mode, bandE, st->oldBandE, &dec);
-   
    /* Pitch MDCT */
    compute_mdcts(&st->mdct_lookup, st->window, st->out_mem+pitch_index*C, P, N, B, C);
 
    {
-      float bandEp[st->mode->nbEBands];
+      float bandEp[st->mode->nbEBands*C];
       compute_band_energies(st->mode, P, bandEp);
       normalise_bands(st->mode, P, bandEp);
    }
@@ -552,9 +557,6 @@ int celt_decode(CELTDecoder *st, char *data, int len, celt_int16_t *pcm)
    if (C==2)
       stereo_mix(st->mode, P, bandE, 1);
 
-   /* Get the pitch gains */
-   unquant_pitch(gains, st->mode->nbPBands, &dec);
-
    /* Apply pitch gains */
    pitch_quant_bands(st->mode, X, P, gains);
 
index 5208b56..bd366ea 100644 (file)
@@ -70,7 +70,7 @@ CELTDecoder *celt_decoder_new(const CELTMode *mode);
 
 void celt_decoder_destroy(CELTDecoder *st);
 
-int celt_decode(CELTDecoder *st, char *data, int len, celt_int16_t *pcm);
+int celt_decode(CELTDecoder *st, unsigned char *data, int len, celt_int16_t *pcm);
 
 
 /* Mode calls */
index 5e7ca19..2668c5a 100644 (file)
@@ -39,7 +39,6 @@ static void kf_bfly2(
 {
    kiss_fft_cpx * Fout2;
    kiss_fft_cpx * tw1;
-   kiss_fft_cpx t;
    int i,j;
    kiss_fft_cpx * Fout_beg = Fout;
    for (i=0;i<N;i++)
index a841ec5..2ad27b8 100644 (file)
@@ -160,6 +160,9 @@ int celt_mode_info(const CELTMode *mode, int request, celt_int32_t *value)
       case CELT_GET_NB_CHANNELS:
          *value = mode->nbChannels;
          break;
+      default:
+         return CELT_BAD_ARG;
    }
+   return CELT_OK;
 }
 
index aeaf6da..1c2c69b 100644 (file)
@@ -1,8 +1,8 @@
 float pgain_table[1024] = {
+0., 0., 0., 0., 0., 0., 0., 0., 
 0.0787638, 0.0502377, 0.0370167, 0.0322025, 0.356783, 0.0669546, 0.0574281, 0.0260472, 
 0.5126, 0.499592, 0.460184, 0.032245, 0.0312514, 0.0289121, 0.0265145, 0.0207962, 
 0.373555, 0.468631, 0.0241895, 0.0194926, 0.0256133, 0.0238522, 0.0211873, 0.0148774, 
-0.00139974, 0.000760276, 0.00107237, 0.00095473, 0.00115105, 0.001434, 0.00173201, 0.00274601, 
 0.513634, 0.467355, 0.255641, 0.091945, 0.319676, 0.0593489, 0.0488637, 0.02425, 
 0.297209, 0.0228254, 0.189478, 0.0192015, 0.0263458, 0.0241322, 0.0262124, 0.015507, 
 0.0575023, 0.297549, 0.022103, 0.0219353, 0.0442874, 0.043595, 0.0413361, 0.0220558, 
index 0f7ffaf..3993bc2 100644 (file)
@@ -135,7 +135,6 @@ void compute_mdct_masking(struct PsyDecay *decay, float *X, float *mask, int len
 {
    int i;
    float psd[len];
-   float mem;
    for (i=0;i<len;i++)
       mask[i] = X[i]*X[i];
    for (i=1;i<len-1;i++)
index c687a26..94b4d89 100644 (file)
@@ -101,7 +101,6 @@ static void unquant_energy_mono(const CELTMode *m, float *eBands, float *oldEBan
    int i;
    float prev = 0;
    float coef = m->ePredCoef;
-   float error[m->nbEBands];
    /* The .7 is a heuristic */
    float beta = .7*coef;
    for (i=0;i<m->nbEBands;i++)
index a727931..a358784 100644 (file)
@@ -192,7 +192,6 @@ int vec_bits2pulses(const struct alloc_data *alloc, const int *bands, int *bits,
 
    for (i=0;i<len;i++)
    {
-      int N = (bands[i+1]-bands[i])*BC;
       pulses[i] = bits2pulses(alloc, i, bits[i]);
       sum += alloc->bits[i][pulses[i]];
    }
index d097489..091f21a 100644 (file)
@@ -34,6 +34,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
+#include <string.h>
 
 int main(int argc, char *argv[])
 {
@@ -46,7 +47,7 @@ int main(int argc, char *argv[])
    int len;
    celt_int32_t frame_size, channels;
    int bytes_per_packet;
-   char data[1024];
+   unsigned char data[1024];
 
    double rmsd = 0;
    int count = 0;