gsttask.h | gsttask.h | |||
---|---|---|---|---|
skipping to change at line 27 | skipping to change at line 27 | |||
* You should have received a copy of the GNU Library General Public | * You should have received a copy of the GNU Library General Public | |||
* License along with this library; if not, write to the | * License along with this library; if not, write to the | |||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, | * Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |||
* Boston, MA 02111-1307, USA. | * Boston, MA 02111-1307, USA. | |||
*/ | */ | |||
#ifndef __GST_TASK_H__ | #ifndef __GST_TASK_H__ | |||
#define __GST_TASK_H__ | #define __GST_TASK_H__ | |||
#include <gst/gstobject.h> | #include <gst/gstobject.h> | |||
#include <gst/gsttaskpool.h> | ||||
G_BEGIN_DECLS | G_BEGIN_DECLS | |||
/** | /** | |||
* GstTaskFunction: | * GstTaskFunction: | |||
* @data: user data passed to the function | * @data: user data passed to the function | |||
* | * | |||
* A function that will repeatedly be called in the thread created by | * A function that will repeatedly be called in the thread created by | |||
* a #GstTask. | * a #GstTask. | |||
*/ | */ | |||
typedef void (*GstTaskFunction) (void *data); | typedef void (*GstTaskFunction) (void *data); | |||
/* --- standard type macros --- */ | /* --- standard type macros --- */ | |||
#define GST_TYPE_TASK (gst_task_get_type ()) | #define GST_TYPE_TASK (gst_task_get_type ()) | |||
#define GST_TASK(task) (G_TYPE_CHECK_INSTANCE_CAST ((task), | #define GST_TASK(task) (G_TYPE_CHECK_INSTANCE_CAST ((task) | |||
GST_TYPE_TASK, GstTask)) | , GST_TYPE_TASK, GstTask)) | |||
#define GST_IS_TASK(task) (G_TYPE_CHECK_INSTANCE_TYPE ((task), | #define GST_IS_TASK(task) (G_TYPE_CHECK_INSTANCE_TYPE ((task) | |||
GST_TYPE_TASK)) | , GST_TYPE_TASK)) | |||
#define GST_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((t | #define GST_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((tclass), | |||
class), GST_TYPE_TASK, GstTaskClass)) | GST_TYPE_TASK, GstTaskClass)) | |||
#define GST_IS_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((t | #define GST_IS_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((tclass), | |||
class), GST_TYPE_TASK)) | GST_TYPE_TASK)) | |||
#define GST_TASK_GET_CLASS(task) (G_TYPE_INSTANCE_GET_CLASS ((task), | #define GST_TASK_GET_CLASS(task) (G_TYPE_INSTANCE_GET_CLASS ((task), | |||
GST_TYPE_TASK, GstTaskClass)) | GST_TYPE_TASK, GstTaskClass)) | |||
#define GST_TASK_CAST(task) ((GstTask*)(task)) | #define GST_TASK_CAST(task) ((GstTask*)(task)) | |||
typedef struct _GstTask GstTask; | typedef struct _GstTask GstTask; | |||
typedef struct _GstTaskClass GstTaskClass; | typedef struct _GstTaskClass GstTaskClass; | |||
typedef struct _GstTaskPrivate GstTaskPrivate; | ||||
/** | /** | |||
* GstTaskState: | * GstTaskState: | |||
* @GST_TASK_STARTED: the task is started and running | * @GST_TASK_STARTED: the task is started and running | |||
* @GST_TASK_STOPPED: the task is stopped | * @GST_TASK_STOPPED: the task is stopped | |||
* @GST_TASK_PAUSED: the task is paused | * @GST_TASK_PAUSED: the task is paused | |||
* | * | |||
* The different states a task can be in | * The different states a task can be in | |||
*/ | */ | |||
typedef enum { | typedef enum { | |||
skipping to change at line 71 | skipping to change at line 73 | |||
GST_TASK_STOPPED, | GST_TASK_STOPPED, | |||
GST_TASK_PAUSED | GST_TASK_PAUSED | |||
} GstTaskState; | } GstTaskState; | |||
/** | /** | |||
* GST_TASK_STATE: | * GST_TASK_STATE: | |||
* @task: Task to get the state of | * @task: Task to get the state of | |||
* | * | |||
* Get access to the state of the task. | * Get access to the state of the task. | |||
*/ | */ | |||
#define GST_TASK_STATE(task) (GST_TASK_CAST(task)->state) | #define GST_TASK_STATE(task) (GST_TASK_CAST(task)->state) | |||
/** | /** | |||
* GST_TASK_GET_COND: | * GST_TASK_GET_COND: | |||
* @task: Task to get the cond of | * @task: Task to get the cond of | |||
* | * | |||
* Get access to the cond of the task. | * Get access to the cond of the task. | |||
*/ | */ | |||
#define GST_TASK_GET_COND(task) (GST_TASK_CAST(task)->cond) | #define GST_TASK_GET_COND(task) (GST_TASK_CAST(task)->cond) | |||
/** | /** | |||
* GST_TASK_WAIT: | * GST_TASK_WAIT: | |||
* @task: Task to wait for | * @task: Task to wait for | |||
* | * | |||
* Wait for the task cond to be signalled | * Wait for the task cond to be signalled | |||
*/ | */ | |||
#define GST_TASK_WAIT(task) g_cond_wait(GST_TASK_GET_COND (task) , GST_OBJECT_GET_LOCK (task)) | #define GST_TASK_WAIT(task) g_cond_wait(GST_TASK_GET_COND (task ), GST_OBJECT_GET_LOCK (task)) | |||
/** | /** | |||
* GST_TASK_SIGNAL: | * GST_TASK_SIGNAL: | |||
* @task: Task to signal | * @task: Task to signal | |||
* | * | |||
* Signal the task cond | * Signal the task cond | |||
*/ | */ | |||
#define GST_TASK_SIGNAL(task) g_cond_signal(GST_TASK_GET_COND (tas k)) | #define GST_TASK_SIGNAL(task) g_cond_signal(GST_TASK_GET_COND (ta sk)) | |||
/** | /** | |||
* GST_TASK_BROADCAST: | * GST_TASK_BROADCAST: | |||
* @task: Task to broadcast | * @task: Task to broadcast | |||
* | * | |||
* Send a broadcast signal to all waiting task conds | * Send a broadcast signal to all waiting task conds | |||
*/ | */ | |||
#define GST_TASK_BROADCAST(task) g_cond_breadcast(GST_TASK_GET_COND ( task)) | #define GST_TASK_BROADCAST(task) g_cond_breadcast(GST_TASK_GET_COND (task)) | |||
/** | /** | |||
* GST_TASK_GET_LOCK: | * GST_TASK_GET_LOCK: | |||
* @task: Task to get the lock of | * @task: Task to get the lock of | |||
* | * | |||
* Get access to the task lock. | * Get access to the task lock. | |||
*/ | */ | |||
#define GST_TASK_GET_LOCK(task) (GST_TASK_CAST(task)->lock) | #define GST_TASK_GET_LOCK(task) (GST_TASK_CAST(task)->lock) | |||
/** | ||||
* GstTaskThreadCallbacks: | ||||
* @enter_thread: a thread is entered, this callback is called when the new | ||||
* thread enters its function. | ||||
* @leave_thread: a thread is exiting, this is called when the thread is ab | ||||
out | ||||
* to leave its function | ||||
* | ||||
* Custom GstTask thread callback functions that can be installed. | ||||
* | ||||
* Since: 0.10.24 | ||||
*/ | ||||
typedef struct { | ||||
/* manage the lifetime of the thread */ | ||||
void (*enter_thread) (GstTask *task, GThread *thread, gpointer u | ||||
ser_data); | ||||
void (*leave_thread) (GstTask *task, GThread *thread, gpointer u | ||||
ser_data); | ||||
/*< private >*/ | ||||
gpointer _gst_reserved[GST_PADDING]; | ||||
} GstTaskThreadCallbacks; | ||||
/** | /** | |||
* GstTask: | * GstTask: | |||
* @state: the state of the task | * @state: the state of the task | |||
* @cond: used to pause/resume the task | * @cond: used to pause/resume the task | |||
* @lock: The lock taken when iterating the task function | * @lock: The lock taken when iterating the task function | |||
* @func: the function executed by this task | * @func: the function executed by this task | |||
* @data: data passed to the task function | * @data: data passed to the task function | |||
* @running: a flag indicating that the task is running | * @running: a flag indicating that the task is running | |||
* | * | |||
* The #GstTask object. | * The #GstTask object. | |||
*/ | */ | |||
struct _GstTask { | struct _GstTask { | |||
GstObject object; | GstObject object; | |||
/*< public >*/ /* with LOCK */ | /*< public >*/ /* with LOCK */ | |||
GstTaskState state; | GstTaskState state; | |||
GCond *cond; | GCond *cond; | |||
GStaticRecMutex *lock; | GStaticRecMutex *lock; | |||
GstTaskFunction func; | GstTaskFunction func; | |||
gpointer data; | gpointer data; | |||
gboolean running; | gboolean running; | |||
/*< private >*/ | /*< private >*/ | |||
union { | union { | |||
struct { | struct { | |||
/* thread this task is currently running in */ | /* thread this task is currently running in */ | |||
GThread *thread; | GThread *thread; | |||
} ABI; | } ABI; | |||
/* adding + 0 to mark ABI change to be undone later */ | gpointer _gst_reserved[GST_PADDING - 1]; | |||
gpointer _gst_reserved[GST_PADDING + 0]; | ||||
} abidata; | } abidata; | |||
GstTaskPrivate *priv; | ||||
}; | }; | |||
struct _GstTaskClass { | struct _GstTaskClass { | |||
GstObjectClass parent_class; | GstObjectClass parent_class; | |||
/*< private >*/ | /*< private >*/ | |||
GThreadPool *pool; | GstTaskPool *pool; | |||
/*< private >*/ | /*< private >*/ | |||
gpointer _gst_reserved[GST_PADDING]; | gpointer _gst_reserved[GST_PADDING]; | |||
}; | }; | |||
void gst_task_cleanup_all (void); | void gst_task_cleanup_all (void); | |||
GType gst_task_get_type (void); | GType gst_task_get_type (void); | |||
GstTask* gst_task_create (GstTaskFunction func, gpointer data | GstTask* gst_task_create (GstTaskFunction func, gpointer dat | |||
); | a); | |||
void gst_task_set_lock (GstTask *task, GStaticRecMutex *mut | void gst_task_set_lock (GstTask *task, GStaticRecMutex *mu | |||
ex); | tex); | |||
void gst_task_set_priority (GstTask *task, GThreadPriority pri | ||||
GstTaskState gst_task_get_state (GstTask *task); | ority); | |||
gboolean gst_task_start (GstTask *task); | GstTaskPool * gst_task_get_pool (GstTask *task); | |||
gboolean gst_task_stop (GstTask *task); | void gst_task_set_pool (GstTask *task, GstTaskPool *pool); | |||
gboolean gst_task_pause (GstTask *task); | ||||
void gst_task_set_thread_callbacks (GstTask *task, | ||||
GstTaskThreadCallbacks *cal | ||||
lbacks, | ||||
gpointer user_data, | ||||
GDestroyNotify notify); | ||||
GstTaskState gst_task_get_state (GstTask *task); | ||||
gboolean gst_task_set_state (GstTask *task, GstTaskState state) | ||||
; | ||||
gboolean gst_task_start (GstTask *task); | ||||
gboolean gst_task_stop (GstTask *task); | ||||
gboolean gst_task_pause (GstTask *task); | ||||
gboolean gst_task_join (GstTask *task); | gboolean gst_task_join (GstTask *task); | |||
G_END_DECLS | G_END_DECLS | |||
#endif /* __GST_TASK_H__ */ | #endif /* __GST_TASK_H__ */ | |||
End of changes. 18 change blocks. | ||||
36 lines changed or deleted | 73 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |