- Aug 02, 2011
-
-
Gregory Maxwell authored
-
- Jul 31, 2011
-
-
non-ascii characters from the source.
-
- Jul 29, 2011
-
-
Jean-Marc Valin authored
-
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 31, 2011
-
-
Timothy B. Terriberry authored
The first version of the mono decoder with stereo output collapsed the historic energy values stored for anti-collapse down to one channel (by taking the max). This means that a subsequent switch back would continue on using the the maximum of the two values instead of the original history, which would make anti-collapse produce louder noise (and potentially more pre-echo than otherwise). This patch moves the max into the anti_collapse function itself, and does not store the values back into the source array, so the full stereo history is maintained if subsequent frames switch back. It also fixes an encoder mismatch, which never took the max (assuming, apparently, that the output channel count would never change).
-
Timothy B. Terriberry authored
Instead of just dumping excess bits into the first band after allocation, use them to initialize the rebalancing loop in quant_all_bands(). This allows these bits to be redistributed over several bands, like normal.
-
- Jan 27, 2011
-
-
This changes folding so that the LCG is never used on transients (either short blocks or long blocks with increased time resolution), except in the case that there's not enough decoded spectrum to fold yet. It also now only subtracts the anti-collapse bit from the total allocation in quant_all_bands() when space has actually been reserved for it. Finally, it cleans up some of the fill and collapse_mask tracking (this tracking was originally made intentionally sloppy to save work, but then converted to replace the existing fill flag at the last minute, which can have a number of logical implications). The changes, in particular: 1) Splits of less than a block now correctly mark the second half as filled only if the whole block was filled (previously it would also mark it filled if the next block was filled). 2) Splits of less than a block now correctly mark a block as un-collapsed if either half was un-collapsed, instead of marking the next block as un-collapsed when the high half was. 3) The N=2 stereo special case now keeps its fill mask even when itheta==16384; previously this would have gotten cleared, despite the fact that we fold into the side in this case. 4) The test against fill for folding now only considers the bits corresponding to the current set of blocks. Previously it would still fold if any later block was filled. 5) The collapse mask used for the LCG fold data is now correctly initialized when B=16 on platforms with a 16-bit int. 6) The high bits on a collapse mask are now cleared after the TF resolution changes and interleaving at level 0, instead of waiting until the very end. This prevents extraneous high flags set on mid from being mixed into the side flags for mid-side stereo.
-
- Jan 23, 2011
-
-
Jean-Marc Valin authored
-
- Jan 21, 2011
-
-
Jean-Marc Valin authored
This provides more entropy and allows some more flexibility on the encoder side.
-
- Jan 20, 2011
-
-
Jean-Marc's original anti-collapse patch used a threshold on the content of a decoded band to determine whether or not it should be filled with random noise. Since this is highly sensitive to the accuracy of the implementation, it could lead to significant decoder output differences even if decoding error up to that point was relatively small. This patch detects collapsed bands from the output of the vector quantizer, using exact integer arithmetic. It makes two simplifying assumptions: a) If either input to haar1() is non-zero during TF resolution adjustments, then the output will be non-zero. b) If the content of a block is non-zero in any of the bands that are used for folding, then the folded output will be non-zero. b) in particular is likely to be false when SPREAD_NONE is used. It also ignores the case where mid and side are orthogonal in stereo_merge, but this is relatively unlikely. This misses just over 3% of the cases that Jean-Marc's anti-collapse detection strategy would catch, but does not mis-classify any (all detected collapses are true collapses). This patch overloads the "fill" parameter to mark which blocks have non-zero content for folding. As a consequence, if a set of blocks on one side of a split has collapsed, _no_ folding is done: the result would be zero anyway, except for short blocks with SPREAD_AGGRESSIVE that are split down to a single block, but a) that means a lot of bits were available so a collapse is unlikely and b) anti-collapse can fill the block anyway, if it's used. This also means that if itheta==0 or itheta==16384, we no longer fold at all on that side (even with long blocks), since we'd be multiplying the result by zero anyway.
-
- Jan 18, 2011
-
-
Jean-Marc Valin authored
This looks for bands in each short block that have no energy. For each of these "collapsed" bands, noise is injected to have an energy equal to the minimum of the two previous frames for that band. The mechanism can be used whenever there are 4 or more MDCTs (otherwise no complete collapse is possible) and is signalled with one bit just before the final fine energy bits.
-
- Jan 17, 2011
-
-
Jean-Marc Valin authored
Based on spreading_decision()'s logic. We choose tapsets with less roll-off when we think the HF are tonal.
-
- Dec 17, 2010
-
-
Timothy B. Terriberry authored
These were stored internally in one order and in the bitstream in a different order. Both used bare constants, making it unclear what either actually meant. This changes them to use the same order, gives them named constants, and renames all the "fold" decision stuff to "spread" instead, since that is what it is really controlling.
-
- Dec 02, 2010
-
-
Jean-Marc Valin authored
Left and right are coded independently.
-
- Nov 26, 2010
-
-
Jean-Marc Valin authored
Bands that are intensity-coded also get less bits than the others
-
- Oct 18, 2010
-
-
Jean-Marc Valin authored
-
- Oct 13, 2010
-
-
Jean-Marc Valin authored
-
- Sep 28, 2010
-
-
Jean-Marc Valin authored
-
- Aug 31, 2010
-
-
Jean-Marc Valin authored
-
- Aug 05, 2010
-
-
Jean-Marc Valin authored
-
- Jul 29, 2010
-
-
Jean-Marc Valin authored
-
- Jul 16, 2010
-
-
Jean-Marc Valin authored
-
- Jul 13, 2010
-
-
Jean-Marc Valin authored
-
- Jun 27, 2010
-
-
Jean-Marc Valin authored
-
- May 28, 2010
-
-
Jean-Marc Valin authored
Encoding the optimal tf-tradeoff for each band and then applying it during quantization.
-
- May 15, 2010
-
-
Jean-Marc Valin authored
Now everything is done through quant_all_bands() and quant_band().
-
- May 11, 2010
-
-
Jean-Marc Valin authored
-
- May 08, 2010
-
-
Jean-Marc Valin authored
-
- Apr 26, 2010
-
-
Jean-Marc Valin authored
-
- Apr 19, 2010
-
-
Jean-Marc Valin authored
-
- Feb 26, 2010
-
-
Jean-Marc Valin authored
-
- Oct 18, 2009
-
-
Jean-Marc Valin authored
-
Jean-Marc Valin authored
-
- Oct 17, 2009
-
-
Jean-Marc Valin authored
-
- Oct 15, 2009
-
-
Jean-Marc Valin authored
-
- Oct 09, 2009
-
-
Jean-Marc Valin authored
-
- Oct 01, 2009
-
-
Jean-Marc Valin authored
and bit-stream version
-