shithub: opus

Download patch

ref: 5c0d486fe13d4767f0df747b51fd14df8fd0cdac
parent: 1d27ef8b2cf039650d09b7656f2f98d716036d93
author: Jean-Marc Valin <[email protected]>
date: Thu Jul 24 04:49:34 EDT 2008

Better bit allocation for all frame sizes that are not equal to 256.

--- a/README
+++ b/README
@@ -8,7 +8,7 @@
 % 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. 
--- 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?
--- a/libcelt/modes.c
+++ b/libcelt/modes.c
@@ -208,11 +208,14 @@
       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;