From 32c686e0e37d677edae0cf9fc4f230b7c625a5d6 Mon Sep 17 00:00:00 2001 From: Tri Vo Khac Date: Wed, 11 Nov 2026 20:36:58 +0700 Subject: [PATCH] fix(mpv): avoid render stalls from video timing offset (#6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mpvqt renders without disabling MPV_RENDER_PARAM_BLOCK_FOR_TARGET_TIME, so each new video frame blocks the Qt Quick render thread for up to video-timing-offset (50 ms). Animations over a playing video (playlist slide-in) stuttered; paused video was smooth. Set video-timing-offset=0. Measured offscreen while toggling the playlist during playback: worst frame 35–39 ms before, 17–21 ms after. Reviewed-on: https://git.trivk.dev/tri/QtPotato/pulls/6 Co-authored-by: Tri Vo Khac --- src/mpv/mpvitem.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mpv/mpvitem.cpp b/src/mpv/mpvitem.cpp index ab757bb..6aaf7d0 100644 --- a/src/mpv/mpvitem.cpp +++ b/src/mpv/mpvitem.cpp @@ -33,6 +33,10 @@ MpvItem::MpvItem(QQuickItem *parent) // Leave the player on the last frame at end of file instead of unloading it. setPropertyAsync(QStringLiteral("keep-open"), QStringLiteral("yes")); setPropertyAsync(QStringLiteral("hwdec"), QStringLiteral("auto-safe")); + // mpvqt renders with the default blocking timing, so each new video frame stalls + // the Qt Quick render thread for up to this offset (50 ms) and animations drawn + // over a playing video stutter. Hand frames over at their display time instead. + setPropertyAsync(QStringLiteral("video-timing-offset"), 0); // Also pick up "movie.en.srt" style files next to "movie.mkv". setPropertyAsync(QStringLiteral("sub-auto"), QStringLiteral("fuzzy"));