Better bit allocation for all frame sizes that are not equal to 256.
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 24 Jul 2008 12:49:34 +0000 (08:49 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 24 Jul 2008 12:49:34 +0000 (08:49 -0400)
README
TODO
libcelt/modes.c

diff --git a/README b/README
index 33ee0d5..8727817 100644 (file)
--- a/README
+++ b/README
@@ -8,7 +8,7 @@ To compile:
 % make
 
 To test the encoder:
-% testcelt <rate> <channels> <frame size> <overlap> <bytes per packet> input.sw output.sw
+% testcelt <rate> <channels> <frame size> <bytes per packet> input.sw output.sw
 
 where input.sw is a 16-bit (machine endian) audio file sampled at 
 44.1 kHz or 48 kHz. The output file is already decompressed. 
diff --git a/TODO b/TODO
index 54411e7..05826ed 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,16 +1,13 @@
 - Check minimum width of bands
-- Adjust the energy resolution based on the bit-rate
+- Revisit energy resolution based on the bit-rate
+- Revisit static bit allocation (as a function of frame size and channels)
 - Dynamic adjustment of energy quantisation
 - Psychacoustics
   * Error shaping within each band
-  * Desisions on the rate
-- Intensity stereo option (e.g. threshold)
+  * Decisions on the rate
+- Intensity stereo decisions
 - Dynamic (intra-frame) bit allocation 
 - Joint encoding of stereo energy
-- Disable intra-frame prediction for more than X pulses
-- Remove contraction?
-- Simplify search?
-- Remove pulse spreading?
 
 - Encode band shape (or just tilt)?
 - Make energy encoding more robust to losses?
index e41d2a6..3fc4a87 100644 (file)
@@ -208,11 +208,14 @@ static void compute_allocation_table(CELTMode *mode, int res)
       eband = 0;
       for (j=0;j<BARK_BANDS;j++)
       {
-         int edge, low, alloc;
+         int edge, low;
+         celt_int32_t alloc;
          edge = mode->eBands[eband+1]*res;
          alloc = band_allocation[i*BARK_BANDS+j];
          if (mode->nbChannels == 2)
-            alloc += alloc/2;
+            alloc = alloc*3*mode->mdctSize/512;
+         else
+            alloc = alloc*mode->mdctSize/256;
          if (edge < bark_freq[j+1])
          {
             int num, den;