• Andreas Rheinhardt's avatar
    fftools/ffmpeg: Improve streamcopy · 223a2c2a
    Andreas Rheinhardt authored
    do_streamcopy() has a packet that gets zero-initialized first, then gets
    initialized via av_init_packet() after which some of its fields are
    oerwritten again with the actually desired values (unless it's EOF): The
    side data is copied into the packet with av_copy_packet_side_data() and
    if the source packet is refcounted, the packet will get a new reference
    to the source packet's data. Furthermore, the flags are copied and the
    timestamp related fields are overwritten with new values.
    
    This commit replaces this by using av_packet_ref() to both initialize
    the packet as well as populate its fields with the right values (unless
    it's EOF again in which case the packet will still be initialized). The
    differences to the current approach are as follows:
    a) There is no call to a deprecated function (av_copy_packet_side_data())
    any more.
    b) Several fields that weren't copied before are now copied from the source
    packet to the new packet (e.g. pos). Some of them (the timestamp related
    fields) may be immediately overwritten again and some don't seem to be
    used at all (e.g. pos), but in return using av_packet_ref() allows to forgo
    the initializations.
    c) There was no check for whether copying side data fails or not. This
    has been changed: Now the program is exited in this case.
    
    Using av_packet_ref() does not lead to unnecessary copying of data,
    because the source packets are already always refcounted (they originate
    from av_read_frame()).
    Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
    Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
    223a2c2a
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...