• Rostislav Pehlivanov's avatar
    opus: add a native Opus encoder · 5f47c85e
    Rostislav Pehlivanov authored
    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: 's avatarRostislav Pehlivanov <atomnuker@gmail.com>
    5f47c85e
Name
Last commit
Last update
compat Loading commit data...
doc Loading commit data...
libavcodec Loading commit data...
libavdevice Loading commit data...
libavfilter Loading commit data...
libavformat Loading commit data...
libavresample Loading commit data...
libavutil Loading commit data...
libpostproc Loading commit data...
libswresample Loading commit data...
libswscale Loading commit data...
presets Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
CONTRIBUTING.md Loading commit data...
COPYING.GPLv2 Loading commit data...
COPYING.GPLv3 Loading commit data...
COPYING.LGPLv2.1 Loading commit data...
COPYING.LGPLv3 Loading commit data...
CREDITS Loading commit data...
Changelog Loading commit data...
INSTALL.md Loading commit data...
LICENSE.md Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
RELEASE Loading commit data...
arch.mak Loading commit data...
cmdutils.c Loading commit data...
cmdutils.h Loading commit data...
cmdutils_common_opts.h Loading commit data...
cmdutils_opencl.c Loading commit data...
common.mak Loading commit data...
configure Loading commit data...
ffmpeg.c Loading commit data...
ffmpeg.h Loading commit data...
ffmpeg_cuvid.c Loading commit data...
ffmpeg_dxva2.c Loading commit data...
ffmpeg_filter.c Loading commit data...
ffmpeg_opt.c Loading commit data...
ffmpeg_qsv.c Loading commit data...
ffmpeg_vaapi.c Loading commit data...
ffmpeg_vdpau.c Loading commit data...
ffmpeg_videotoolbox.c Loading commit data...
ffplay.c Loading commit data...
ffprobe.c Loading commit data...
ffserver.c Loading commit data...
ffserver_config.c Loading commit data...
ffserver_config.h Loading commit data...
library.mak Loading commit data...
version.sh Loading commit data...