diff --git a/libweston/backend-pipewire/pipewire.c b/libweston/backend-pipewire/pipewire.c index dc2fe10c7..01a9a1de7 100644 --- a/libweston/backend-pipewire/pipewire.c +++ b/libweston/backend-pipewire/pipewire.c @@ -746,19 +746,15 @@ pipewire_output_arm_timer(struct pipewire_output *output) struct timespec now; struct timespec target; int refresh_nsec = millihz_to_nsec(output->base.current_mode->refresh); - int refresh_msec = refresh_nsec / 1000000; - int next_frame_delta; + int64_t delay_nsec; weston_compositor_read_presentation_clock(ec, &now); timespec_add_nsec(&target, &output->base.frame_time, refresh_nsec); - next_frame_delta = (int)timespec_sub_to_msec(&target, &now); - if (next_frame_delta < 1) - next_frame_delta = 1; - if (next_frame_delta > refresh_msec) - next_frame_delta = refresh_msec; + delay_nsec = CLIP(timespec_sub_to_nsec(&target, &now), 1, refresh_nsec); - wl_event_source_timer_update(output->finish_frame_timer, next_frame_delta); + wl_event_source_timer_update(output->finish_frame_timer, + DIV_ROUND_UP(delay_nsec, 1000000)); } static int