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. Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> --- The AV1 Annex B demuxer also has two issues: It records the wrong positions (it is off due to the annex b packetization) and it needs to flush the bsf, too. Will look into it. 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 -- 2.30.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".