[FFmpeg-devel] [PATCH] avformat: close parser if codec changed
Andreas Cadhalpun
andreas.cadhalpun at googlemail.com
Mon Oct 17 21:49:23 EEST 2016
The parser depends on the codec and thus must not be used with a different one.
If it is, the 'avctx->codec_id == s->parser->codec_ids[0] ...' assert in
av_parser_parse2 gets triggered.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
---
libavformat/utils.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 8a51aea..a581994 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -480,6 +480,12 @@ static int update_stream_avctx(AVFormatContext *s)
if (!st->internal->need_context_update)
continue;
+ /* close parser, because it depends on the codec */
+ if (st->parser) {
+ av_parser_close(st->parser);
+ st->parser = NULL;
+ }
+
/* update internal codec context, for the parser */
ret = avcodec_parameters_to_context(st->internal->avctx, st->codecpar);
if (ret < 0)
@@ -1515,6 +1521,12 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
st->info->found_decoder = 0;
}
+ /* close parser, because it depends on the codec */
+ if (st->parser) {
+ av_parser_close(st->parser);
+ st->parser = NULL;
+ }
+
ret = avcodec_parameters_to_context(st->internal->avctx, st->codecpar);
if (ret < 0)
return ret;
--
2.9.3
More information about the ffmpeg-devel
mailing list