[FFmpeg-cvslog] avformat/av1dec: Flush BSF upon seeking

Andreas Rheinhardt git at videolan.org
Mon Aug 23 08:29:09 EEST 2021

ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Sun Aug 22 11:18:56 2021 +0200| [3f938cd46a8ae1e66569ec322e8ad56c055726a6] | committer: Andreas Rheinhardt

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 <jamrial at gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3f938cd46a8ae1e66569ec322e8ad56c055726a6

 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

More information about the ffmpeg-cvslog mailing list