1. 03 Feb, 2011 13 commits
  2. 02 Feb, 2011 3 commits
  3. 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
  4. 31 Jan, 2011 13 commits
  5. 30 Jan, 2011 3 commits
    • Jean-Marc Valin's avatar
      Merge branch 'exp_api_change' · 665da0ba
      Jean-Marc Valin authored
      665da0ba
    • 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
       bands.
      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).
      c5643074
    • Jean-Marc Valin's avatar
      Error handling in _create() functions · d6c3d3ce
      Jean-Marc Valin authored
      d6c3d3ce