From 1d5a1e8235170fa3313108c336b0c676e6b1c4b4 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Mon, 12 Aug 2019 11:53:33 +0300 Subject: [PATCH] element: Added gst_element_get_current_clock_time and gst_element_get_current_running_time Helper functions for getting the element clock's time, and the clock time minus base time, respectively. --- gst/gstelement.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ gst/gstelement.h | 6 +++++ 2 files changed, 80 insertions(+) diff --git a/gst/gstelement.c b/gst/gstelement.c index 8ccebec..5847af0 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -586,6 +586,80 @@ gst_element_get_start_time (GstElement * element) return result; } +/** + * gst_element_get_current_running_time: + * @element: a #GstElement. + * + * Returns the running time of the element. The running time is the + * element's clock time minus its base time. Will return GST_CLOCK_TIME_NONE + * if the element has no clock, or if its base time has not been set. + * + * Returns: the running time of the element, or GST_CLOCK_TIME_NONE if the + * element has no clock or its base time has not been set. + * + * Since: 1.18 + */ +GstClockTime +gst_element_get_current_running_time (GstElement * element) +{ + GstClockTime base_time, clock_time; + + g_return_val_if_fail (GST_IS_ELEMENT (element), GST_CLOCK_TIME_NONE); + + base_time = gst_element_get_base_time (element); + + if (!GST_CLOCK_TIME_IS_VALID (base_time)) { + GST_DEBUG_OBJECT (element, "Could not determine base time"); + return GST_CLOCK_TIME_NONE; + } + + clock_time = gst_element_get_current_clock_time (element); + + if (!GST_CLOCK_TIME_IS_VALID (clock_time)) { + return GST_CLOCK_TIME_NONE; + } + + if (clock_time < base_time) { + GST_DEBUG_OBJECT (element, "Got negative current running time"); + return GST_CLOCK_TIME_NONE; + } + + return clock_time - base_time; +} + +/** + * gst_element_get_current_clock_time: + * @element: a #GstElement. + * + * Returns the current clock time of the element, as in, the time of the + * element's clock, or GST_CLOCK_TIME_NONE if there is no clock. + * + * Returns: the clock time of the element, or GST_CLOCK_TIME_NONE if there is + * no clock. + * + * Since: 1.18 + */ +GstClockTime +gst_element_get_current_clock_time (GstElement * element) +{ + GstClock *clock = NULL; + GstClockTime ret; + + g_return_val_if_fail (GST_IS_ELEMENT (element), GST_CLOCK_TIME_NONE); + + clock = gst_element_get_clock (element); + + if (!clock) { + GST_DEBUG_OBJECT (element, "Element has no clock"); + return GST_CLOCK_TIME_NONE; + } + + ret = gst_clock_get_time (clock); + gst_object_unref (clock); + + return ret; +} + #if 0 /** * gst_element_set_index: diff --git a/gst/gstelement.h b/gst/gstelement.h index 77f73e8..c1bfb45 100644 --- a/gst/gstelement.h +++ b/gst/gstelement.h @@ -860,6 +860,12 @@ void gst_element_set_start_time (GstElement *element, Gs GST_API GstClockTime gst_element_get_start_time (GstElement *element); +GST_API +GstClockTime gst_element_get_current_running_time (GstElement *element); + +GST_API +GstClockTime gst_element_get_current_clock_time (GstElement *element); + /* bus */ GST_API -- 2.7.4