summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--video/out/opengl/context_wayland.c3
-rw-r--r--video/out/vulkan/context_wayland.c3
-rw-r--r--video/out/wayland_common.c7
-rw-r--r--video/out/wayland_common.h1
4 files changed, 4 insertions, 10 deletions
diff --git a/video/out/opengl/context_wayland.c b/video/out/opengl/context_wayland.c
index 11df19da8c..59e24ded43 100644
--- a/video/out/opengl/context_wayland.c
+++ b/video/out/opengl/context_wayland.c
@@ -77,13 +77,10 @@ static void feedback_presented(void *data, struct wp_presentation_feedback *fbac
wl->sync[index].ust = sec * 1000000LL + (uint64_t) tv_nsec / 1000;
wl->sync[index].msc = (uint64_t) seq_lo + ((uint64_t) seq_hi << 32);
wl->sync[index].filled = true;
- wl->presentation_discarded = false;
}
static void feedback_discarded(void *data, struct wp_presentation_feedback *fback)
{
- struct vo_wayland_state *wl = data;
- wl->presentation_discarded = true;
}
static const struct wp_presentation_feedback_listener feedback_listener = {
diff --git a/video/out/vulkan/context_wayland.c b/video/out/vulkan/context_wayland.c
index faac07cdcb..8c69c2d249 100644
--- a/video/out/vulkan/context_wayland.c
+++ b/video/out/vulkan/context_wayland.c
@@ -67,13 +67,10 @@ static void feedback_presented(void *data, struct wp_presentation_feedback *fbac
wl->sync[index].ust = sec * 1000000LL + (uint64_t) tv_nsec / 1000;
wl->sync[index].msc = (uint64_t) seq_lo + ((uint64_t) seq_hi << 32);
wl->sync[index].filled = true;
- wl->presentation_discarded = false;
}
static void feedback_discarded(void *data, struct wp_presentation_feedback *fback)
{
- struct vo_wayland_state *wl = data;
- wl->presentation_discarded = true;
}
static const struct wp_presentation_feedback_listener feedback_listener = {
diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c
index 993c7b0e54..99aa8ee018 100644
--- a/video/out/wayland_common.c
+++ b/video/out/wayland_common.c
@@ -1607,9 +1607,10 @@ void wayland_sync_swap(struct vo_wayland_state *wl)
wl->last_skipped_vsyncs = 0;
- // If the presentation event was discarded, update the values based on
- // the difference in mp_time.
- if (wl->presentation_discarded) {
+ // 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;
diff --git a/video/out/wayland_common.h b/video/out/wayland_common.h
index 7bfe0e85e0..895db3393d 100644
--- a/video/out/wayland_common.h
+++ b/video/out/wayland_common.h
@@ -107,7 +107,6 @@ struct vo_wayland_state {
/* Presentation Feedback */
struct vo_wayland_sync *sync;
int sync_size;
- bool presentation_discarded;
int64_t user_sbc;
int64_t last_ust;
int64_t last_msc;