- Aug 02, 2011
-
-
Gregory Maxwell authored
-
- Jul 29, 2011
-
-
Jean-Marc Valin authored
-
- Mar 03, 2011
-
-
These were used because the entropy coder originally came from outside libcelt, and thus did not have a common type system. It's now undergone enough modification that it's not ever likely to be used as-is in another codec without some porting effort, so there's no real reason to maintain the typedefs separately. Hopefully we'll replace these all again somedate with a common set of Opus typedefs, but for now this will do. This fixes an issue caused by commit 6c8acbf1, which moved the ec_ilog() prototype from entcode.h to ecintrin.h, where the ec_uint32 typedef was not yet available. Thanks to John Ridges for the report.
-
- Feb 10, 2011
-
-
Jean-Marc Valin authored
Got authorization from all copyright holders
-
- Feb 04, 2011
-
-
This unifies the byte buffer, encoder, and decoder into a single struct. The common encoder and decoder functions (such as ec_tell()) can operate on either one, simplifying code which uses both. The precision argument to ec_tell() has been removed. It now comes in two precisions: ec_tell() gives 1 bit precision in two operations, and ec_tell_frac() gives 1/8th bit precision in... somewhat more. ec_{enc|dec}_bit_prob() were removed (they are no longer needed). Some of the byte buffer access functions were made static and removed from the cross-module API. All of the code in rangeenc.c and rangedec.c was merged into entenc.c and entdec.c, respectively, as we are no longer considering alternative backends. rangeenc.c and rangede.c have been removed entirely. This passes make check, after disabling the modes that we removed support for in cf5d3a8c.
-
- Jan 08, 2011
-
-
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.
-
- Dec 22, 2010
-
-
For our current usage, this doesn't matter, but is more consistent with the rest of the API. We may want to reduce this to an unsigned char[], but I'd rather coordinate that optimization with SILK's planned reduction to 8-bit CDFs, as we may be able to use the same code.
-
- Dec 21, 2010
-
-
Timothy B. Terriberry authored
This simplifies a good bit of the error handling, and should make it impossible to overrun the buffer in the encoder or decoder, while still allowing tell() to operate correctly after a bust. The encoder now tries to keep the range coder data intact after a bust instead of corrupting it with extra bits data, though this is not a guarantee (too many extra bits may have already been flushed). It also now correctly reports errors when the bust occurs merging the last byte of range coder and extra bits. A number of abstraction barrier violations were cleaned up, as well. This patch also includes a number of minor performance improvements: ec_{enc|dec}_bits() in particular should be much faster. Finally, tf_select was changed to be coded with the range coder rather than extra bits, so that it is at the front of the packet (for unequal error protection robustness).
-
- Dec 18, 2010
-
-
All of our usage of ec_{enc|dec}_bit_prob had the probability of a "one" being a power of two. This adds a new ec_{enc|dec}_bit_logp() function that takes this explicitly into account. It introduces less rounding error than the bit_prob version, does not require 17-bit integers to be emulated by ec_{encode|decode}_bin(), and does not require any multiplies or divisions at all. It is exactly equivalent to ec_encode_bin(enc,_val?0:(1<<_logp)-1,(1<<_logp)-(_val?1:0),1<<_logp) The old ec_{enc|dec}_bit_prob functions are left in place for now, because I am not sure if SILK is still using them or not when combined in Opus.
-
It turns out to be more convenient to store dif=low+rng-code-1 instead of dif=low+rng-code. This gets rid of a decrement in the normal decode path, replaces a decrement and an "and" in the normalization loop with a single add, and makes it clear that the new ec_dec_cdf() will not result in an infinite loop. This does not change the bitstream.
-
- Dec 17, 2010
-
-
Timothy B. Terriberry authored
This decodes a value encoded with ec_encode_bin() without using any divisions. It is only meant for small alphabets. If a symbol can take on a large number of possible values, a binary search would be better. This patch also converts spread_decision to use it, since it is faster and introduces less rounding error to encode a single decision for the entire value than to encode it a bit at a time.
-
- Sep 11, 2010
-
-
Jean-Marc Valin authored
-
- Aug 02, 2010
-
-
Jean-Marc Valin authored
-
- Jul 19, 2010
-
-
Jean-Marc Valin authored
-
- Jul 05, 2010
-
-
Jean-Marc Valin authored
-
- May 30, 2010
-
-
Change ec_{enc|dec}_bit_prob to take probabilities in units of 1/65536 instead of 1/256. This allows them to use a single 16x16->32 multiply instead of a 24x8->32 multiply. Also change the time-frequency resolution flag coding to ensure that "0" is always the most-probable symbol (i.e., that prob("1")<50%), as that's where all the rounding error accumulates.
-
Provide direct implementations ec_{enc|dec}_bit_prob() that do not require a division instead of using the normal entropy coder path. This should be exactly equivalent to the existing code.
-
- May 27, 2010
-
-
Jean-Marc Valin authored
-
- Oct 18, 2009
-
-
Jean-Marc Valin authored
-
- Oct 17, 2009
-
-
Jean-Marc Valin authored
by POSIX. The other _t types that are not part of the API are still there for now. Also, got rid of all that was left of the 64-bit types.
-
- Jul 26, 2009
-
-
Jean-Marc Valin authored
original ec_encode_bin()/ec_decode_bin() to optimize performance when ft is a power of two.
-
- Jul 23, 2009
-
-
Jean-Marc Valin authored
Making it so all the information encoded directly with ec_enc_bits() gets stored at the end of the stream, without going through the range coder. This should be both faster and reduce the effects of bit errors. Conflicts: tests/ectest.c
-
- Feb 04, 2009
-
-
Gregory Maxwell authored
Signed-off-by:
Timothy B. Terriberry <tterribe@xiph.org>
-
- Mar 22, 2008
-
-
Jean-Marc Valin authored
required) and using it in ec_{en|de}c_bits()
-
- Jan 28, 2008
-
-
Jean-Marc Valin authored
especially now that we have a custom version of that code anyway. Moved the test code to tests/
-
- Jan 11, 2008
-
-
Add ec_dec_tell() to report the same information as ec_enc_tell() decode side. Remove ec_enc_tell() and replace it with ec_enc_tellf(): just request 0 fractional bits if you want an integer value. git-svn-id: http://svn.xiph.org/trunk/ghost@14394 0101bb08-14d6-0310-b084-bc0e0c8e3800
-
- Dec 11, 2007
-
-
Timothy B. Terriberry authored
Updated broken paper URLs. Cleaned up non-multiply-free range coder documentation (e.g., stop claiming it's multiply-free).
-
Timothy B. Terriberry authored
-
- Dec 06, 2007
-
-
Timothy B. Terriberry authored
-