diff --git a/README b/README index 33ee0d5f1d55689761c104d7abd3bbe98658af38..87278175c205a8321026f819ad776161e2d829cc 100644 --- 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 54411e77a82100c0d057cef48131ee33abc7d9b8..05826ed27be9b0cdea8645d8e76ea6ecf438395a 100644 --- 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? diff --git a/libcelt/modes.c b/libcelt/modes.c index e41d2a6fa70207f4b75a55dd82083d4f43bbb137..3fc4a875fe911e48b698a3ad27f464791fbdaf65 100644 --- a/libcelt/modes.c +++ b/libcelt/modes.c @@ -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;