Fixes a ibudget bust and a divide-by-zero at very low bit-rate
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 30 Sep 2010 00:05:36 +0000 (20:05 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 30 Sep 2010 00:05:36 +0000 (20:05 -0400)
libcelt/celt.c
libcelt/rate.c

index 09895bf..5e8c8c8 100644 (file)
@@ -861,6 +861,9 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, c
 
    for (i=0;i<st->mode->nbEBands;i++)
       offsets[i] = 0;
+   /* Dynamic allocation code */
+   /* Make sure that dynamic allocation can't make us bust the budget */
+   if (nbCompressedBytes > 30)
    {
       int t1, t2;
       if (LM <= 1)
index 7ae5f59..a760951 100644 (file)
@@ -190,7 +190,7 @@ static inline int interp_bits2pulses(const CELTMode *m, int start, int end, int
    }
    codedBands++;
    /* Allocate the remaining bits */
-   {
+   if (codedBands) {
       int left, perband;
       left = (total<<BITRES)-psum;
       perband = left/(codedBands-start);