mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 01:52:19 +00:00
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.
This commit is contained in:
parent
85f38a9765
commit
b0f0be7678
@ -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;
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,6 @@ struct vo_wayland_sync {
|
||||
int64_t ust;
|
||||
int64_t msc;
|
||||
int64_t sbc;
|
||||
int64_t last_mp_time;
|
||||
bool filled;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user