Handling the start band and end band in tf encoding
authorJean-Marc Valin <jean-marc.valin@octasic.com>
Tue, 13 Jul 2010 20:50:11 +0000 (16:50 -0400)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Tue, 13 Jul 2010 22:18:23 +0000 (18:18 -0400)
libcelt/celt.c

index 6c0950c..b8d720f 100644 (file)
@@ -638,45 +638,45 @@ static int tf_analysis(celt_word16 *bandLogE, celt_word16 *oldBandE, int len, in
    return tf_select;
 }
 
-static void tf_encode(int len, int isTransient, int *tf_res, int nbCompressedBytes, int LM, int tf_select, ec_enc *enc)
+static void tf_encode(int start, int end, int isTransient, int *tf_res, int nbCompressedBytes, int LM, int tf_select, ec_enc *enc)
 {
    int curr, i;
    if (8*nbCompressedBytes - ec_enc_tell(enc, 0) < 100)
    {
-      for (i=0;i<len;i++)
+      for (i=start;i<end;i++)
          tf_res[i] = isTransient;
    } else {
-      ec_enc_bit_prob(enc, tf_res[0], isTransient ? 16384 : 4096);
-      curr = tf_res[0];
-      for (i=1;i<len;i++)
+      ec_enc_bit_prob(enc, tf_res[start], isTransient ? 16384 : 4096);
+      curr = tf_res[start];
+      for (i=start+1;i<end;i++)
       {
          ec_enc_bit_prob(enc, tf_res[i] ^ curr, isTransient ? 4096 : 2048);
          curr = tf_res[i];
       }
    }
    ec_enc_bits(enc, tf_select, 1);
-   for (i=0;i<len;i++)
+   for (i=start;i<end;i++)
       tf_res[i] = tf_select_table[LM][4*isTransient+2*tf_select+tf_res[i]];
 }
 
-static void tf_decode(int len, int C, int isTransient, int *tf_res, int nbCompressedBytes, int LM, ec_dec *dec)
+static void tf_decode(int start, int end, int C, int isTransient, int *tf_res, int nbCompressedBytes, int LM, ec_dec *dec)
 {
    int i, curr, tf_select;
    if (8*nbCompressedBytes - ec_dec_tell(dec, 0) < 100)
    {
-      for (i=0;i<len;i++)
+      for (i=start;i<end;i++)
          tf_res[i] = isTransient;
    } else {
-      tf_res[0] = ec_dec_bit_prob(dec, isTransient ? 16384 : 4096);
-      curr = tf_res[0];
-      for (i=1;i<len;i++)
+      tf_res[start] = ec_dec_bit_prob(dec, isTransient ? 16384 : 4096);
+      curr = tf_res[start];
+      for (i=start+1;i<end;i++)
       {
          tf_res[i] = ec_dec_bit_prob(dec, isTransient ? 4096 : 2048) ^ curr;
          curr = tf_res[i];
       }
    }
    tf_select = ec_dec_bits(dec, 1);
-   for (i=0;i<len;i++)
+   for (i=start;i<end;i++)
       tf_res[i] = tf_select_table[LM][4*isTransient+2*tf_select+tf_res[i]];
 }
 
@@ -1027,7 +1027,7 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, c
      ec_byte_shrink(&buf, nbCompressedBytes);
    }
 
-   tf_encode(st->mode->nbEBands, isTransient, tf_res, nbAvailableBytes, LM, tf_select, enc);
+   tf_encode(st->start, st->end, isTransient, tf_res, nbAvailableBytes, LM, tf_select, enc);
 
    ALLOC(offsets, st->mode->nbEBands, int);
    ALLOC(fine_priority, st->mode->nbEBands, int);
@@ -1766,7 +1766,7 @@ int celt_decode_with_ec_float(CELTDecoder * restrict st, const unsigned char *da
    unquant_coarse_energy(st->mode, st->start, st->end, bandE, st->oldBandE, nbFilledBytes*8+nbAvailableBytes*4-8, intra_ener, st->mode->prob, dec, C);
 
    ALLOC(tf_res, st->mode->nbEBands, int);
-   tf_decode(st->mode->nbEBands, C, isTransient, tf_res, nbAvailableBytes, LM, dec);
+   tf_decode(st->start, st->end, C, isTransient, tf_res, nbAvailableBytes, LM, dec);
 
    ALLOC(pulses, st->mode->nbEBands, int);
    ALLOC(offsets, st->mode->nbEBands, int);