From 64ffe9b97bff6e0377701be32f1e47948dd9f45e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Lu=C3=ADs=20Vaz=20Silva?= Date: Sun, 31 Mar 2024 19:00:06 -0300 Subject: [PATCH] skip frames when playing back IVF to prevent desyncs --- src/common/cutscenes/movieplayer.cpp | 35 +++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/common/cutscenes/movieplayer.cpp b/src/common/cutscenes/movieplayer.cpp index 3a79577fa..a1b04385f 100644 --- a/src/common/cutscenes/movieplayer.cpp +++ b/src/common/cutscenes/movieplayer.cpp @@ -554,21 +554,34 @@ public: bool stop = false; if (clock >= nextframetime) { + + nextframetime += nsecsperframe; - auto img = GetFrameData(); - - if (!img || !FormatSupported(img->fmt)) - { - Printf(PRINT_BOLD, "Failed reading next frame\n"); - stop = true; - } - else - { - animtex.SetFrame(nullptr, img); + while(clock >= nextframetime) + { // frameskipping + auto img = GetFrameData(); + framenum++; + nextframetime += nsecsperframe; + if (framenum >= numframes || !img) break; } - framenum++; + if (framenum < numframes) + { + auto img = GetFrameData(); + + if (!img || !FormatSupported(img->fmt)) + { + Printf(PRINT_BOLD, "Failed reading next frame\n"); + stop = true; + } + else + { + animtex.SetFrame(nullptr, img); + } + + framenum++; + } if (framenum >= numframes) stop = true; bool nostopsound = (flags & NOSOUNDCUTOFF);