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

This commit is contained in:
Jean-Marc Valin 2008-07-24 08:49:34 -04:00
parent 1d27ef8b2c
commit 5c0d486fe1
3 changed files with 10 additions and 10 deletions

2
README
View file

@ -8,7 +8,7 @@ To compile:
% make % make
To test the encoder: 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 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. 44.1 kHz or 48 kHz. The output file is already decompressed.

11
TODO
View file

@ -1,16 +1,13 @@
- Check minimum width of bands - 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 - Dynamic adjustment of energy quantisation
- Psychacoustics - Psychacoustics
* Error shaping within each band * Error shaping within each band
* Desisions on the rate * Decisions on the rate
- Intensity stereo option (e.g. threshold) - Intensity stereo decisions
- Dynamic (intra-frame) bit allocation - Dynamic (intra-frame) bit allocation
- Joint encoding of stereo energy - 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)? - Encode band shape (or just tilt)?
- Make energy encoding more robust to losses? - Make energy encoding more robust to losses?

View file

@ -208,11 +208,14 @@ static void compute_allocation_table(CELTMode *mode, int res)
eband = 0; eband = 0;
for (j=0;j<BARK_BANDS;j++) for (j=0;j<BARK_BANDS;j++)
{ {
int edge, low, alloc; int edge, low;
celt_int32_t alloc;
edge = mode->eBands[eband+1]*res; edge = mode->eBands[eband+1]*res;
alloc = band_allocation[i*BARK_BANDS+j]; alloc = band_allocation[i*BARK_BANDS+j];
if (mode->nbChannels == 2) 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]) if (edge < bark_freq[j+1])
{ {
int num, den; int num, den;