From 871756bb70350e4a69d6b66c7883259cd5943ab9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 22 Aug 2024 18:57:45 +0300 Subject: [PATCH] ndisrc: Reset timestamp tracking if remote time goes backwards Part-of: --- net/ndi/src/ndisrc/imp.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/net/ndi/src/ndisrc/imp.rs b/net/ndi/src/ndisrc/imp.rs index 7da3761c..af0a8b1c 100644 --- a/net/ndi/src/ndisrc/imp.rs +++ b/net/ndi/src/ndisrc/imp.rs @@ -1065,7 +1065,25 @@ impl Observations { }; let local_diff = local_time.saturating_sub(base_local_time); - let remote_diff = remote_time.saturating_sub(base_remote_time); + let Some(remote_diff) = remote_time.checked_sub(base_remote_time) else { + gst::warning!(CAT, obj = element, "Backwards remote time, resetting",); + + let discont = !self.deltas.is_empty(); + + gst::debug!( + CAT, + obj = element, + "Initializing base time: local {}, remote {}", + local_time, + remote_time, + ); + + self.reset(); + self.base_local_time = Some(local_time); + self.base_remote_time = Some(remote_time); + + return Some((local_time, duration, discont)); + }; let delta = (local_diff.nseconds() as i64) - (remote_diff.nseconds() as i64); let slope = local_diff.nseconds() as f64 / remote_diff.nseconds() as f64;