From 667b968939fc3dea63e010c3b64e465225a2321a Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 19 Oct 2015 15:27:42 +0200 Subject: demux_lavf: always copy codec headers If this is not done, libavformat could change the headers while demuxing, all while the decoder thread reads these fields during initialization. --- demux/demux_lavf.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'demux') diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index f73c8693ba..fbe4290758 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -635,7 +635,10 @@ static void handle_stream(demuxer_t *demuxer, int i) sh->ff_index = st->index; sh->codec = mp_codec_from_av_codec_id(codec->codec_id); sh->codec_tag = codec->codec_tag; - sh->lav_headers = codec; + sh->lav_headers = avcodec_alloc_context3(NULL); + if (!sh->lav_headers) + return; + mp_copy_lav_codec_headers(sh->lav_headers, codec); if (st->disposition & AV_DISPOSITION_DEFAULT) sh->default_track = true; @@ -1076,6 +1079,10 @@ static void demux_close_lavf(demuxer_t *demuxer) if (priv->pb) av_freep(&priv->pb->buffer); av_freep(&priv->pb); + for (int n = 0; n < priv->num_streams; n++) { + if (priv->streams[n]) + avcodec_free_context(&priv->streams[n]->lav_headers); + } talloc_free(priv); demuxer->priv = NULL; } -- cgit v1.2.3