On Wed, Nov 02, 2016 at 10:30:30PM +0100, Andreas Cadhalpun wrote: > On 02.11.2016 13:07, Michael Niedermayer wrote: > > On Sat, Oct 22, 2016 at 01:16:00AM +0200, Andreas Cadhalpun wrote: > >> utils.c | 12 ++++++++++++ > >> 1 file changed, 12 insertions(+) > >> ffefc22756b774cb7652587207ae66cfbf681be3 > >> 0001-avformat-close-parser-if-codec-changed.patch > >> From 9de87a4fb2c6c6311a11a2da5de8554a71adfa66 Mon Sep 17 00:00:00 2001 > >> From: Andreas Cadhalpun <andreas.cadhal...@googlemail.com> > >> Date: Mon, 17 Oct 2016 20:26:51 +0200 > >> Subject: [PATCH] avformat: close parser if codec changed > >> > >> 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.cadhal...@googlemail.com> > >> --- > >> libavformat/utils.c | 12 ++++++++++++ > >> 1 file changed, 12 insertions(+) > >> > >> diff --git a/libavformat/utils.c b/libavformat/utils.c > >> index 70dbfa1..a8a78ed 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 && st->internal->avctx->codec_id != > >> st->codecpar->codec_id) { > >> + 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 && st->internal->avctx->codec_id != > >> st->codecpar->codec_id) { > >> + av_parser_close(st->parser); > >> + st->parser = NULL; > >> + } > >> + > > > > what if the codec id differs but both are supported by the parser ? > > AVCodecParser has a list of 5 codec ids ? > > > > I didnt find a testcase where this makes a difference, just wondering > > I think the parser should be re-initialized in that case, too.
doesnt this lead to data loss (parser internal buffers being lost at a transition between 2 types)? both types might be handled by the same decoder so nothing special might be needed "downstream" [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB There will always be a question for which you do not know the correct answer.
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel