Code intensity offset relative to start.
authorTimothy B. Terriberry <tterribe@xiph.org>
Thu, 30 Dec 2010 17:06:22 +0000 (09:06 -0800)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 30 Dec 2010 17:47:28 +0000 (12:47 -0500)
The band where intensity stereo begins was being coded as an
 absolute value, rather than relative to start, even though the
 range of values in the bitstream was limited as if it was being
 coded relative to start (meaning there would be desync if
 intensity was sufficiently large).

libcelt/celt.c

index 922f51d..6b83908 100644 (file)
@@ -1140,7 +1140,7 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
       else
          intensity = 100;
       intensity = IMIN(st->end,IMAX(st->start, intensity));
-      ec_enc_uint(enc, intensity, 1+st->end-st->start);
+      ec_enc_uint(enc, intensity-st->start, 1+st->end-st->start);
    }
 
    /* Bit allocation */
@@ -1883,7 +1883,7 @@ int celt_decode_with_ec_float(CELTDecoder * restrict st, const unsigned char *da
    if (C==2)
    {
       dual_stereo = ec_dec_bit_logp(dec, 1);
-      intensity = ec_dec_uint(dec, 1+st->end-st->start);
+      intensity = st->start + ec_dec_uint(dec, 1+st->end-st->start);
    }
 
    bits = (len*8<<BITRES) - ec_dec_tell(dec, BITRES) - 1;