From d23d313b392227ae0d72640ef99d48791d1ddbc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 11 Apr 2020 20:02:41 +0300 Subject: [PATCH] gstreamer: Add Element::get_current_clock_time() and ::get_current_running_time() This was added in GStreamer 1.18 but we can easily implement it ourselves here for the time being and for older versions. --- gstreamer/src/element.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gstreamer/src/element.rs b/gstreamer/src/element.rs index ef34e9426..d0447fbfe 100644 --- a/gstreamer/src/element.rs +++ b/gstreamer/src/element.rs @@ -262,6 +262,9 @@ pub trait ElementExtManual: 'static { where F: FnOnce(&Self) -> T + Send + 'static, T: Send + 'static; + + fn get_current_running_time(&self) -> ::ClockTime; + fn get_current_clock_time(&self) -> ::ClockTime; } impl> ElementExtManual for O { @@ -804,6 +807,26 @@ impl> ElementExtManual for O { Box::pin(receiver.map(|res| res.expect("sender dropped"))) } + + fn get_current_running_time(&self) -> ::ClockTime { + use ElementExt; + + let base_time = self.get_base_time(); + let clock_time = self.get_current_clock_time(); + + clock_time - base_time + } + + fn get_current_clock_time(&self) -> ::ClockTime { + use ClockExt; + use ElementExt; + + if let Some(clock) = self.get_clock() { + clock.get_time() + } else { + ::CLOCK_TIME_NONE + } + } } impl ElementClass {