diff --git a/libavformat/demux.c b/libavformat/demux.c index ecd4f40da9..3749ab67a3 100644 --- a/libavformat/demux.c +++ b/libavformat/demux.c @@ -1292,9 +1292,15 @@ static int codec_close(FFStream *sti) { AVCodecContext *avctx_new = NULL; AVCodecParameters *par_tmp = NULL; + const AVCodec *new_codec = NULL; int ret; - avctx_new = avcodec_alloc_context3(sti->avctx->codec); + new_codec = + (sti->avctx->codec_id != sti->pub.codecpar->codec_id) ? + avcodec_find_decoder(sti->pub.codecpar->codec_id) : + sti->avctx->codec; + + avctx_new = avcodec_alloc_context3(new_codec); if (!avctx_new) { ret = AVERROR(ENOMEM); goto fail;