• Rostislav Pehlivanov's avatar
    vc2enc: do not allocate packet until exact frame size is known · b88be742
    Rostislav Pehlivanov authored
    This commit solves most of the crashes and issues with the encoder and
    the bitrate setting. Now the encoder will always allocate the absolute
    lowest amount of memory regardless of what the bitrate has been set to.
    Therefore if a user inputs a very low bitrate the encoder will use the
    maximum possible quantization (basically zero out all coefficients),
    allocate a packet and encode it. There is no coupling between the
    bitrate and the allocation size and so no crashes because the buffer
    isn't large enough.
    
    The maximum quantizer was raised to the size of the table now to both
    keep the overshoot at ridiculous bitrates low and to improve quality
    with higher bit depths (since the coefficients grow larger per transform
    quantizing them to the same relative level requires larger quantization
    indices).
    
    Since the quantization index start follows the previous quantization
    index for that slice, the quantization step was reduced to a static 1
    to improve performance. Previously with quant/5 the step was usually
    set to 0 upon start (and was later clipped to 1), that isn't a big change.
    As the step size increases so does the amount of bits leftover and so
    the redistribution algorithm has to iterate more and thus waste more
    time.
    Signed-off-by: 's avatarRostislav Pehlivanov <atomnuker@gmail.com>
    b88be742
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...
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_dxva2.c Loading commit data...
ffmpeg_filter.c Loading commit data...
ffmpeg_opt.c Loading commit data...
ffmpeg_qsv.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...