Use a smarter per-band bitrate cap.
authorTimothy B. Terriberry <tterribe@xiph.org>
Sat, 29 Jan 2011 20:57:18 +0000 (12:57 -0800)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sun, 30 Jan 2011 16:42:38 +0000 (11:42 -0500)
commitc5643074630a7f31e9d527840f2d331e0d811d77
tree6769dbd44f533242d3f32f4ce46666ec83070abd
parent9b34bd835ca4e6c7597873cbb4e1ff47f7b9f0c3
Use a smarter per-band bitrate cap.

The previous "dumb cap" of (64<<LM)*(C<<BITRES) was not actually
 achievable by many (most) bands, and did not take the cost of
 coding theta for splits into account, and so was too small for some
 bands.
This patch adds code to compute a fairly accurate estimate of the
 real maximum per-band rate (an estimate only because of rounding
 effects and the fact that the bit usage for theta is variable),
 which is then truncated and stored in an 8-bit table in the mode.

This gives improved quality at all rates over 160 kbps/channel,
 prevents bits from being wasted all the way up to 255 kbps/channel
 (the maximum rate allowed, and approximately the maximum number of
 bits that can usefully be used regardless of the allocation), and
 prevents dynalloc and trim from producing enormous waste
 (eliminating the need for encoder logic to prevent this).
libcelt/celt.c
libcelt/dump_modes.c
libcelt/modes.c
libcelt/modes.h
libcelt/rate.c
libcelt/rate.h