mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-10-14 20:33:00 +02:00
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. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
This commit is contained in:
parent
d0a9af851e
commit
f84ae3f04a
@ -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;
|
||||
}
|
||||
|
||||
ret = avcodec_parameters_to_context(st->internal->avctx, st->codecpar);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user