[FFmpeg-devel] [PATCH 5/5] avformat/av1dec: Flush BSF upon seeking
James Almer
jamrial at gmail.com
Sun Aug 22 17:24:00 EEST 2021
On 8/22/2021 8:29 AM, Andreas Rheinhardt wrote:
> 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.rheinhardt at 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
LGTM.
More information about the ffmpeg-devel
mailing list