From 4e5906d2b045f99fcd2b7d21cb01f532db873bed Mon Sep 17 00:00:00 2001 From: jpark37 Date: Mon, 28 Feb 2022 09:15:31 -0800 Subject: [PATCH] libobs: Clamp video timing for safety os_gettime_ns and os_sleepto_ns may not match up exactly. --- libobs/obs-video.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libobs/obs-video.c b/libobs/obs-video.c index 1eceeac88..e98422261 100644 --- a/libobs/obs-video.c +++ b/libobs/obs-video.c @@ -723,7 +723,12 @@ static inline void video_sleep(struct obs_core_video *video, bool raw_active, *p_time = t; count = 1; } else { - count = (int)((os_gettime_ns() - cur_time) / interval_ns); + const uint64_t udiff = os_gettime_ns() - cur_time; + int64_t diff; + memcpy(&diff, &udiff, sizeof(diff)); + const uint64_t clamped_diff = + (diff > (int64_t)interval_ns) ? diff : interval_ns; + count = (int)(clamped_diff / interval_ns); *p_time = cur_time + interval_ns * count; }