aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-07-24 22:33:21 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-07-24 22:33:21 +0200
commit383a04a127734d25c1ef7839c489bba297855801 (patch)
tree4338660f0efda8a1bfe059d16d1e55ba8ba23dd3
parentd44b8f0a47245936c371f0db88ff1436d218df00 (diff)
downloadffmpeg-383a04a127734d25c1ef7839c489bba297855801.tar.gz
avformat/mux: keep AVPacket fields consistent in ff_write_chained()
This might have caused double frees in theory, i do not have a test case though Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/mux.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/mux.c b/libavformat/mux.c
index 308b255269..3abeccfaa0 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -963,6 +963,7 @@ int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
AVFormatContext *src)
{
AVPacket local_pkt;
+ int ret;
local_pkt = *pkt;
local_pkt.stream_index = dst_stream;
@@ -978,7 +979,11 @@ int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
local_pkt.duration = av_rescale_q(pkt->duration,
src->streams[pkt->stream_index]->time_base,
dst->streams[dst_stream]->time_base);
- return av_write_frame(dst, &local_pkt);
+
+ ret = av_write_frame(dst, &local_pkt);
+ pkt->buf = local_pkt.buf;
+ pkt->destruct = local_pkt.destruct;
+ return ret;
}
static int av_write_uncoded_frame_internal(AVFormatContext *s, int stream_index,