Fix off-by-one error in ec_laplace_encode.
authorTimothy B. Terriberry <tterribe@xiph.org>
Mon, 24 Jan 2011 20:50:30 +0000 (12:50 -0800)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Mon, 24 Jan 2011 20:55:02 +0000 (15:55 -0500)
di_max was counting the _number_ of code-points remaining, not the
 largest one that could be used.

libcelt/laplace.c

index e43029f..1d458b9 100644 (file)
@@ -75,10 +75,10 @@ void ec_laplace_encode(ec_enc *enc, int *value, int fs, int decay)
       if (fs <= 0)
       {
          int di;
-         int di_max;
-         di_max = (32768-fl+LAPLACE_MINP-1)>>LAPLACE_LOG_MINP;
-         di_max = (di_max-s)>>1;
-         di = IMIN(val - i, di_max);
+         int ndi_max;
+         ndi_max = (32768-fl+LAPLACE_MINP-1)>>LAPLACE_LOG_MINP;
+         ndi_max = (ndi_max-s)>>1;
+         di = IMIN(val - i, ndi_max - 1);
          fl += (2*di+1+s)*LAPLACE_MINP;
          fs = IMIN(LAPLACE_MINP, 32768-fl);
          *value = i+di+s^s;