element: Added gst_element_get_current_clock_time and gst_element_get_current_running...
authorJan Alexander Steffens (heftig) <jsteffens@make.tv>
Mon, 12 Aug 2019 08:53:33 +0000 (11:53 +0300)
committerVivia Nikolaidou <vivia@ahiru.eu>
Mon, 12 Aug 2019 09:59:27 +0000 (12:59 +0300)
Helper functions for getting the element clock's time, and the clock
time minus base time, respectively.

gst/gstelement.c
gst/gstelement.h

index 8ccebec..5847af0 100644 (file)
@@ -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:
index 77f73e8..c1bfb45 100644 (file)
@@ -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