scales down even further in bit-rate
authorJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Wed, 13 Feb 2008 01:12:16 +0000 (12:12 +1100)
committerJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Wed, 13 Feb 2008 01:12:16 +0000 (12:12 +1100)
libcelt/quant_bands.c
libcelt/testcelt.c

index b97c5fe..1f65381 100644 (file)
@@ -66,7 +66,10 @@ static void quant_energy_mono(const CELTMode *m, float *eBands, float *oldEBands
       //   qi = -2;
       //ec_laplace_encode(enc, qi, i==0?11192:6192);
       //ec_laplace_encode(enc, qi, 8500-i*200);
-      ec_laplace_encode(enc, qi, 6000-i*200);
+      if (ec_enc_tell(enc, 0) - bits > budget)
+         qi = -1;
+      else
+         ec_laplace_encode(enc, qi, 6000-i*200);
       q = qi*res;
       error[i] = f - qi;
       
@@ -121,7 +124,10 @@ static void unquant_energy_mono(const CELTMode *m, float *eBands, float *oldEBan
       float res;
       float mean = (1-coef)*eMeans[i];
       res = 6.;
-      qi = ec_laplace_decode(dec, 6000-i*200);
+      if (ec_dec_tell(dec, 0) - bits > budget)
+         qi = -1;
+      else
+         qi = ec_laplace_decode(dec, 6000-i*200);
       q = qi*res;
       
       oldEBands[i] = mean+coef*oldEBands[i]+prev+q;
index 091f21a..4e1f18e 100644 (file)
@@ -67,7 +67,7 @@ int main(int argc, char *argv[])
    }
    
    bytes_per_packet = atoi(argv[2]);
-   if (bytes_per_packet < 15 || bytes_per_packet > 120)
+   if (bytes_per_packet < 12 || bytes_per_packet > 120)
    {
       fprintf (stderr, "bytes per packet must be between 15 and 120\n");
       return 1;