Give the bit we reserved to end skipping back when we don't use it.
authorTimothy B. Terriberry <tterribe@xiph.org>
Thu, 16 Dec 2010 22:39:58 +0000 (14:39 -0800)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Fri, 17 Dec 2010 01:20:04 +0000 (20:20 -0500)
commit76ea41e17fb702fa86cfaf498579a421beaa0e0b
tree9e386423db009622279fce3480d09682c01d3885
parent8e31ab3def98b4bf4988f1029bf5ed8251cd68fa
Give the bit we reserved to end skipping back when we don't use it.

Commit 8e447678 increased the number of cases where we end skipping
 without explicit signaling.
Before, this would cause the bit we reserved for this purpose to
 either a) get grabbed by some N=1 band to code its sign bits or
 b) wind up as part of the fine energy at the end.
This patch gives it back to the band where we stopped skipping,
 which is either the first band, or a band that was boosted by
 dynalloc.
This allows the bit to be used for shape coding in that band, and
 allows the better computation of the fine offset, since the band
 knows it will get that bit in advance.

With this change, we now guarantee that the number of bits allocated
 by compute_allocation() is exactly equal to the input total, less
 the bits consumed by skip flags during allocation itself (assuming
 total was non-negative; for negative total, no bits are emitted,
 and no bits are allocated).
libcelt/celt.c
libcelt/rate.c