• Andreas Rheinhardt's avatar
    avformat/av1: Avoid allocation + copying when filtering OBUs · a3e43e0c
    Andreas Rheinhardt authored
    Certain types of OBUs are stripped away before muxing into Matroska and
    ISOBMFF; there are two functions to do this: One that outputs by
    directly writing in an AVIOContext and one that returns a freshly
    allocated buffer with the units not stripped away copied into it.
    
    The latter option is bad for performance, especially when the input
    does already not contain any of the units intended to be stripped away
    (this covers typical remuxing scenarios). Therefore this commit changes
    this by avoiding allocating and copying when possible; it is possible if
    the OBUs to be retained are consecutively in the input buffer (without
    an OBU to be discarded between them). In this case, the caller receives
    the offset as well as the length of the part of the buffer that contains
    the units to be kept. This also avoids copying when e.g. the only unit
    to be discarded is a temporal delimiter at the front.
    
    For a 22.7mb/s file with average framesize 113 kB this improved the time
    for the calls to ff_av1_filter_obus_buf() when writing Matroska from
    313319 decicycles to 2368 decicycles; for another file with 1.5mb/s
    (average framesize 7.3 kB) it improved from 34539 decicycles to 1922
    decicyles. For these files the only units that needed to be stripped
    away were temporal unit delimiters at the front.
    Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
    Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
    a3e43e0c
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...
.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...