From 1e8ab8ce1ec8930a6b66d80bb13ed1ef019b5060 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Wed, 22 May 2019 19:50:51 +0200 Subject: [PATCH] Never seek video more than once when trying to catch up (issue #1472, issue #1438) I'm not sure if this actually helps, because I haven't been able to reproduce the issue so far, but at least this should make it less likely the decoder thread ends up in an infinite loop. --- src/modules/video/theora/TheoraVideoStream.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/modules/video/theora/TheoraVideoStream.cpp b/src/modules/video/theora/TheoraVideoStream.cpp index dd2b41124..a90e2ff55 100644 --- a/src/modules/video/theora/TheoraVideoStream.cpp +++ b/src/modules/video/theora/TheoraVideoStream.cpp @@ -214,14 +214,16 @@ void TheoraVideoStream::threadedFillBackBuffer(double dt) seekDecoder(position); // Until we are at the end of the stream, or we are displaying the right frame - unsigned int lagCounter = 0; + unsigned int framesBehind = 0; + bool failedSeek = false; while (!demuxer.isEos() && position >= nextFrame) { // If we can't catch up, seek - if (lagCounter++ > 5) + if (framesBehind++ > 5 && !failedSeek) { seekDecoder(position); - lagCounter = 0; + framesBehind = 0; + failedSeek = true; } th_ycbcr_buffer bufferinfo;