From c90ddfd4849bd6a71e6d69e36e9af5fb09a8ad64 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Wed, 23 Nov 2016 01:50:03 -0600 Subject: [PATCH] Ensure Seek() waits for any outstanding video/audio frames to be processed in other threads before attempting a seek (and potentially crashing) --- src/FFmpegReader.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/FFmpegReader.cpp b/src/FFmpegReader.cpp index e01a8754..e9fa69b3 100644 --- a/src/FFmpegReader.cpp +++ b/src/FFmpegReader.cpp @@ -1202,7 +1202,11 @@ void FFmpegReader::Seek(long int requested_frame) throw(TooManySeeks) requested_frame = info.video_length; // Debug output - ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::Seek", "requested_frame", requested_frame, "seek_count", seek_count, "last_frame", last_frame, "", -1, "", -1, "", -1); + ZmqLogger::Instance()->AppendDebugMethod("FFmpegReader::Seek", "requested_frame", requested_frame, "seek_count", seek_count, "last_frame", last_frame, "processing_video_frames.size()", processing_video_frames.size(), "processing_audio_frames.size()", processing_audio_frames.size(), "", -1); + + // Wait for any processing frames to complete + while (processing_video_frames.size() + processing_audio_frames.size() > 0) + usleep(2500); // Clear working cache (since we are seeking to another location in the file) working_cache.Clear();