Changes to ec_dec_cdf() to support 8-bit tables.
authorTimothy B. Terriberry <tterribe@xiph.org>
Mon, 3 Jan 2011 00:53:28 +0000 (16:53 -0800)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sat, 8 Jan 2011 19:57:01 +0000 (14:57 -0500)
commit845dfa19860c9e4806b6ad9bed0c8a8581626bce
treef9cd0abe660d21ccad7d6c157a756c99dd3cc7e7
parent79d76a2e3ae1a41365eab08f544732750d73b42e
Changes to ec_dec_cdf() to support 8-bit tables.

This renames ec_dec_cdf() to ec_dec_icdf(), and changes the
 functionality to use an "inverse" CDF table, where
 icdf[i]=ft-cdf[i+1].
The first entry is omitted entirely.
It also adds a corresonding ec_enc_icdf() to the encoder, which uses
 the same table.
One could use ec_encode_bin() by converting the values in the tables
 back to normal CDF values, but the icdf[] table already has them in
 the form ec_encode_bin() wants to use them, so there's no reason to
 translate them and then translate them back.

This is done primarily to allow SILK to use the range coder with
 8-bit probability tables containing cumulative frequencies that
 span the full range 0...256.
With an 8-bit table, the final 256 of a normal CDF becomes 0 in the
 "inverse" CDF.
It's the 0 at the start of a normal CDF which would become 256, but
 this is the value we omit, as it already has to be special-cased in
 the encoder, and is not used at all in the decoder.
libcelt/celt.c
libcelt/entdec.h
libcelt/entenc.h
libcelt/rangedec.c
libcelt/rangeenc.c
tests/ectest.c