diff --git a/libavformat/demux.c b/libavformat/demux.c index abfd5fee7d..ecefe7e0a7 100644 --- a/libavformat/demux.c +++ b/libavformat/demux.c @@ -1319,6 +1319,8 @@ fail: return ret; } +static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt); + static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) { FFFormatContext *const si = ffformatcontext(s); @@ -1373,6 +1375,16 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) return ret; } + if (!sti->avctx->extradata) { + sti->extract_extradata.inited = 0; + + ret = extract_extradata(si, st, pkt); + if (ret < 0) { + av_packet_unref(pkt); + return ret; + } + } + sti->codec_desc = avcodec_descriptor_get(sti->avctx->codec_id); sti->need_context_update = 0; @@ -2427,6 +2439,7 @@ static int extract_extradata_init(AVStream *st) if (!ret) goto finish; + av_bsf_free(&sti->extract_extradata.bsf); ret = av_bsf_alloc(f, &sti->extract_extradata.bsf); if (ret < 0) return ret;