• Andreas Rheinhardt's avatar
    avformat/matroskaenc: Stop reallocating of Cluster buffer · 4aa0665f
    Andreas Rheinhardt authored
    The Matroska muxer uses a dynamic buffer to buffer the content of
    Clusters before eventually writing them. Up until now, each time a
    Cluster was written, the dynamic buffer was closed, i.e. freed; now it
    is only reset, saving allocations of the AVIOContext itself, its opaque
    as well as most of the reallocations of the buffer.
    
    This is advantageous performance-wise, in particular on systems where
    reallocations are slow (namely Windows). The following table shows the
    decicyles for writing a frame on Linux (Ubuntu 19.10) and Windows (7)
    on an x64 Haswell (to /dev/null on Linux, to stdout which is discarded
    on Windows (the default values of the size and duration of clusters for
    seekable output have been explicitly set in this case); in all tests,
    writing CRC-32 values has been disabled in all tests; calls to the muxer's
    write_packet function in write_packet() in libavformat/mux.c have been
    timed; each of the following tests has been repeated 50 times):
    
        | Windows before | Windows after | Linux before | Linux after
    _________________________________________________________________
     A  |     979437     |    192304     |    259500    |   183320
     B  |     715936     |    155648     |    152786    |   130879
     C  |     265115     |     56034     |     78496    |    53243
     D  |     386224     |     80307     |    128894    |    75354
     E  |      21732     |     10695     |     11320    |     9801
    
    (A is a 10.2 mb/s file with a GOP length of 2s, amounting to an average
    Cluster size of about 2.5 MiB; the average Cluster size of B is 1.1 MiB;
    for C it is 2.35 MiB, for D it is 0.46 MiB; for E - a file with just a
    single audio track of 158kb/s resulting in a Cluster size of about 100
    kB, the relative gains were the smallest, probably because of the small
    Cluster size.)
    Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
    4aa0665f
Name
Last commit
Last update
compat Loading commit data...
doc Loading commit data...
ffbuild Loading commit data...
fftools 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...
.mailmap 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...
configure Loading commit data...