summaryrefslogtreecommitdiffstats
path: root/libavcodec/opusenc.c
Commit message (Collapse)AuthorAgeFilesLines
* opusenc: fix infinite loop if flushing encoder upon initRostislav Pehlivanov2018-12-121-1/+1
| | | | | | | | | | The issue is that the afq still has samples as on init it counts the overlap used as a delay to adjust the PTS it generates, hence we can't rely on it right after init. So just check to see if any frames have been encoded. frame_number can't be anything but 0 right after init and can only be set by lavc. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: use for loops with declarationsRostislav Pehlivanov2018-05-181-54/+44
| | | | Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opus: merge encoder and decoder bitallocation functions into oneRostislav Pehlivanov2017-12-301-332/+5
| | | | | | There's no difference apart from which entropy coding functions get called. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opus_celt: deduplicate band quantization/dequantization functionRostislav Pehlivanov2017-12-041-99/+11
| | | | | | No point in having the same code twice to do exactly the same thing. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: implement a psychoacoustic systemRostislav Pehlivanov2017-09-231-125/+145
| | | | | | | | | | | | | | This commit implements a psychoacoustic system for the native Opus encoder. Its unlike any other psychoacoustic system known since its capable of using a lookahead to make better choices on how to treat the current frame and how many bits to allocate for it (and future frames). Also, whilst the main bulk of the analysis function has to run in a single thread, the per-frame anaylsis functions does not modify the main psychoacoustic context, so in the future it will be fairly trivial to run those as slice threads. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opus: simplify coarse energy beta coefficientsRostislav Pehlivanov2017-07-181-2/+2
| | | | | | Just put the subtraction in the table. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: remove unused variableRostislav Pehlivanov2017-07-181-1/+1
| | | | Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: use float_dsp for non-transient windowingRostislav Pehlivanov2017-07-141-12/+12
| | | | | | Also fixes transient windowing Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: use float_dsp for transient mdctsRostislav Pehlivanov2017-07-131-5/+3
| | | | | | vector_fmul_reverse requires padding the window at the front Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: don't set avctx->cutoffRostislav Pehlivanov2017-07-101-2/+0
| | | | | | | Its only use is to adjust the aac psychoacoustic/filter system which isn't used here. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opus_pvq: port to allow for SIMD functionsRostislav Pehlivanov2017-05-161-3/+9
| | | | Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: initialize PVQ prng seedRostislav Pehlivanov2017-05-161-1/+3
| | | | | | | Fixes valgrind warnings, didn't affect anything since it was only used for resynthesis. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: switch between intra/inter mode for coarse energyRostislav Pehlivanov2017-04-081-8/+28
| | | | | | Saves around 5kbps. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: do not signal digital silenceRostislav Pehlivanov2017-04-081-9/+3
| | | | | | Apparently its only use is to enable comfort noise/error recovery. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: minor style changesRostislav Pehlivanov2017-04-081-18/+14
| | | | Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opusenc: remove unused header entries and simplify normalizationRostislav Pehlivanov2017-04-081-11/+7
| | | | Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* libavcodec/opusenc: use correct format specifiersKyle Swanson2017-03-271-1/+1
| | | | | | | | | | | | | Squelches the following compiler warnings: libavcodec/opusenc.c:1051:16: warning: format specifies type 'long' but the argument has type 'long long' [-Wformat] avctx->bit_rate/1000, clipped_rate/1000); ^~~~~~~~~~~~~~~~~~~~ libavcodec/opusenc.c:1051:38: warning: format specifies type 'long' but the argument has type 'long long' [-Wformat] avctx->bit_rate/1000, clipped_rate/1000); ^~~~~~~~~~~~~~~~~
* opusenc: initialize the emphasis coefficients on initRostislav Pehlivanov2017-02-181-0/+3
| | | | Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* avcodec/opusenc: Add () protecting macro argumentsMichael Niedermayer2017-02-161-2/+2
| | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* opusenc: fix coarse energy quantization with 2 bits leftRostislav Pehlivanov2017-02-151-1/+1
| | | | | | Fixes CID1400584 Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
* opus: add a native Opus encoderRostislav Pehlivanov2017-02-141-0/+1130
This marks the first time anyone has written an Opus encoder without using any libopus code. The aim of the encoder is to prove how far the format can go by writing the craziest encoder for it. Right now the encoder's basic, it only supports CBR encoding, however internally every single feature the CELT layer has is implemented (except the pitch pre-filter which needs to work well with the rest of whatever gets implemented). Psychoacoustic and rate control systems are under development. The encoder takes in frames of 120 samples and depending on the value of opus_delay the plan is to use the extra buffered frames as lookahead. Right now the encoder will pick the nearest largest legal frame size and won't use the lookahead, but that'll change once there's a psychoacoustic system. Even though its a pretty basic encoder its already outperforming any other native encoder FFmpeg has by a huge amount. The PVQ search algorithm is faster and more accurate than libopus's algorithm so the encoder's performance is close to that of libopus at zero complexity (libopus has more SIMD). The algorithm might be ported to libopus or other codecs using PVQ in the future. The encoder still has a few minor bugs, like desyncs at ultra low bitrates (below 9kbps with 20ms frames). Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
OpenPOWER on IntegriCloud