1. 04 Feb, 2011 4 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
      23340e22
    • Timothy B. Terriberry's avatar
      75228782
    • 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.
      95becbee
    • 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
       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.
      a093f4df
  2. 03 Feb, 2011 13 commits
  3. 02 Feb, 2011 3 commits
  4. 01 Feb, 2011 8 commits
    • Timothy B. Terriberry's avatar
      Limit mode creation to supported modes. · aa6fec66
      Timothy B. Terriberry authored
      We did no real error checking to see if a mode is supported when it
       is created.
      This patch implements checks for Jean-Marc's rules:
      1) A mode must have frames at least 1ms in length (no more than
          1000 per second).
      2) A mode must have shorts of at most 3.33 ms (at least 300 per
          second).
      It also adds error checking to dump_modes so we report the error
       instead of crashing when we fail to create a mode.
      aa6fec66
    • Jean-Marc Valin's avatar
    • Timothy B. Terriberry's avatar
      Add assertions for band size restrictions. · 2799c297
      Timothy B. Terriberry authored
      The way folding is implemented requires two restrictions:
      1. The last band must be the largest (so we can use its size to
       allocate a temporary buffer to handle interleaving/TF changes).
      2. No band can be larger than twice the size of the previous band
       (so that once we have enough data to start folding, we will always
       have enough data to fold).
      
      Mode creation makes a heuristic attempt to satisfy these
       conditions, but nothing actually guarantees it.
      This adds some asserts to check them during mode creation.
      They current pass for all supported custom modes.
      2799c297
    • Timothy B. Terriberry's avatar
      Don't allow empty eBands. · cb8f366a
      Timothy B. Terriberry authored
      Currently compute_ebands()'s attempts to round bands to even sizes
       and enforce size constraints on consecutive bands can leave some
       bands entirely empty (e.g., Fs=8000, frame_size=64, i=11).
      This adds a simple post-processing loop to remove such bands.
      cb8f366a
    • Jean-Marc Valin's avatar
    • Jean-Marc Valin's avatar
      Tuning the split threshold · 263e2719
      Jean-Marc Valin authored
      263e2719
    • Timothy B. Terriberry's avatar
      Add a seprate qtheta offset for two-phase stereo. · 411a84fa
      Timothy B. Terriberry authored
      9b34bd83 caused serious regressions for 240-sample frame stereo,
       because the previous qb limit was _always_ hit for two-phase
       stereo.
      Two-phase stereo really does operate with a different model (for
       example, the single bit allocated to the side should really
       probably be thought of as a sign bit for qtheta, but we don't
       count it as part of qtheta's allocation).
      The old code was equivalent to a separate two-phase offset of 12,
       however Greg Maxwell's testing demonstrates that 16 performs
       best.
      411a84fa
    • Timothy B. Terriberry's avatar
      Adjust the splitting threshold. · 4499263b
      Timothy B. Terriberry authored
      Previously, we would only split a band if it was allocated more than
       32 bits.
      However, the N=4 codebook can only produce about 22.5 bits, and two
       N=2 bands combined can only produce 26 bits, including 8 bits for
       qtheta, so if we wait until we allocate 32, we're guaranteed to fall
       short.
      Several of the larger bands come pretty far from filling 32 bits as
       well, though their split versions will.
      
      Greg Maxwell also suggested adding an offset to the threshold to
       account for the inefficiency of using qtheta compared to another
       VQ dimension.
      This patch uses 1 bit as a placeholder, as it's a clear
       improvement, but we may adjust this later after collecting data on
       more possibilities over more files.
      4499263b
  5. 31 Jan, 2011 12 commits