pad: Add API to get the current state of a task
authorThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 17 Feb 2017 18:48:17 +0000 (15:48 -0300)
committerThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 24 Feb 2017 19:16:23 +0000 (16:16 -0300)
Avoiding the user to need to deal with the locking himself etc.

API:
  gst_pad_task_get_state

https://bugzilla.gnome.org/show_bug.cgi?id=778830

docs/gst/gstreamer-sections.txt
gst/gstpad.c
gst/gstpad.h

index 5628d8cbb27387e75a136aa9d26fb3dc96e05fce..b0e6e6c870204a420e69d044d4b063da14862bb4 100644 (file)
@@ -2058,6 +2058,7 @@ gst_pad_chain_list
 gst_pad_start_task
 gst_pad_pause_task
 gst_pad_stop_task
+gst_pad_task_get_state
 
 gst_pad_set_active
 
index f5142e6f6da9dfd41928a9c04605621522018b9f..4ff6059858adecf8a05a876a02c7629077283655 100644 (file)
@@ -6069,6 +6069,40 @@ no_task:
   }
 }
 
+/**
+ * gst_pad_get_task_state:
+ * @pad: the #GstPad to get task state from
+ *
+ * Get @pad task state. If no task is currently
+ * set, GST_TASK_STOPPED is returned.
+ *
+ * Returns: The current state of @pad's task.
+ */
+GstTaskState
+gst_pad_get_task_state (GstPad * pad)
+{
+  GstTask *task;
+  GstTaskState res;
+
+  g_return_val_if_fail (GST_IS_PAD (pad), GST_TASK_STOPPED);
+
+  GST_OBJECT_LOCK (pad);
+  task = GST_PAD_TASK (pad);
+  if (task == NULL)
+    goto no_task;
+  res = gst_task_get_state (task);
+  GST_OBJECT_UNLOCK (pad);
+
+  return res;
+
+no_task:
+  {
+    GST_DEBUG_OBJECT (pad, "pad has no task");
+    GST_OBJECT_UNLOCK (pad);
+    return GST_TASK_STOPPED;
+  }
+}
+
 /**
  * gst_pad_stop_task:
  * @pad: the #GstPad to stop the task of
index 9c9bf5b41092aa1e5cdd42c7d79bb363ca506310..2893ae0a78422f2312d01cd4c905155c1fd0f7f3 100644 (file)
@@ -1417,6 +1417,7 @@ gboolean          gst_pad_start_task                      (GstPad *pad, GstTaskFunction func,
                                                                 gpointer user_data, GDestroyNotify notify);
 gboolean               gst_pad_pause_task                      (GstPad *pad);
 gboolean               gst_pad_stop_task                       (GstPad *pad);
+GstTaskState   gst_pad_get_task_state          (GstPad *pad);
 
 /* internal links */
 void                    gst_pad_set_iterate_internal_links_function_full (GstPad * pad,