Skip to content
Snippets Groups Projects
  1. Jan 27, 2011
  2. Jan 26, 2011
  3. Jan 25, 2011
  4. Jan 24, 2011
  5. Jan 23, 2011
  6. Jan 22, 2011
  7. Jan 21, 2011
  8. Jan 20, 2011
    • Jean-Marc Valin's avatar
      Fixes an irrelevant uninitialized bug · e8a373fd
      Jean-Marc Valin authored
      e8a373fd
    • Timothy B. Terriberry's avatar
      Remove useless ec_dec_tell() call. · a363e395
      Timothy B. Terriberry authored and Jean-Marc Valin's avatar Jean-Marc Valin committed
      a363e395
    • Timothy B. Terriberry's avatar
      Make collapse-detection bitexact. · 21af73eb
      Timothy B. Terriberry authored and Jean-Marc Valin's avatar Jean-Marc Valin committed
      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.
      21af73eb
  9. Jan 18, 2011
    • Jean-Marc Valin's avatar
      Adds an anti-collapse mechanism for transients · 87efe1df
      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.
      87efe1df
Loading