From 73b0f363891127dce63cc88454a016b095a438dd Mon Sep 17 00:00:00 2001 From: arch1t3cht Date: Mon, 8 Apr 2024 20:54:19 +0200 Subject: [PATCH] Work around ffmpeg skipping frames near end for h264 Signed-off-by: Derek Buitenhuis --- src/core/videosource.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/videosource.cpp b/src/core/videosource.cpp index 4c34a1cd34..05a5f4523d 100644 --- a/src/core/videosource.cpp +++ b/src/core/videosource.cpp @@ -816,6 +816,11 @@ bool FFMS_VideoSource::SeekTo(int n, int SeekOffset) { // Is the +1 necessary here? Not sure, but let's keep it to be safe. int EndOfStreamDist = CodecContext->has_b_frames + 1; + if (CodecContext->codec_id == AV_CODEC_ID_H264) + // Work around a bug in ffmpeg's h264 decoder where frames are skipped when seeking too + // close to the end in open-gop files: https://trac.ffmpeg.org/ticket/10936 + EndOfStreamDist *= 2; + TargetFrame = std::min(TargetFrame, Frames.RealFrameNumber(std::max(0, VP.NumFrames - 1 - EndOfStreamDist))); if (SeekMode < 3)