And 2% more doc coverage.

Original commit message from CVS:
* docs/gst/gstreamer-docs.sgml:
* docs/gst/gstreamer-sections.txt:
* gst/gstelement.h:
* gst/gstevent.c:
* gst/gstevent.h:
* gst/gstmessage.h:
* gst/gstpad.h:
* gst/gstparse.h:
* gst/gsttask.c: (gst_task_finalize), (gst_task_func):
* gst/gsttask.h:
* gst/gstutils.c:
* gst/gstutils.h:
And 2% more doc coverage.
This commit is contained in:
Wim Taymans 2005-10-21 11:36:32 +00:00
parent 0e3178c111
commit e1a166a584
13 changed files with 226 additions and 46 deletions

View file

@ -1,3 +1,19 @@
2005-10-21 Wim Taymans <wim@fluendo.com>
* docs/gst/gstreamer-docs.sgml:
* docs/gst/gstreamer-sections.txt:
* gst/gstelement.h:
* gst/gstevent.c:
* gst/gstevent.h:
* gst/gstmessage.h:
* gst/gstpad.h:
* gst/gstparse.h:
* gst/gsttask.c: (gst_task_finalize), (gst_task_func):
* gst/gsttask.h:
* gst/gstutils.c:
* gst/gstutils.h:
And 2% more doc coverage.
2005-10-21 Andy Wingo <wingo@pobox.com> 2005-10-21 Andy Wingo <wingo@pobox.com>
* gst/base/gstbasesrc.c (gst_base_src_query): Clean up percent * gst/base/gstbasesrc.c (gst_base_src_query): Clean up percent

View file

@ -43,6 +43,7 @@
<!ENTITY GstSystemClock SYSTEM "xml/gstsystemclock.xml"> <!ENTITY GstSystemClock SYSTEM "xml/gstsystemclock.xml">
<!ENTITY GstTagList SYSTEM "xml/gsttaglist.xml"> <!ENTITY GstTagList SYSTEM "xml/gsttaglist.xml">
<!ENTITY GstTagSetter SYSTEM "xml/gsttagsetter.xml"> <!ENTITY GstTagSetter SYSTEM "xml/gsttagsetter.xml">
<!ENTITY GstTask SYSTEM "xml/gsttask.xml">
<!ENTITY GstTrace SYSTEM "xml/gsttrace.xml"> <!ENTITY GstTrace SYSTEM "xml/gsttrace.xml">
<!ENTITY GstTypeFind SYSTEM "xml/gsttypefind.xml"> <!ENTITY GstTypeFind SYSTEM "xml/gsttypefind.xml">
<!ENTITY GstTypeFindFactory SYSTEM "xml/gsttypefindfactory.xml"> <!ENTITY GstTypeFindFactory SYSTEM "xml/gsttypefindfactory.xml">
@ -153,6 +154,7 @@ Windows. It is released under the GNU Library General Public License
&GstSystemClock; &GstSystemClock;
&GstTagList; &GstTagList;
&GstTagSetter; &GstTagSetter;
&GstTask;
&GstTypeFind; &GstTypeFind;
&GstTypeFindFactory; &GstTypeFindFactory;
&GstUriHandler; &GstUriHandler;

View file

@ -498,6 +498,7 @@ gst_element_provides_clock
gst_element_query gst_element_query
gst_element_query_convert gst_element_query_convert
gst_element_query_position gst_element_query_position
gst_element_query_duration
gst_element_release_request_pad gst_element_release_request_pad
gst_element_remove_pad gst_element_remove_pad
gst_element_requires_clock gst_element_requires_clock
@ -983,6 +984,8 @@ gst_message_new_segment_start
gst_message_new_state_changed gst_message_new_state_changed
gst_message_new_tag gst_message_new_tag
gst_message_new_warning gst_message_new_warning
gst_message_new_duration
gst_message_new_state_dirty
gst_message_parse_clock_lost gst_message_parse_clock_lost
gst_message_parse_clock_provide gst_message_parse_clock_provide
gst_message_parse_error gst_message_parse_error
@ -992,6 +995,7 @@ gst_message_parse_segment_start
gst_message_parse_state_changed gst_message_parse_state_changed
gst_message_parse_tag gst_message_parse_tag
gst_message_parse_warning gst_message_parse_warning
gst_message_parse_duration
gst_message_ref gst_message_ref
gst_message_unref gst_message_unref
<SUBSECTION Standard> <SUBSECTION Standard>
@ -1230,6 +1234,7 @@ gst_pad_event_default
gst_pad_query gst_pad_query
gst_pad_query_default gst_pad_query_default
gst_pad_query_position gst_pad_query_position
gst_pad_query_duration
gst_pad_query_convert gst_pad_query_convert
gst_pad_set_query_function gst_pad_set_query_function
GstPadQueryFunction GstPadQueryFunction
@ -1527,12 +1532,15 @@ gst_query_make_writable
gst_query_new_application gst_query_new_application
gst_query_new_convert gst_query_new_convert
gst_query_new_position gst_query_new_position
gst_query_new_duration
gst_query_parse_convert gst_query_parse_convert
gst_query_parse_position gst_query_parse_position
gst_query_parse_duration
gst_query_ref gst_query_ref
gst_query_set_convert gst_query_set_convert
gst_query_set_formats gst_query_set_formats
gst_query_set_position gst_query_set_position
gst_query_set_duration
gst_query_set_seeking gst_query_set_seeking
gst_query_type_iterate_definitions gst_query_type_iterate_definitions
gst_query_unref gst_query_unref

View file

@ -29,6 +29,16 @@ typedef struct _GstElement GstElement;
typedef struct _GstElementClass GstElementClass; typedef struct _GstElementClass GstElementClass;
/* gstmessage.h needs State */ /* gstmessage.h needs State */
/**
* GstState:
* @GST_STATE_VOID_PENDING : no pending state.
* @GST_STATE_NULL : the NULL state or initial state of an element
* @GST_STATE_READY : the element is ready to go to PAUSED
* @GST_STATE_PAUSED : the element is PAUSED
* @GST_STATE_PLAYING : the element is PLAYING
*
* The posible states an element can be in.
*/
typedef enum { typedef enum {
GST_STATE_VOID_PENDING = 0, /* used for GstElement->pending_state when GST_STATE_VOID_PENDING = 0, /* used for GstElement->pending_state when
there is no pending state */ there is no pending state */
@ -116,9 +126,37 @@ typedef enum {
#define GST_STATE_RETURN(obj) (GST_ELEMENT(obj)->last_return) #define GST_STATE_RETURN(obj) (GST_ELEMENT(obj)->last_return)
#define __GST_SIGN(val) ((val) < 0 ? -1 : ((val) > 0 ? 1 : 0)) #define __GST_SIGN(val) ((val) < 0 ? -1 : ((val) > 0 ? 1 : 0))
/**
* GST_STATE_GET_NEXT:
* @cur: A starting state
* @pending: A target state
*
* Given a current state and a target state, calculate the next (intermediate)
* state.
*/
#define GST_STATE_GET_NEXT(cur,pending) ((cur) + __GST_SIGN ((gint)(pending) - (gint)(cur))) #define GST_STATE_GET_NEXT(cur,pending) ((cur) + __GST_SIGN ((gint)(pending) - (gint)(cur)))
/**
* GST_STATE_TRANSITION:
* @cur: A current state
* @next: A next state
*
* Given a current state and a next state, calculate the associated
* state transition.
*/
#define GST_STATE_TRANSITION(cur,next) (((cur)<<3)|(next)) #define GST_STATE_TRANSITION(cur,next) (((cur)<<3)|(next))
/**
* GST_STATE_TRANSITION_CURRENT:
* @trans: A state transition
*
* Given a state transition, extract the current state.
*/
#define GST_STATE_TRANSITION_CURRENT(trans) ((trans)>>3) #define GST_STATE_TRANSITION_CURRENT(trans) ((trans)>>3)
/**
* GST_STATE_TRANSITION_NEXT:
* @trans: A state transition
*
* Given a state transition, extract the next state.
*/
#define GST_STATE_TRANSITION_NEXT(trans) ((trans)&0x7) #define GST_STATE_TRANSITION_NEXT(trans) ((trans)&0x7)
/** /**
@ -129,6 +167,9 @@ typedef enum {
* @GST_STATE_CHANGE_PLAYING_TO_PAUSED: state change from PLAYING to PAUSED * @GST_STATE_CHANGE_PLAYING_TO_PAUSED: state change from PLAYING to PAUSED
* @GST_STATE_CHANGE_PAUSED_TO_READY : state change from PAUSED to READY * @GST_STATE_CHANGE_PAUSED_TO_READY : state change from PAUSED to READY
* @GST_STATE_CHANGE_READY_TO_NULL : state change from READY to NULL * @GST_STATE_CHANGE_READY_TO_NULL : state change from READY to NULL
*
* The different (interesting) state changes that are passed to the
* state change functions of elements.
*/ */
typedef enum /*< flags=0 >*/ typedef enum /*< flags=0 >*/
{ {

View file

@ -33,12 +33,41 @@
* Events can be parsed with their respective gst_event_parse_*() functions. * Events can be parsed with their respective gst_event_parse_*() functions.
* The event should be unreffed with gst_event_unref(). * The event should be unreffed with gst_event_unref().
* *
* Events are passed between elements in parallel to the data stream. Some events
* are serialized with buffers, others are not. Some events only travel downstream,
* others only upstream. Some events can travel both upstream and downstream.
*
* The events are used to signal special conditions in the datastream such as EOS
* or the start of a new segment. Events are also used to flush the pipeline of
* any pending data.
*
* Most of the event API is used inside plugins. The application usually only
* constructs and uses the seek event API when it wants to perform a seek in the
* pipeline.
* gst_event_new_seek() is usually used to create a seek event and it takes * gst_event_new_seek() is usually used to create a seek event and it takes
* the needed parameters for a seek event. * the needed parameters for a seek event.
* * <example>
* gst_event_new_flush() creates a new flush event. * <title>performing a seek on a pipeline</title>
* <programlisting>
* GstEvent *event;
* gboolean result;
* ...
* // construct a seek event to play the media from second 2 to 5, flush
* // the pipeline to decrease latency.
* event = gst_event_new_seek (1.0,
* GST_FORMAT_TIME,
* GST_SEEK_FLAG_FLUSH,
* GST_SEEK_TYPE_SET, 2 * GST_SECOND,
* GST_SEEK_TYPE_SET, 5 * GST_SECOND);
* ...
* result = gst_element_send_event (pipeline, event);
* if (!result)
* g_warning ("seek failed");
* ...
* </programlisting>
* </example>
*/ */
#include <string.h> /* memcpy */ #include <string.h> /* memcpy */
#include "gst_private.h" #include "gst_private.h"
@ -373,7 +402,7 @@ gst_event_new_eos (void)
* into the stream time again. * into the stream time again.
* *
* The @start_value cannot be -1, the @stop_value can be -1. If there * The @start_value cannot be -1, the @stop_value can be -1. If there
* is a valid @stop_value given, it must be smaller than @start_value. * is a valid @stop_value given, it must be greater or equal than @start_value.
* *
* After a newsegment event, the buffer stream time is calculated with: * After a newsegment event, the buffer stream time is calculated with:
* *
@ -649,7 +678,7 @@ gst_event_parse_qos (GstEvent * event, gdouble * proportion,
* Allocate a new seek event with the given parameters. * Allocate a new seek event with the given parameters.
* *
* The seek event configures playback of the pipeline from * The seek event configures playback of the pipeline from
* @cur to @stop at the speed given in @rate. * @cur to @stop at the speed given in @rate, also called a segment.
* The @cur and @stop values are expressed in format @format. * The @cur and @stop values are expressed in format @format.
* *
* A @rate of 1.0 means normal playback rate, 2.0 means double speed. * A @rate of 1.0 means normal playback rate, 2.0 means double speed.
@ -657,8 +686,9 @@ gst_event_parse_qos (GstEvent * event, gdouble * proportion,
* rate is not allowed. * rate is not allowed.
* *
* @cur_type and @stop_type specify how to adjust the current and stop * @cur_type and @stop_type specify how to adjust the current and stop
* time, relative or absolute. A type of #GST_EVENT_TYPE_NONE means that * time, relative or absolute. A type of #GST_SEEK_TYPE_NONE means that
* the position should not be updated. * the position should not be updated. The currently configured playback
* segment can be queried with #GST_QUERY_SEGMENT.
* *
* Returns: A new seek event. * Returns: A new seek event.
*/ */

View file

@ -232,9 +232,7 @@ typedef enum {
* be considerably slower for some formats. * be considerably slower for some formats.
* @GST_SEEK_FLAG_KEY_UNIT: seek to the nearest keyframe. This might be * @GST_SEEK_FLAG_KEY_UNIT: seek to the nearest keyframe. This might be
* faster but less accurate. * faster but less accurate.
* @GST_SEEK_FLAG_SEGMENT: perform a segment seek. After the playback * @GST_SEEK_FLAG_SEGMENT: perform a segment seek.
* of the segment completes, no EOS will be emmited but a
* SEGMENT_DONE message will be posted on the bus.
* *
* Flags to be used with #gst_element_seek() or #gst_event_new_seek() * Flags to be used with #gst_element_seek() or #gst_event_new_seek()
* *
@ -244,6 +242,12 @@ typedef enum {
* An accurate seek might be slower for formats that don't have any indexes * An accurate seek might be slower for formats that don't have any indexes
* or timestamp markers in the stream. Specifying this flag might require a * or timestamp markers in the stream. Specifying this flag might require a
* complete scan of the file in those cases. * complete scan of the file in those cases.
*
* When perfoming a segment seek: after the playback of the segment completes,
* no EOS will be emmited byt the element that performed the seek but a SEGMENT_DONE
* message will be posted on the bus by the element. When this message is posted, it is
* possible to send a new seek event to continue playback. With this seek method it
* is possible to perform seemless looping or simple linear editing.
*/ */
typedef enum { typedef enum {
GST_SEEK_FLAG_NONE = 0, GST_SEEK_FLAG_NONE = 0,

View file

@ -55,6 +55,8 @@ typedef struct _GstMessageClass GstMessageClass;
* @GST_MESSAGE_SEGMENT_DONE: pipeline completed playback of a segment. * @GST_MESSAGE_SEGMENT_DONE: pipeline completed playback of a segment.
* @GST_MESSAGE_DURATION: The duration of a pipeline changed. * @GST_MESSAGE_DURATION: The duration of a pipeline changed.
* @GST_MESSAGE_ANY: mask for all of the above messages. * @GST_MESSAGE_ANY: mask for all of the above messages.
*
* The different message types that are available.
*/ */
/* NOTE: keep in sync with quark registration in gstmessage.c */ /* NOTE: keep in sync with quark registration in gstmessage.c */
typedef enum typedef enum
@ -149,9 +151,8 @@ GQuark gst_message_type_to_quark (GstMessageType type);
* gst_message_ref: * gst_message_ref:
* @msg: the message to ref * @msg: the message to ref
* *
* Convinience macro to increase the reference count of the message. * Convinience macro to increase the reference count of the message. Returns the
* * reffed message.
* Returns: the refed message.
*/ */
#define gst_message_ref(msg) GST_MESSAGE (gst_mini_object_ref (GST_MINI_OBJECT (msg))) #define gst_message_ref(msg) GST_MESSAGE (gst_mini_object_ref (GST_MINI_OBJECT (msg)))
/** /**
@ -167,11 +168,9 @@ GQuark gst_message_type_to_quark (GstMessageType type);
* gst_message_copy: * gst_message_copy:
* @msg: the message to copy * @msg: the message to copy
* *
* Creates a copy of the message. * Creates a copy of the message. Returns a copy of the message.
* *
* MT safe * MT safe
*
* Returns: the new message.
*/ */
#define gst_message_copy(msg) GST_MESSAGE (gst_mini_object_copy (GST_MINI_OBJECT (msg))) #define gst_message_copy(msg) GST_MESSAGE (gst_mini_object_copy (GST_MINI_OBJECT (msg)))
/** /**
@ -179,11 +178,9 @@ GQuark gst_message_type_to_quark (GstMessageType type);
* @msg: the message to make writable * @msg: the message to make writable
* *
* Checks if a message is writable. If not, a writable copy is made and * Checks if a message is writable. If not, a writable copy is made and
* returned. * returned. Returns a message (possibly a duplicate) that is writable.
* *
* MT safe * MT safe
*
* Returns: a message (possibly a duplicate) that it writable.
*/ */
#define gst_message_make_writable(msg) GST_MESSAGE (gst_mini_object_make_writable (GST_MINI_OBJECT (msg))) #define gst_message_make_writable(msg) GST_MESSAGE (gst_mini_object_make_writable (GST_MINI_OBJECT (msg)))

View file

@ -118,19 +118,37 @@ typedef enum {
* @ret: a #GstFlowReturn value * @ret: a #GstFlowReturn value
* *
* Macro to test if the given #GstFlowReturn value indicates a fatal * Macro to test if the given #GstFlowReturn value indicates a fatal
* error. * error. This macro is mainly used in elements to decide when an error
* message should be posted on the bus.
*/ */
#define GST_FLOW_IS_FATAL(ret) ((ret) <= GST_FLOW_UNEXPECTED) #define GST_FLOW_IS_FATAL(ret) ((ret) <= GST_FLOW_UNEXPECTED)
G_CONST_RETURN gchar* gst_flow_get_name (GstFlowReturn ret); G_CONST_RETURN gchar* gst_flow_get_name (GstFlowReturn ret);
GQuark gst_flow_to_quark (GstFlowReturn ret); GQuark gst_flow_to_quark (GstFlowReturn ret);
/**
* GstActivateMode:
* @GST_ACTIVATE_NONE: Pad will not handle dataflow
* @GST_ACTIVATE_PUSH: Pad handles dataflow in downstream push mode
* @GST_ACTIVATE_PULL: Pad handles dataflow in upstream pull mode
*
* The status of a GstPad. After activating a pad, which usually happens when the
* parent element goes from READY to PAUSED, the GstActivateMode defines if the
* pad operates in push or pull mode.
*/
typedef enum { typedef enum {
GST_ACTIVATE_NONE, GST_ACTIVATE_NONE,
GST_ACTIVATE_PUSH, GST_ACTIVATE_PUSH,
GST_ACTIVATE_PULL, GST_ACTIVATE_PULL,
} GstActivateMode; } GstActivateMode;
/**
* GST_PAD_MODE_ACTIVATE:
* @mode: a #GstActivateMode
*
* Macro to test if the given #GstActivateMode value indicates that datapassing
* is possible or not.
*/
#define GST_PAD_MODE_ACTIVATE(mode) ((mode) != GST_ACTIVATE_NONE) #define GST_PAD_MODE_ACTIVATE(mode) ((mode) != GST_ACTIVATE_NONE)
/* pad states */ /* pad states */
@ -144,11 +162,25 @@ typedef gboolean (*GstPadActivateModeFunction) (GstPad *pad, gboolean active);
* @pad: the #GstPad that performed the chain. * @pad: the #GstPad that performed the chain.
* @buffer: the #GstBuffer that is chained. * @buffer: the #GstBuffer that is chained.
* *
* A function that will be called when chaining buffers. * A function that will be called on sinkpads when chaining buffers.
* *
* Returns: GST_FLOW_OK for success * Returns: GST_FLOW_OK for success
*/ */
typedef GstFlowReturn (*GstPadChainFunction) (GstPad *pad, GstBuffer *buffer); typedef GstFlowReturn (*GstPadChainFunction) (GstPad *pad, GstBuffer *buffer);
/**
* GstPadGetRangeFunction:
* @pad: the #GstPad to perform the getrange on.
* @offset: the offset of the range
* @length: the length of the range
* @buffer: a memory location to hold the result buffer
*
* This function will be called on sourcepads when a peer element
* request a buffer at the specified offset and length. If this function
* returns GST_FLOW_OK, the result buffer will be stored in @buffer. The
* contents of @buffer is invalid for any other return value.
*
* Returns: GST_FLOW_OK for success
*/
typedef GstFlowReturn (*GstPadGetRangeFunction) (GstPad *pad, guint64 offset, typedef GstFlowReturn (*GstPadGetRangeFunction) (GstPad *pad, guint64 offset,
guint length, GstBuffer **buffer); guint length, GstBuffer **buffer);
@ -178,7 +210,6 @@ typedef gboolean (*GstPadCheckGetRangeFunction) (GstPad *pad);
* Returns: a newly allocated #GList of pads that are linked to the given pad on * Returns: a newly allocated #GList of pads that are linked to the given pad on
* the inside of the parent element. * the inside of the parent element.
* The caller must call g_list_free() on it after use. * The caller must call g_list_free() on it after use.
*
*/ */
typedef GList* (*GstPadIntLinkFunction) (GstPad *pad); typedef GList* (*GstPadIntLinkFunction) (GstPad *pad);
@ -190,7 +221,7 @@ typedef GList* (*GstPadIntLinkFunction) (GstPad *pad);
* *
* The signature of the query types function. * The signature of the query types function.
* *
* Returns: an array of query types * Returns: a constant array of query types
*/ */
typedef const GstQueryType* (*GstPadQueryTypeFunction) (GstPad *pad); typedef const GstQueryType* (*GstPadQueryTypeFunction) (GstPad *pad);
@ -266,7 +297,6 @@ typedef gboolean (*GstPadDispatcherFunction) (GstPad *pad, gpointer data);
* Callback used by gst_pad_set_blocked_async(). Gets called when the blocking * Callback used by gst_pad_set_blocked_async(). Gets called when the blocking
* operation succeeds. * operation succeeds.
*/ */
typedef void (*GstPadBlockCallback) (GstPad *pad, gboolean blocked, gpointer user_data); typedef void (*GstPadBlockCallback) (GstPad *pad, gboolean blocked, gpointer user_data);
/** /**
@ -286,7 +316,7 @@ typedef enum {
/** /**
* GstPadFlags: * GstPadFlags:
* @GST_PAD_BLOCKED: is dataflow on a pad blocked * @GST_PAD_BLOCKED: is dataflow on a pad blocked
* @GST_PAD_FLUSHING: is pad empying buffers * @GST_PAD_FLUSHING: is pad refusing buffers
* @GST_PAD_IN_GETCAPS: GstPadGetCapsFunction() is running now * @GST_PAD_IN_GETCAPS: GstPadGetCapsFunction() is running now
* @GST_PAD_IN_SETCAPS: GstPadSetCapsFunction() is running now * @GST_PAD_IN_SETCAPS: GstPadSetCapsFunction() is running now
* @GST_PAD_FLAG_LAST: offset to define more flags * @GST_PAD_FLAG_LAST: offset to define more flags
@ -471,9 +501,7 @@ GstPad* gst_pad_new_from_template (GstPadTemplate *templ, const gchar *name);
* gst_pad_get_name: * gst_pad_get_name:
* @pad: the pad to get the name from * @pad: the pad to get the name from
* *
* Returns a copy of the name of the pad. * Get a copy of the name of the pad. g_free() after usage.
*
* Returns: the name of the pad. g_free() after usage.
* *
* MT safe. * MT safe.
*/ */
@ -482,11 +510,9 @@ GstPad* gst_pad_new_from_template (GstPadTemplate *templ, const gchar *name);
* gst_pad_get_parent: * gst_pad_get_parent:
* @pad: the pad to get the parent of * @pad: the pad to get the parent of
* *
* Returns the parent of @pad. This function increases the refcount * Get the parent of @pad. This function increases the refcount
* of the parent object so you should gst_object_unref() it after usage. * of the parent object so you should gst_object_unref() it after usage.
* * Can return NULL if the pad did not have a parent.
* Returns: parent of the object, this can be NULL if the pad has no
* parent. unref after usage.
* *
* MT safe. * MT safe.
*/ */

View file

@ -37,6 +37,18 @@ GQuark gst_parse_error_quark (void);
*/ */
#define GST_PARSE_ERROR gst_parse_error_quark () #define GST_PARSE_ERROR gst_parse_error_quark ()
/**
* GstParseError:
* @GST_PARSE_ERROR_SYNTAX: A syntax error occured.
* @GST_PARSE_ERROR_NO_SUCH_ELEMENT: The description contained an unknown element
* @GST_PARSE_ERROR_NO_SUCH_PROPERTY: An element did not have a specified property
* @GST_PARSE_ERROR_LINK: There was an error linking two pads.
* @GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY: There was an error setting a property
* @GST_PARSE_ERROR_EMPTY_BIN: An empty bin was specified.
* @GST_PARSE_ERROR_EMPTY: An empty description was specified
*
* The different parsing errors that can occur.
*/
typedef enum typedef enum
{ {
GST_PARSE_ERROR_SYNTAX, GST_PARSE_ERROR_SYNTAX,

View file

@ -49,10 +49,10 @@
* the function it will acquire the provided lock. * the function it will acquire the provided lock.
* *
* Stopping a task with gst_task_stop() will not immediatly make sure the task is * Stopping a task with gst_task_stop() will not immediatly make sure the task is
* not running anymnore. Use gst_task_join() to make sure the task is completely * not running anymore. Use gst_task_join() to make sure the task is completely
* stopped and the thread is stopped. * stopped and the thread is stopped.
* *
* After creating a GstTask, use gst_object_unref() to free its resources. this can * After creating a GstTask, use gst_object_unref() to free its resources. This can
* only be done it the task is not running anymore. * only be done it the task is not running anymore.
*/ */
@ -132,6 +132,8 @@ gst_task_finalize (GObject * object)
GST_DEBUG ("task %p finalize", task); GST_DEBUG ("task %p finalize", task);
/* task thread cannot be running here since it holds a ref
* to the task so that the finalize could not have happened */
g_cond_free (task->cond); g_cond_free (task->cond);
task->cond = NULL; task->cond = NULL;
@ -174,7 +176,7 @@ gst_task_func (GstTask * task, GstTaskClass * tclass)
g_static_rec_mutex_lock_full (lock, t); g_static_rec_mutex_lock_full (lock, t);
GST_LOCK (task); GST_LOCK (task);
if (task->state == GST_TASK_STOPPED) if (G_UNLIKELY (task->state == GST_TASK_STOPPED))
goto done; goto done;
} }
GST_UNLOCK (task); GST_UNLOCK (task);
@ -260,7 +262,8 @@ gst_task_create (GstTaskFunction func, gpointer data)
* @task: The #GstTask to use * @task: The #GstTask to use
* @mutex: The GMutex to use * @mutex: The GMutex to use
* *
* Set the mutex used by the task. * Set the mutex used by the task. The mutex will be acquired before
* calling the #GstTaskFunction.
* *
* MT safe. * MT safe.
*/ */
@ -312,7 +315,8 @@ gst_task_get_state (GstTask * task)
* gst_task_start: * gst_task_start:
* @task: The #GstTask to start * @task: The #GstTask to start
* *
* Starts @task. * Starts @task. The @task must have a lock associated with it using
* #gst_task_set_lock() or thsi function will return FALSE.
* *
* Returns: TRUE if the task could be started. * Returns: TRUE if the task could be started.
* *
@ -372,7 +376,9 @@ no_lock:
* gst_task_stop: * gst_task_stop:
* @task: The #GstTask to stop * @task: The #GstTask to stop
* *
* Stops @task. * Stops @task. This method merely schedules the task to stop and
* will not wait for the task to have completely stopped. Use
* #gst_task_join() to stop and wait for completion.
* *
* Returns: TRUE if the task could be stopped. * Returns: TRUE if the task could be stopped.
* *
@ -411,7 +417,10 @@ gst_task_stop (GstTask * task)
* gst_task_pause: * gst_task_pause:
* @task: The #GstTask to pause * @task: The #GstTask to pause
* *
* Pauses @task. * Pauses @task. This method can also be called on a task in the
* stopped state, in which case a thread will be started and will remain
* in the paused state. This function does not wait for the task to complete
* the paused state.
* *
* Returns: TRUE if the task could be paused. * Returns: TRUE if the task could be paused.
* *
@ -461,7 +470,8 @@ gst_task_pause (GstTask * task)
* *
* The task will automatically be stopped with this call. * The task will automatically be stopped with this call.
* *
* This function cannot be called from within a task function. * This function cannot be called from within a task function as this
* will cause a deadlock.
* *
* Returns: TRUE if the task could be joined. * Returns: TRUE if the task could be joined.
* *

View file

@ -27,6 +27,13 @@
G_BEGIN_DECLS G_BEGIN_DECLS
/**
* GstTaskFunction:
* @data: user data passed to the function
*
* A function that will repeadedly be called in the thread created by
* a GstTask.
*/
typedef void (*GstTaskFunction) (void *data); typedef void (*GstTaskFunction) (void *data);
/* --- standard type macros --- */ /* --- standard type macros --- */
@ -63,11 +70,41 @@ typedef enum {
*/ */
#define GST_TASK_STATE(task) (GST_TASK_CAST(task)->state) #define GST_TASK_STATE(task) (GST_TASK_CAST(task)->state)
/**
* GST_TASK_GET_COND:
* @task: Task to get the cond of
*
* 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:
* @task: Task to wait for
*
* Wait for the task cond to be signalled
*/
#define GST_TASK_WAIT(task) g_cond_wait(GST_TASK_GET_COND (task), GST_GET_LOCK (task)) #define GST_TASK_WAIT(task) g_cond_wait(GST_TASK_GET_COND (task), GST_GET_LOCK (task))
/**
* GST_TASK_SIGNAL:
* @task: Task to signal
*
* Signal the task cond
*/
#define GST_TASK_SIGNAL(task) g_cond_signal(GST_TASK_GET_COND (task)) #define GST_TASK_SIGNAL(task) g_cond_signal(GST_TASK_GET_COND (task))
/**
* GST_TASK_BROADCAST:
* @task: Task to broadcast
*
* 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:
* @task: Task to get the lock of
*
* 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)
/** /**

View file

@ -1640,7 +1640,7 @@ gst_element_query_position (GstElement * element, GstFormat * format,
* @element: a #GstElement to invoke the duration query on. * @element: a #GstElement to invoke the duration query on.
* @format: a pointer to the #GstFormat asked for. * @format: a pointer to the #GstFormat asked for.
* On return contains the #GstFormat used. * On return contains the #GstFormat used.
* @cur: A location in which to store the total duration, or NULL. * @duration: A location in which to store the total duration, or NULL.
* *
* Queries an element for the total stream duration. * Queries an element for the total stream duration.
* *
@ -2411,7 +2411,7 @@ gst_pad_query_position (GstPad * pad, GstFormat * format, gint64 * cur)
* @pad: a #GstPad to invoke the duration query on. * @pad: a #GstPad to invoke the duration query on.
* @format: a pointer to the #GstFormat asked for. * @format: a pointer to the #GstFormat asked for.
* On return contains the #GstFormat used. * On return contains the #GstFormat used.
* @cur: A location in which to store the total duration, or NULL. * @duration: A location in which to store the total duration, or NULL.
* *
* Queries a pad for the total stream duration. * Queries a pad for the total stream duration.
* *

View file

@ -476,9 +476,6 @@ gboolean g_static_rec_cond_timed_wait (GCond *cond,
#endif #endif
/* element functions */ /* element functions */
GstFlowReturn gst_element_abort_preroll (GstElement *element);
GstFlowReturn gst_element_finish_preroll (GstElement *element, GstPad *pad);
void gst_element_create_all_pads (GstElement *element); void gst_element_create_all_pads (GstElement *element);
GstPad* gst_element_get_compatible_pad (GstElement *element, GstPad *pad, GstPad* gst_element_get_compatible_pad (GstElement *element, GstPad *pad,
const GstCaps *caps); const GstCaps *caps);