Merge branch 'cwrs_speedup' (derf's cwrs changes)
Change CWRS indexing to use Pyramid VQ's magnitude ordering.
Better use of the arithmetic operators
Converted everything to 32-bit CWRS (using split after that)
Generate slightly more accurate WMOPS figures
One-at-a-time allocator now uses direct feedback from ec_*_tell().
Simplifications to the new allocator
At least attempting to use all the bits.
Simplified allocation by doing it one band at a time, with memory
Added Erik de Castro Lopo's float_cast.h to use lrintf() when available. Also
exp() and log() are faster than pow() and log10() for dB conversion
Added signalling bits for enabling/disabling pitch, short blocks, and folding.
Fixed a bunch of fixed-point overflows on insanely hot signals by changing
Added hooks for tuning pulses and fine energy quant
Adding a floating point interface to encode and decode
Fixed fixed-point compilation error.
Solved an encoder/decoder mismatch happening when there's no pulse in the first
Preventing encoder/decoder mismatch when coarse energy budget is busted
some tuning to fine energy allocation and prevent it from going above 7 bits
Changing the allocation algorithm to better take into account the fixed cost
Merged compute_allocation_table() and compute_energy_allocation_table()
Turns out that the worse case of the vector split is the same as that of the
fixed a bunch of bugs in the unified allocation code.
Fixed two issues pointed out by Greg
Unified allocation of fine energy and pulses.
Completed the separation of coarse and fine energy quantisation
Split coarse and fine energy quantisation
Better bit allocation for all frame sizes that are not equal to 256.
Re-implemented renormalise_bands() based on renormalise_vector().
Simplified the folding normalisation by creating renormalise_vector().
Re-enabling folding/intra for transients
isolated the folding part of the code that's common in vq.c
Do not encode the short-window bit when not applicable.
cleaned up transient_analysis() and replaced the algorithm with a simpler one
fixed-point: conversion of pre-echo avoidance now complete.
fixed-point: more work on the time window (almost done)
More fixed-point conversion of the time window.
More fixed-point work on the time window -- including conversion of the gain
Cleaned up the pre-echo avoidance code so it works when compiled as fixed-point
Automatically choosing the overlap based on the frame size.
Implemented two pre-echo avoidance techniques: time-domain pre-emphasis and
Doing the cwrs split in dimensions should save a few bits.
Turns out maxK and maxM were also inverted in fits_in64()
fixed a cwrs bug in fits_in32()
Implemented split-cwrs for very large codebooks (>64 bits), but still getting
Implemented a cleaner way to detect whether CWRS codebooks fit in 32 or 64 bits
Suggesting .oga as extension for Ogg files
Use EXPORT macro in a way compatible with win32
Allowing frames up to 512 samples
Infrastructure work for a psy model
Adjusted stereo bit allocation to be higher than mono for the same alloc line
Brought the mdct masking function up-to-date
Making the Laplace test case pass again
Preventing encoder-decoder mismatch when energy values are too large to be
fixed the skipping of the zeros (skip the zeros instead of the good samples!)
Doing mid-side stereo when not doing intensity.
Implemented intensity stereo, which required changes all over the place
More stereo infrastructure
infrastructure changes for upcoming stereo improvements
Preventing some encode/decoder mismatch situations at low bit-rate. Also, some
Added calls to query the bit-stream version.
Some code for packet loss and bit error simulation
More bit allocation tuning
Implemented rate-dependant allocation for the fine energy quantisation.
Packing the pitch parameters first to improve robustness to bit errors with
Some tuning improvements, more to come
Disabled pulse spreading until I can show it actually helps
Slightly less arbitrary gains for intra prediction.
Using only a sign for the intra prediction instead of using up to 5 bits for
Fixed a bug in the PLC and added code to estimate the pitch from the synthesis
Error detection in uint decoding (can no longer return an int that's out
Better value for prediction coef beta
Added code for simulating bit errors
mdct_overlap no longer needed
Added STDIN_TUNING to make it easier to tune CELT
Brought the mdct test-case with the recent changes to the mdct semantic
SHORTCUTS now disables the encoder's de-emphasis (i.e. can't check encoder
Optimisation: caching the divisions used in the Laplace encoder.
removed two shifts from the pitch estimation inner loop
Better indexing for find_spectral_pitch()
Reverted to the old MDCT behaviour of only doing down-scaling in the FFT.
mdct_backward now does the WOLA, so there isn't much left in compute_inv_mdcts
Moved the windowing from compute_inv_mdcts() to mdct_backward()
Separated the pre-rotate from the window+shuffling and further simplified
Further simplifications to the forward mdct
non-negative mdct input index
Moved the windowing operation from compute_mdcts() to mdct_forward() in an
Passing the mode to the intra prediction functions so the single-channel case
Disabling pitch when gain is very small.
Making stack push a tiny bit clearer to the compiler -- don't think it really
s/B/C/ in the intra stuff to have the same notation as everywhere else
Bit better indexing in intra_prediction()
Removing some unnecessary initialisations to zero.
Another bunch of do-while() loops
Further simplifications to comb2pulses() to remove all conditional branches.