From b0f0be76783c443413115fe33cc7137ef21e98a8 Mon Sep 17 00:00:00 2001 From: Dudemanguy Date: Fri, 21 Aug 2020 22:22:10 -0500 Subject: wayland: simplify presentation time Why on earth did I ever bother with this dumb crap? If we do not have any presentation statistics, just set the relevant vo_sync_info values to -1 to disable it. It's much simpler than using mp deltas and trying to keep up with mpv's clock. This also appears to fix audio/video desynchronization if you start a video with the pause flag, move it out of view, and then unpause it. Technically harmless since the video wasn't even in view and putting back in view recovered it, but a quieter terminal is better. --- video/out/wayland_common.c | 21 ++++++++++----------- video/out/wayland_common.h | 1 - 2 files changed, 10 insertions(+), 12 deletions(-) (limited to 'video') diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c index ad752218f9..d795f42998 100644 --- a/video/out/wayland_common.c +++ b/video/out/wayland_common.c @@ -1616,19 +1616,18 @@ void queue_new_sync(struct vo_wayland_state *wl) void wayland_sync_swap(struct vo_wayland_state *wl) { int index = wl->sync_size - 1; - int64_t mp_time = mp_time_us(); - - wl->last_skipped_vsyncs = 0; // If these are the same, presentation feedback has not been received. - // This will happen if the window is obscured/hidden in some way. Update - // the values based on the difference in mp_time. - if (wl->sync[index].ust == wl->last_ust && wl->last_ust) { - wl->sync[index].ust += mp_time - wl->sync[index].last_mp_time; - wl->sync[index].msc += 1; - wl->sync[index].sbc += 1; + // This will happen if the window is obscured/hidden in some way. Set + // these values to -1 to disable presentation feedback in mpv's core. + if (wl->sync[index].ust == wl->last_ust) { + wl->last_skipped_vsyncs = -1; + wl->vsync_duration = -1; + wl->last_queue_display_time = -1; + return; } - wl->sync[index].last_mp_time = mp_time; + + wl->last_skipped_vsyncs = 0; int64_t ust_passed = wl->sync[index].ust ? wl->sync[index].ust - wl->last_ust: 0; wl->last_ust = wl->sync[index].ust; @@ -1647,7 +1646,7 @@ void wayland_sync_swap(struct vo_wayland_state *wl) } uint64_t now_monotonic = ts.tv_sec * 1000000LL + ts.tv_nsec / 1000; - uint64_t ust_mp_time = mp_time - (now_monotonic - wl->sync[index].ust); + uint64_t ust_mp_time = mp_time_us() - (now_monotonic - wl->sync[index].ust); wl->last_sbc_mp_time = ust_mp_time; } diff --git a/video/out/wayland_common.h b/video/out/wayland_common.h index 7748627b29..65f7cbf3e5 100644 --- a/video/out/wayland_common.h +++ b/video/out/wayland_common.h @@ -35,7 +35,6 @@ struct vo_wayland_sync { int64_t ust; int64_t msc; int64_t sbc; - int64_t last_mp_time; bool filled; }; -- cgit v1.2.3