From 1aab0848ee4807a0369656edd9eb42ce5adb56ae Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 27 Sep 2018 21:02:56 +0200 Subject: [PATCH] Drop frames if the player runs too far behind. --- player.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/player.cpp b/player.cpp index 1eea8d7..1e57ded 100644 --- a/player.cpp +++ b/player.cpp @@ -97,6 +97,13 @@ void Player::thread_func(bool also_output_to_stream) int64_t in_pts = lrint(in_pts_origin + TIMEBASE * frameno * speed / output_framerate); pts = lrint(out_pts); + steady_clock::duration time_behind = steady_clock::now() - next_frame_start; + if (time_behind >= milliseconds(200)) { + fprintf(stderr, "WARNING: %ld ms behind, dropping a frame (no matter the type).\n", + lrint(1e3 * duration(time_behind).count())); + continue; + } + int64_t in_pts_lower, in_pts_upper; // Find the frame immediately before and after this point. @@ -171,6 +178,12 @@ void Player::thread_func(bool also_output_to_stream) continue; } + if (time_behind >= milliseconds(100)) { + fprintf(stderr, "WARNING: %ld ms behind, dropping an interpolated frame.\n", + lrint(1e3 * duration(time_behind).count())); + continue; + } + double alpha = double(in_pts - in_pts_lower) / (in_pts_upper - in_pts_lower); if (video_stream == nullptr) { -- 2.39.2