From ad2b1edbd0d666a9df6421a9fb6cdfcff1a429eb Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Mon, 10 Feb 2025 05:02:43 +0800 Subject: [PATCH] replay: flush codec buffers after seeking (#34556) * flush codec buffers after seeking * replace avio_seek with the higher-level avformat_seek_file * exit early --- tools/replay/framereader.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/replay/framereader.cc b/tools/replay/framereader.cc index 26ef4684a..690645aca 100644 --- a/tools/replay/framereader.cc +++ b/tools/replay/framereader.cc @@ -177,7 +177,14 @@ bool VideoDecoder::decode(FrameReader *reader, int idx, VisionBuf *buf) { break; } } - avio_seek(reader->input_ctx->pb, reader->packets_info[from_idx].pos, SEEK_SET); + + auto pos = reader->packets_info[from_idx].pos; + int ret = avformat_seek_file(reader->input_ctx, 0, pos, pos, pos, AVSEEK_FLAG_BYTE); + if (ret < 0) { + rError("Failed to seek to byte position %lld: %d", pos, AVERROR(ret)); + return false; + } + avcodec_flush_buffers(decoder_ctx); } reader->prev_idx = idx;