diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-08-22 11:18:56 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-08-23 07:05:56 +0200 |
commit | 3f938cd46a8ae1e66569ec322e8ad56c055726a6 (patch) | |
tree | 1db7345fc837b0f5a3b53e3d2a8e7239ae6debbc /libavformat/av1dec.c | |
parent | 4d200342a7d512dbe91c1820ee82fc3aaf4b644d (diff) | |
download | ffmpeg-3f938cd46a8ae1e66569ec322e8ad56c055726a6.tar.gz |
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@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavformat/av1dec.c')
-rw-r--r-- | libavformat/av1dec.c | 4 |
1 files changed, 4 insertions, 0 deletions
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 |