diff --git a/video/out/drm_common.c b/video/out/drm_common.c index 4f235956ad..dd53793dbb 100644 --- a/video/out/drm_common.c +++ b/video/out/drm_common.c @@ -1304,15 +1304,15 @@ void vo_drm_set_monitor_par(struct vo *vo) MP_VERBOSE(drm, "Monitor pixel aspect: %g\n", vo->monitor_par); } -void vo_drm_wait_events(struct vo *vo, int64_t until_time_us) +void vo_drm_wait_events(struct vo *vo, int64_t until_time_ns) { struct vo_drm_state *drm = vo->drm; if (drm->vt_switcher_active) { - int64_t wait_us = until_time_us - mp_time_us(); - int timeout_ms = MPCLAMP((wait_us + 500) / 1000, 0, 10000); + int64_t wait_ns = until_time_ns - mp_time_ns(); + int timeout_ms = MPCLAMP(wait_ns / 1e6, 1, 10000); vt_switcher_poll(&drm->vt_switcher, timeout_ms); } else { - vo_wait_default(vo, until_time_us); + vo_wait_default(vo, until_time_ns); } } diff --git a/video/out/drm_common.h b/video/out/drm_common.h index ac91584899..cadef2019f 100644 --- a/video/out/drm_common.h +++ b/video/out/drm_common.h @@ -114,7 +114,7 @@ double vo_drm_get_display_fps(struct vo_drm_state *drm); void vo_drm_get_vsync(struct vo *vo, struct vo_vsync_info *info); void vo_drm_set_monitor_par(struct vo *vo); void vo_drm_uninit(struct vo *vo); -void vo_drm_wait_events(struct vo *vo, int64_t until_time_us); +void vo_drm_wait_events(struct vo *vo, int64_t until_time_ns); void vo_drm_wait_on_flip(struct vo_drm_state *drm); void vo_drm_wakeup(struct vo *vo); diff --git a/video/out/gpu/context.h b/video/out/gpu/context.h index 27d8462f97..6788e6fd89 100644 --- a/video/out/gpu/context.h +++ b/video/out/gpu/context.h @@ -48,7 +48,7 @@ struct ra_ctx_fns { // These behave exactly like vo_driver.wakeup/wait_events. They are // optional. void (*wakeup)(struct ra_ctx *ctx); - void (*wait_events)(struct ra_ctx *ctx, int64_t until_time_us); + void (*wait_events)(struct ra_ctx *ctx, int64_t until_time_ns); void (*update_render_opts)(struct ra_ctx *ctx); // Initialize/destroy the 'struct ra' and possibly the underlying VO backend. diff --git a/video/out/opengl/context_drm_egl.c b/video/out/opengl/context_drm_egl.c index 5141f2ce2a..16046b1577 100644 --- a/video/out/opengl/context_drm_egl.c +++ b/video/out/opengl/context_drm_egl.c @@ -734,9 +734,9 @@ static int drm_egl_control(struct ra_ctx *ctx, int *events, int request, return ret; } -static void drm_egl_wait_events(struct ra_ctx *ctx, int64_t until_time_us) +static void drm_egl_wait_events(struct ra_ctx *ctx, int64_t until_time_ns) { - vo_drm_wait_events(ctx->vo, until_time_us); + vo_drm_wait_events(ctx->vo, until_time_ns); } static void drm_egl_wakeup(struct ra_ctx *ctx) diff --git a/video/out/opengl/context_glx.c b/video/out/opengl/context_glx.c index 5d22563632..40622245e6 100644 --- a/video/out/opengl/context_glx.c +++ b/video/out/opengl/context_glx.c @@ -334,9 +334,9 @@ static void glx_wakeup(struct ra_ctx *ctx) vo_x11_wakeup(ctx->vo); } -static void glx_wait_events(struct ra_ctx *ctx, int64_t until_time_us) +static void glx_wait_events(struct ra_ctx *ctx, int64_t until_time_ns) { - vo_x11_wait_events(ctx->vo, until_time_us); + vo_x11_wait_events(ctx->vo, until_time_ns); } const struct ra_ctx_fns ra_ctx_glx = { diff --git a/video/out/opengl/context_wayland.c b/video/out/opengl/context_wayland.c index aa8bb2d921..26c52688d3 100644 --- a/video/out/opengl/context_wayland.c +++ b/video/out/opengl/context_wayland.c @@ -198,9 +198,9 @@ static void wayland_egl_wakeup(struct ra_ctx *ctx) vo_wayland_wakeup(ctx->vo); } -static void wayland_egl_wait_events(struct ra_ctx *ctx, int64_t until_time_us) +static void wayland_egl_wait_events(struct ra_ctx *ctx, int64_t until_time_ns) { - vo_wayland_wait_events(ctx->vo, until_time_us); + vo_wayland_wait_events(ctx->vo, until_time_ns); } static void wayland_egl_update_render_opts(struct ra_ctx *ctx) diff --git a/video/out/opengl/context_x11egl.c b/video/out/opengl/context_x11egl.c index a0f710f3ec..3201f298f6 100644 --- a/video/out/opengl/context_x11egl.c +++ b/video/out/opengl/context_x11egl.c @@ -208,9 +208,9 @@ static void mpegl_wakeup(struct ra_ctx *ctx) vo_x11_wakeup(ctx->vo); } -static void mpegl_wait_events(struct ra_ctx *ctx, int64_t until_time_us) +static void mpegl_wait_events(struct ra_ctx *ctx, int64_t until_time_ns) { - vo_x11_wait_events(ctx->vo, until_time_us); + vo_x11_wait_events(ctx->vo, until_time_ns); } const struct ra_ctx_fns ra_ctx_x11_egl = { diff --git a/video/out/vo.c b/video/out/vo.c index 7b50b90745..4fab586dfd 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -717,7 +717,7 @@ void vo_wait_default(struct vo *vo, int64_t until_time) pthread_mutex_lock(&in->lock); if (!in->need_wakeup) { - struct timespec ts = mp_time_us_to_realtime(until_time); + struct timespec ts = mp_time_ns_to_realtime(until_time); pthread_cond_timedwait(&in->wakeup, &in->lock, &ts); } pthread_mutex_unlock(&in->lock); @@ -1064,7 +1064,7 @@ static void *vo_thread(void *ptr) stats_event(in->stats, "iterations"); vo->driver->control(vo, VOCTRL_CHECK_EVENTS, NULL); bool working = render_frame(vo); - int64_t now = mp_time_us(); + int64_t now = mp_time_ns(); int64_t wait_until = now + (working ? 0 : (int64_t)1e9); pthread_mutex_lock(&in->lock); diff --git a/video/out/vo.h b/video/out/vo.h index d67ca5fe51..710bd6e10f 100644 --- a/video/out/vo.h +++ b/video/out/vo.h @@ -414,7 +414,7 @@ struct vo_driver { * immediately. */ void (*wakeup)(struct vo *vo); - void (*wait_events)(struct vo *vo, int64_t until_time_us); + void (*wait_events)(struct vo *vo, int64_t until_time_ns); /* * Closes driver. Should restore the original state of the system. diff --git a/video/out/vo_gpu.c b/video/out/vo_gpu.c index 8939561a38..c02e6e730d 100644 --- a/video/out/vo_gpu.c +++ b/video/out/vo_gpu.c @@ -252,13 +252,13 @@ static void wakeup(struct vo *vo) p->ctx->fns->wakeup(p->ctx); } -static void wait_events(struct vo *vo, int64_t until_time_us) +static void wait_events(struct vo *vo, int64_t until_time_ns) { struct gpu_priv *p = vo->priv; if (p->ctx && p->ctx->fns->wait_events) { - p->ctx->fns->wait_events(p->ctx, until_time_us); + p->ctx->fns->wait_events(p->ctx, until_time_ns); } else { - vo_wait_default(vo, until_time_us); + vo_wait_default(vo, until_time_ns); } } diff --git a/video/out/vo_gpu_next.c b/video/out/vo_gpu_next.c index 8014f7def1..d5c234f4bb 100644 --- a/video/out/vo_gpu_next.c +++ b/video/out/vo_gpu_next.c @@ -1578,13 +1578,13 @@ static void wakeup(struct vo *vo) p->ra_ctx->fns->wakeup(p->ra_ctx); } -static void wait_events(struct vo *vo, int64_t until_time_us) +static void wait_events(struct vo *vo, int64_t until_time_ns) { struct priv *p = vo->priv; if (p->ra_ctx && p->ra_ctx->fns->wait_events) { - p->ra_ctx->fns->wait_events(p->ra_ctx, until_time_us); + p->ra_ctx->fns->wait_events(p->ra_ctx, until_time_ns); } else { - vo_wait_default(vo, until_time_us); + vo_wait_default(vo, until_time_ns); } } diff --git a/video/out/vo_sdl.c b/video/out/vo_sdl.c index b5e3d5b041..e101f8d620 100644 --- a/video/out/vo_sdl.c +++ b/video/out/vo_sdl.c @@ -520,10 +520,10 @@ static void wakeup(struct vo *vo) SDL_PushEvent(&event); } -static void wait_events(struct vo *vo, int64_t until_time_us) +static void wait_events(struct vo *vo, int64_t until_time_ns) { - int64_t wait_us = until_time_us - mp_time_us(); - int timeout_ms = MPCLAMP((wait_us + 500) / 1000, 0, 10000); + int64_t wait_ns = until_time_ns - mp_time_ns(); + int timeout_ms = MPCLAMP(wait_ns / 1e6, 1, 10000); SDL_Event ev; while (SDL_WaitEventTimeout(&ev, timeout_ms)) { diff --git a/video/out/vulkan/context_display.c b/video/out/vulkan/context_display.c index da801dd921..84cef1e8c2 100644 --- a/video/out/vulkan/context_display.c +++ b/video/out/vulkan/context_display.c @@ -474,7 +474,7 @@ static void display_wakeup(struct ra_ctx *ctx) // TODO } -static void display_wait_events(struct ra_ctx *ctx, int64_t until_time_us) +static void display_wait_events(struct ra_ctx *ctx, int64_t until_time_ns) { // TODO } diff --git a/video/out/vulkan/context_wayland.c b/video/out/vulkan/context_wayland.c index 5ca6265a91..761ff5b12c 100644 --- a/video/out/vulkan/context_wayland.c +++ b/video/out/vulkan/context_wayland.c @@ -142,9 +142,9 @@ static void wayland_vk_wakeup(struct ra_ctx *ctx) vo_wayland_wakeup(ctx->vo); } -static void wayland_vk_wait_events(struct ra_ctx *ctx, int64_t until_time_us) +static void wayland_vk_wait_events(struct ra_ctx *ctx, int64_t until_time_ns) { - vo_wayland_wait_events(ctx->vo, until_time_us); + vo_wayland_wait_events(ctx->vo, until_time_ns); } static void wayland_vk_update_render_opts(struct ra_ctx *ctx) diff --git a/video/out/vulkan/context_xlib.c b/video/out/vulkan/context_xlib.c index 0c01d56fc9..673dc312b7 100644 --- a/video/out/vulkan/context_xlib.c +++ b/video/out/vulkan/context_xlib.c @@ -126,9 +126,9 @@ static void xlib_wakeup(struct ra_ctx *ctx) vo_x11_wakeup(ctx->vo); } -static void xlib_wait_events(struct ra_ctx *ctx, int64_t until_time_us) +static void xlib_wait_events(struct ra_ctx *ctx, int64_t until_time_ns) { - vo_x11_wait_events(ctx->vo, until_time_us); + vo_x11_wait_events(ctx->vo, until_time_ns); } const struct ra_ctx_fns ra_ctx_vulkan_xlib = { diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c index 47dc4d9605..04b7d1f7bd 100644 --- a/video/out/wayland_common.c +++ b/video/out/wayland_common.c @@ -2604,12 +2604,12 @@ void vo_wayland_wait_frame(struct vo_wayland_state *wl) wl->timeout_count = 0; } -void vo_wayland_wait_events(struct vo *vo, int64_t until_time_us) +void vo_wayland_wait_events(struct vo *vo, int64_t until_time_ns) { struct vo_wayland_state *wl = vo->wl; - int64_t wait_us = until_time_us - mp_time_us(); - int timeout_ms = MPCLAMP((wait_us + 999) / 1000, 0, 10000); + int64_t wait_ns = until_time_ns - mp_time_ns(); + int timeout_ms = MPCLAMP(wait_ns / 1e6, 1, 10000); wayland_dispatch_events(wl, 2, timeout_ms); } diff --git a/video/out/wayland_common.h b/video/out/wayland_common.h index 3b4366318c..060583278e 100644 --- a/video/out/wayland_common.h +++ b/video/out/wayland_common.h @@ -180,7 +180,7 @@ void vo_wayland_handle_fractional_scale(struct vo_wayland_state *wl); void vo_wayland_set_opaque_region(struct vo_wayland_state *wl, bool alpha); void vo_wayland_sync_swap(struct vo_wayland_state *wl); void vo_wayland_uninit(struct vo *vo); -void vo_wayland_wait_events(struct vo *vo, int64_t until_time_us); +void vo_wayland_wait_events(struct vo *vo, int64_t until_time_ns); void vo_wayland_wait_frame(struct vo_wayland_state *wl); void vo_wayland_wakeup(struct vo *vo); diff --git a/video/out/x11_common.c b/video/out/x11_common.c index 78e4778ecf..be5002b068 100644 --- a/video/out/x11_common.c +++ b/video/out/x11_common.c @@ -2168,7 +2168,7 @@ void vo_x11_wakeup(struct vo *vo) (void)write(x11->wakeup_pipe[1], &(char){0}, 1); } -void vo_x11_wait_events(struct vo *vo, int64_t until_time_us) +void vo_x11_wait_events(struct vo *vo, int64_t until_time_ns) { struct vo_x11_state *x11 = vo->x11; @@ -2176,8 +2176,8 @@ void vo_x11_wait_events(struct vo *vo, int64_t until_time_us) { .fd = x11->event_fd, .events = POLLIN }, { .fd = x11->wakeup_pipe[0], .events = POLLIN }, }; - int64_t wait_us = until_time_us - mp_time_us(); - int timeout_ms = MPCLAMP((wait_us + 999) / 1000, 0, 10000); + int64_t wait_ns = until_time_ns - mp_time_ns(); + int timeout_ms = MPCLAMP(wait_ns / 1e6, 1, 10000); poll(fds, 2, timeout_ms); diff --git a/video/out/x11_common.h b/video/out/x11_common.h index 0ea0cd574f..d4409f14e8 100644 --- a/video/out/x11_common.h +++ b/video/out/x11_common.h @@ -154,7 +154,7 @@ int vo_x11_control(struct vo *vo, int *events, int request, void *arg); void vo_x11_present(struct vo *vo); void vo_x11_sync_swap(struct vo *vo); void vo_x11_wakeup(struct vo *vo); -void vo_x11_wait_events(struct vo *vo, int64_t until_time_us); +void vo_x11_wait_events(struct vo *vo, int64_t until_time_ns); void vo_x11_silence_xlib(int dir);