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;