1. 04 Feb, 2011 3 commits
    • Jean-Marc Valin's avatar
      Fixes an int overflow in the VBR code · 23340e22
      Jean-Marc Valin authored
      Also properly applies the MDCT filtering for resampling
    • Gregory Maxwell's avatar
      This fixes the frame_size check on the encoder and decoder and removes some... · 95becbee
      Gregory Maxwell authored
      This fixes the frame_size check on the encoder and decoder and removes some unused variable warnings when compiling without custom modes.
    • Timothy B. Terriberry's avatar
      Refactor the entropy coder. · a093f4df
      Timothy B. Terriberry authored
      This unifies the byte buffer, encoder, and decoder into a single
      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.
  2. 03 Feb, 2011 4 commits
  3. 02 Feb, 2011 1 commit
    • Timothy B. Terriberry's avatar
      Increase caps/allocation accuracy. · ce6d0904
      Timothy B. Terriberry authored
      This stores the caps array in 32nd bits/sample instead of 1/2 bits
       scaled by LM and the channel count, which is slightly less
       less accurate for the last two bands, and much more accurate for
       all the other bands.
      A constant offset is subtracted to allow it to represent values
       larger than 255 in 8 bits (the range of unoffset values is
      In addition, this replaces the last modeline in the allocation table
       with the caps array, allowing the initial interpolation to
       allocate 8 bits/sample or more, which was otherwise impossible.
  4. 01 Feb, 2011 2 commits
  5. 31 Jan, 2011 7 commits
  6. 30 Jan, 2011 2 commits
    • Timothy B. Terriberry's avatar
      Use a smarter per-band bitrate cap. · c5643074
      Timothy B. Terriberry authored
      The previous "dumb cap" of (64<<LM)*(C<<BITRES) was not actually
       achievable by many (most) bands, and did not take the cost of
       coding theta for splits into account, and so was too small for some
      This patch adds code to compute a fairly accurate estimate of the
       real maximum per-band rate (an estimate only because of rounding
       effects and the fact that the bit usage for theta is variable),
       which is then truncated and stored in an 8-bit table in the mode.
      This gives improved quality at all rates over 160 kbps/channel,
       prevents bits from being wasted all the way up to 255 kbps/channel
       (the maximum rate allowed, and approximately the maximum number of
       bits that can usefully be used regardless of the allocation), and
       prevents dynalloc and trim from producing enormous waste
       (eliminating the need for encoder logic to prevent this).
    • Jean-Marc Valin's avatar
      Error handling in _create() functions · d6c3d3ce
      Jean-Marc Valin authored
  7. 29 Jan, 2011 2 commits
  8. 28 Jan, 2011 1 commit
  9. 27 Jan, 2011 7 commits
    • Jean-Marc Valin's avatar
      Making anti-collapse a bit more conservative again · 47e905dc
      Jean-Marc Valin authored
      The energy memory can be lowered (not increased) during a transient
    • Jean-Marc Valin's avatar
      Changing some double constants to float · b417d839
      Jean-Marc Valin authored
    • Jean-Marc Valin's avatar
      Adjusting post-filter coefficients to be exact in 13 bit precision. · 61f40418
      Jean-Marc Valin authored
      That way they can be exact in 16 bits once multiplied by the gain
    • Jean-Marc Valin's avatar
      Only allowing silence in non-hybrid mode. · 65d35a35
      Jean-Marc Valin authored
      Also defining a 1-byte packet as triggering the PLC/CNG
    • Timothy B. Terriberry's avatar
      More anti-collapse fixes, as well as a fold fix. · a396e153
      Timothy B. Terriberry authored
      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.
    • Jean-Marc Valin's avatar
    • Gregory Maxwell's avatar
  10. 26 Jan, 2011 5 commits
  11. 25 Jan, 2011 1 commit
  12. 24 Jan, 2011 1 commit
    • Jean-Marc Valin's avatar
      Moving energy floor to coarse quantization · 495114b7
      Jean-Marc Valin authored
      By moving the energy floor to the encoder, we can use a different
      floor for prediction than for the decay level. Also, the fixed-point
      dynamic range has been increased to avoid overflows when a fixed-point
      decoder is used on a stream encoded in floating-point.
  13. 23 Jan, 2011 3 commits
  14. 22 Jan, 2011 1 commit