- Aug 02, 2011
-
-
Gregory Maxwell authored
-
- Jul 31, 2011
-
-
non-ascii characters from the source.
-
- Jul 29, 2011
-
-
Jean-Marc Valin authored
-
- Feb 10, 2011
-
-
Jean-Marc Valin authored
Got authorization from all copyright holders
-
- Feb 06, 2011
-
-
This fixes a number of issues for platforms with a 16-bit int, but by no means all of them. The type change for ec_window (for platforms where sizeof(size_t)==2) will break ABI (but not API) compatibility with libsilk and libopus, and reduce speed on x86-64, but allows the code to work in real-mode DOS without using the huge memory model, which is useful for testing 16-bit int compliance.
-
- 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.
-
- Feb 01, 2011
-
-
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.
-
- Jan 31, 2011
-
-
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 30, 2011
-
-
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).
-
- Jan 10, 2011
-
-
Jean-Marc Valin authored
-
- Jan 09, 2011
-
-
This patch makes all symbols conditional on whether or not there's enough space left in the buffer to code them, and eliminates much of the redundancy in the side information. A summary of the major changes: * The isTransient flag is moved up to before the the coarse energy. If there are not enough bits to code the coarse energy, the flag would get forced to 0, meaning what energy values were coded would get interpreted incorrectly. This might not be the end of the world, and I'd be willing to move it back given a compelling argument. * Coarse energy switches coding schemes when there are less than 15 bits left in the packet: - With at least 2 bits remaining, the change in energy is forced to the range [-1...1] and coded with 1 bit (for 0) or 2 bits (for +/-1). - With only 1 bit remaining, the change in energy is forced to the range [-1...0] and coded with one bit. - If there is less than 1 bit remaining, the change in energy is forced to -1. This effectively low-passes bands whose energy is consistently starved; this might be undesirable, but letting the default be zero is unstable, which is worse. * The tf_select flag gets moved back after the per-band tf_res flags again, and is now skipped entirely when none of the tf_res flags are set, and the default value is the same for either alternative. * dynalloc boosting is now limited so that it stops once it's given a band all the remaining bits in the frame, or when it hits the "stupid cap" of (64<<LM)*(C<<BITRES) used during allocation. * If dynalloc boosing has allocated all the remaining bits in the frame, the alloc trim parameter does not get encoded (it would have no effect). * The intensity stereo offset is now limited to the range [start...codedBands], and thus doesn't get coded until after all of the skip decisions. Some space is reserved for it up front, and gradually given back as each band is skipped. * The dual stereo flag is coded only if intensity>start, since otherwise it has no effect. It is now coded after the intensity flag. * The space reserved for the final skip flag, the intensity stereo offset, and the dual stereo flag is now redistributed to all bands equally if it is unused. Before, the skip flag's bit was given to the band that stopped skipping without it (usually a dynalloc boosted band). In order to enable simple interaction between VBR and these packet-size enforced limits, many of which are encountered before VBR is run, the maximum packet size VBR will allow is computed at the beginning of the encoding function, and the buffer reduced to that size immediately. Later, when it is time to make the VBR decision, the minimum packet size is set high enough to ensure that no decision made thus far will have been affected by the packet size. As long as this is smaller than the up-front maximum, all of the encoder's decisions will remain in-sync with the decoder. If it is larger than the up-front maximum, the packet size is kept at that maximum, also ensuring sync. The minimum used now is slightly larger than it used to be, because it also includes the bits added for dynalloc boosting. Such boosting is shut off by the encoder at low rates, and so should not cause any serious issues at the rates where we would actually run out of room before compute_allocation().
-
- Jan 08, 2011
-
-
The mid = (lo+hi)>>1 line in the binary search would allow hi to drop down to the same value as lo, meaning the rounding after the search would be choosing between the same two values. This patch changes it to (lo+hi+1)>>1. This will allow lo to increase up to the value hi, but only in the case that we can't possibly allocate enough pulses to meet the target number of bits (in which case the rounding doesn't matter). To pay for the extra add, this moves the +1 in the comparison to bits to the other side, which can then be taken outside the loop. The compiler can't normally do this because it might cause overflow which would change the results. This rarely mattered, but gives a 0.01 PEAQ improvement on 12-byte 120 sample frames. It also makes the search process describable with a simple algorithm, rather than relying on this particular optimized implementation. I.e., the binary search loop can now be replaced with for(lo=0;lo+1<cache[0]&&cache[lo+1]<bits;lo++); hi=lo+1; and it will give equivalent results. This was not true before.
-
- Dec 16, 2010
-
-
Jean-Marc Valin authored
-
- Dec 15, 2010
-
-
This allows us to a) not pay a coding cost to avoid skipping bands that are stupid to skip (e.g., the first band, or bands that have so few bits that we wouldn't redistribute anything) and b) not reserve bits to pay that cost.
-
- Dec 10, 2010
-
-
Jean-Marc Valin authored
This adds some side-information that can be used to change the threshold freq arbitrarily.
-
- Oct 18, 2010
-
-
Jean-Marc Valin authored
Previous limit was effectively 120.
-
- Sep 30, 2010
-
-
Jean-Marc Valin authored
Uses a scaling factor that gets applied to the allocation matrix. Conflicts: libcelt/celt.c libcelt/rate.c libcelt/rate.h
-
- Sep 28, 2010
-
-
Jean-Marc Valin authored
-
- Aug 31, 2010
-
-
Jean-Marc Valin authored
-
Jean-Marc Valin authored
-
Jean-Marc Valin authored
-
Jean-Marc Valin authored
Based on 1/2*log2(N)-19/8, but with the 2-bit and 3-bit thresholds shifted by 2*log2(N)/8 bit and log2(N)/8 bit, respectively.
-
- Aug 25, 2010
-
-
Jean-Marc Valin authored
Fixed a few minor bugs in the process.
-
Jean-Marc Valin authored
-
- Aug 06, 2010
-
-
Jean-Marc Valin authored
-
- Aug 05, 2010
-
-
Jean-Marc Valin authored
-
Jean-Marc Valin authored
-
- Jul 29, 2010
-
-
Jean-Marc Valin authored
-
- Jul 27, 2010
-
-
Jean-Marc Valin authored
Also convert the stereo split code to use log(N)/2 as the bit allocation offset
-
The old code allocated too many fine bits to large bands. New allocations were derived from by numerical optimization using quantization MSE sampled from Laplacian distributed random data to within +/- 1 bit for N=2...160 and bits per band from 0 to 64. Those allocations could be modeled with only minor errors using a simple offset of 19/8+log2(N), with no bits spent on fine energy when there would not be enough bits remaining to code a single pulse. However, PEAQ testing suggested an offset of 14/8 was better, and that it was always worth spending at least one bit on fine energy.
-
- Jul 23, 2010
-
-
Jean-Marc Valin authored
-
- Jul 13, 2010
-
-
Jean-Marc Valin authored
-
- Jun 03, 2010
-
-
Jean-Marc Valin authored
Should eventually allow using 8-bit values for the pulse->bits table.
-
- May 24, 2010
-
-
Jean-Marc Valin authored
-
- May 21, 2010
-
-
Jean-Marc Valin authored
Adding one more level of band splitting so that splitting at the PVQ encoding level is no longer necessary.
-
- May 14, 2010
-
-
Jean-Marc Valin authored
Uses a triangular PDF for coding the angle.
-
- Apr 26, 2010
-
-
Jean-Marc Valin authored
-
- Feb 26, 2010
-
-
Jean-Marc Valin authored
-
- Oct 18, 2009
-
-
Jean-Marc Valin authored
-
- Oct 17, 2009
-
-
Jean-Marc Valin authored
by POSIX. The other _t types that are not part of the API are still there for now. Also, got rid of all that was left of the 64-bit types.
-