• 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
matroskaenc.c 102 KB