From 3f938cd46a8ae1e66569ec322e8ad56c055726a6 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Sun, 22 Aug 2021 11:18:56 +0200 Subject: [PATCH] avformat/av1dec: Flush BSF upon seeking The av1_merge_frame BSF outputs its cached data when it sees the beginning of a new frame, i.e. when it sees a temporal delimiter OBU. Therefore it typically has a temporal delimiter OBU cached after outputting a packet. This implies that the OBU demuxer must flush its BSF upon seeking because otherwise the first frame returned after a seek consists of an old temporal delimiter OBU only. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt --- libavformat/av1dec.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/av1dec.c b/libavformat/av1dec.c index d5d4548d8b..88a3c325e4 100644 --- a/libavformat/av1dec.c +++ b/libavformat/av1dec.c @@ -390,6 +390,10 @@ static int obu_read_packet(AVFormatContext *s, AVPacket *pkt) AV1DemuxContext *const c = s->priv_data; int ret; + if (s->io_repositioned) { + av_bsf_flush(c->bsf); + s->io_repositioned = 0; + } while (1) { ret = obu_get_packet(s, pkt); /* In case of AVERROR_EOF we need to flush the BSF. Conveniently