From 02250179d9a133f8827ca924b09a970c1eb2e7f6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 23 Apr 2009 17:19:11 +0200 Subject: [PATCH] GstTask: add methods for configuring the pool Add getter and setter for configuring the GstTaskPool to use for a GstTask. --- docs/gst/gstreamer-sections.txt | 3 ++ gst/gsttask.c | 67 +++++++++++++++++++++++++++++++++ gst/gsttask.h | 3 ++ 3 files changed, 73 insertions(+) diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 4b4b1f94a6..1fd6afdd12 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -2210,6 +2210,9 @@ gst_task_create gst_task_set_lock gst_task_set_priority +gst_task_set_pool +gst_task_get_pool + GstTaskThreadCallbacks gst_task_set_thread_callbacks diff --git a/gst/gsttask.c b/gst/gsttask.c index 857c8673b5..3aec20ffd0 100644 --- a/gst/gsttask.c +++ b/gst/gsttask.c @@ -400,6 +400,73 @@ gst_task_set_priority (GstTask * task, GThreadPriority priority) GST_OBJECT_UNLOCK (task); } +/** + * gst_task_get_pool: + * @task: a #GstTask + * + * Get the #GstTaskPool that this task will use for its streaming + * threads. + * + * MT safe. + * + * Returns: the #GstTaskPool used by @task. gst_object_unref() + * after usage. + * + * Since: 0.10.24 + */ +GstTaskPool * +gst_task_get_pool (GstTask * task) +{ + GstTaskPool *result; + GstTaskPrivate *priv; + + g_return_val_if_fail (GST_IS_TASK (task), NULL); + + priv = task->priv; + + GST_OBJECT_LOCK (task); + result = gst_object_ref (priv->pool); + GST_OBJECT_UNLOCK (task); + + return result; +} + +/** + * gst_task_set_pool: + * @task: a #GstTask + * @pool: a #GstTaskPool + * + * Set @pool as the new GstTaskPool for @task. Any new streaming threads that + * will be created by @task will now use @pool. + * + * MT safe. + * + * Since: 0.10.24 + */ +void +gst_task_set_pool (GstTask * task, GstTaskPool * pool) +{ + GstTaskPool *old; + GstTaskPrivate *priv; + + g_return_if_fail (GST_IS_TASK (task)); + g_return_if_fail (GST_IS_TASK_POOL (pool)); + + priv = task->priv; + + GST_OBJECT_LOCK (task); + if (priv->pool != pool) { + old = priv->pool; + priv->pool = gst_object_ref (pool); + } else + old = NULL; + GST_OBJECT_UNLOCK (task); + + if (old) + gst_object_unref (old); +} + + /** * gst_task_set_thread_callbacks: * @task: The #GstTask to use diff --git a/gst/gsttask.h b/gst/gsttask.h index 936f296702..b0b7c30932 100644 --- a/gst/gsttask.h +++ b/gst/gsttask.h @@ -183,6 +183,9 @@ GstTask* gst_task_create (GstTaskFunction func, gpointer data); void gst_task_set_lock (GstTask *task, GStaticRecMutex *mutex); void gst_task_set_priority (GstTask *task, GThreadPriority priority); +GstTaskPool * gst_task_get_pool (GstTask *task); +void gst_task_set_pool (GstTask *task, GstTaskPool *pool); + void gst_task_set_thread_callbacks (GstTask *task, GstTaskThreadCallbacks *callbacks, gpointer user_data,