<FILE>gstbin</FILE>
<TITLE>GstBin</TITLE>
GstBin
+GstBinClass
GstBinFlags
gst_bin_new
<FILE>gstelement</FILE>
<TITLE>GstElement</TITLE>
GstElement
+GstElementClass
GST_NUM_STATES
GST_STATE
GST_STATE_PENDING
gst_element_get_managing_bin
gst_element_no_more_pads
<SUBSECTION Standard>
-GstElementClass
GST_ELEMENT
GST_IS_ELEMENT
GST_ELEMENT_CLASS
<FILE>gstbasesrc</FILE>
<TITLE>GstBaseSrc</TITLE>
GstBaseSrc
-<SUBSECTION Standard>
GstBaseSrcClass
+<SUBSECTION Standard>
GST_BASESRC
GST_IS_BASESRC
GST_TYPE_BASESRC
</para>
+<!-- ##### STRUCT GstBaseSrcClass ##### -->
+<para>
+
+</para>
+
+@parent_class:
+@get_caps:
+@set_caps:
+@start:
+@stop:
+@get_times:
+@get_size:
+@is_seekable:
+@unlock:
+@event:
+@create:
+
@gstbin: the object which received the signal.
@arg1: the element that was removed from the bin.
+<!-- ##### STRUCT GstBinClass ##### -->
+<para>
+
+</para>
+
+@parent_class:
+@add_element:
+@remove_element:
+
<!-- ##### ENUM GstBinFlags ##### -->
<para>
@current_state:
@pending_state:
@state_error:
+@no_preroll:
@manager:
@bus:
@scheduler:
@GST_STATE_FAILURE: the state of the element could not be changed
@GST_STATE_SUCCESS: the state of the element has already be changed
@GST_STATE_ASYNC: the state of the element will change in the near future
+@GST_STATE_NO_PREROLL:
<!-- ##### ENUM GstRank ##### -->
<para>
* 2000 Wim Taymans <wtay@chello.be>
* 2005 Wim Taymans <wim@fluendo.com>
*
- * gstbasesrc.h:
+ * gstbasesrc.h:
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
struct _GstBaseSrc {
GstElement element;
+ GstPad *srcpad;
- GstPad *srcpad;
-
- /*< protected >*/ /* with LIVE_LOCK */
+ /* only for subclass implementations */
+ /* MT-protected (with LIVE_LOCK) */
GMutex *live_lock;
GCond *live_cond;
gboolean is_live;
gboolean live_running;
- /*< protected >*/ /* with LOCK */
- gint blocksize; /* size of buffers when operating push based */
- gboolean has_loop; /* some scheduling properties */
+
+ /* MT-protected (with LOCK) */
+ gint blocksize; /* size of buffers when operating push based */
+ gboolean has_loop; /* some scheduling properties */
gboolean has_getrange;
gboolean seekable;
gboolean random_access;
- GstClockID clock_id; /* for syncing */
+ GstClockID clock_id; /* for syncing */
GstClockTime end_time;
- /* with STREAM_LOCK */
- gint64 segment_start; /* start and end positions for seeking */
+ /* MT-protected (with STREAM_LOCK) */
+ gint64 segment_start; /* start and end positions for seeking */
gint64 segment_end;
gboolean segment_loop;
- guint64 offset; /* current offset in the resource */
- guint64 size; /* total size of the resource */
+ guint64 offset; /* current offset in the resource */
+ guint64 size; /* total size of the resource */
};
+/**
+ * _GstBaseSrcClass:
+ * @create: ask the subclass to create a buffer with offset and size
+ * @start: start processing
+ */
struct _GstBaseSrcClass {
GstElementClass parent_class;
gboolean (*event) (GstBaseSrc *src, GstEvent *event);
/* ask the subclass to create a buffer with offset and size */
- GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size,
+ GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size,
GstBuffer **buf);
};
/* GStreamer
- *
+ *
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2004 Wim Taymans <wim@fluendo.com>
*
/* set the index on all elements in this bin
*
- * MT safe
+ * MT safe
*/
#ifndef GST_DISABLE_INDEX
static void
/* set the clock on all elements in this bin
*
- * MT safe
+ * MT safe
*/
static void
gst_bin_set_clock_func (GstElement * element, GstClock * clock)
/* get the clock for this bin by asking all of the children in this bin
*
- * MT safe
+ * MT safe
*/
static GstClock *
gst_bin_get_clock_func (GstElement * element)
/* set the bus on all of the children in this bin
*
- * MT safe
+ * MT safe
*/
static void
gst_bin_set_bus (GstElement * element, GstBus * bus)
/* set the scheduler on all of the children in this bin
*
- * MT safe
+ * MT safe
*/
static void
gst_bin_set_scheduler (GstElement * element, GstScheduler * sched)
/* set the manager on all of the children in this bin
*
- * MT safe
+ * MT safe
*/
static void
gst_bin_set_manager (GstElement * element, GstPipeline * manager)
/* add an element to this bin
*
- * MT safe
+ * MT safe
*/
static gboolean
gst_bin_add_func (GstBin * bin, GstElement * element)
* Adds the given element to the bin. Sets the element's parent, and thus
* takes ownership of the element. An element can only be added to one bin.
*
+ * MT safe.
+ *
* Returns: TRUE if the element could be added, FALSE on wrong parameters or
* the bin does not want to accept the element.
- *
- * MT safe.
*/
gboolean
gst_bin_add (GstBin * bin, GstElement * element)
* want the element to still exist after removing, you need to call
* #gst_object_ref before removing it from the bin.
*
+ * MT safe.
+ *
* Returns: TRUE if the element could be removed, FALSE on wrong parameters or
* the bin does not want to remove the element.
- *
- * MT safe.
*/
gboolean
gst_bin_remove (GstBin * bin, GstElement * element)
* gst_bin_iterate_elements:
* @bin: #Gstbin to iterate the elements of
*
- * Get an iterator for the elements in this bin.
- * Each element will have its refcount increased, so unref
- * after usage.
+ * Get an iterator for the elements in this bin.
+ * Each element will have its refcount increased, so unref
+ * after use.
+ *
+ * MT safe.
*
* Returns: a #GstIterator of #GstElements. gst_iterator_free after
* use. returns NULL when passing bad parameters.
- *
- * MT safe.
*/
GstIterator *
gst_bin_iterate_elements (GstBin * bin)
GST_LOCK (bin);
/* add ref because the iterator refs the bin. When the iterator
- * is freed it will unref the bin again using the provided dispose
+ * is freed it will unref the bin again using the provided dispose
* function. */
gst_object_ref (GST_OBJECT (bin));
result = gst_iterator_new_list (GST_GET_LOCK (bin),
* gst_bin_iterate_recurse:
* @bin: #Gstbin to iterate the elements of
*
- * Get an iterator for the elements in this bin.
- * Each element will have its refcount increased, so unref
- * after usage. This iterator recurses into GstBin children.
+ * Get an iterator for the elements in this bin.
+ * Each element will have its refcount increased, so unref
+ * after use. This iterator recurses into GstBin children.
+ *
+ * MT safe.
*
* Returns: a #GstIterator of #GstElements. gst_iterator_free after
* use. returns NULL when passing bad parameters.
- *
- * MT safe.
*/
GstIterator *
gst_bin_iterate_recurse (GstBin * bin)
GST_LOCK (bin);
/* add ref because the iterator refs the bin. When the iterator
- * is freed it will unref the bin again using the provided dispose
+ * is freed it will unref the bin again using the provided dispose
* function. */
gst_object_ref (GST_OBJECT (bin));
result = gst_iterator_new_list (GST_GET_LOCK (bin),
* @bin: #Gstbin to iterate on
*
* Get an iterator for the sink elements in this bin.
- * Each element will have its refcount increased, so unref
- * after usage.
+ * Each element will have its refcount increased, so unref
+ * after use.
*
* The sink elements are those without any linked srcpads.
*
- * Returns: a #GstIterator of #GstElements. gst_iterator_free after use.
- *
* MT safe.
+ *
+ * Returns: a #GstIterator of #GstElements. gst_iterator_free after use.
*/
GstIterator *
gst_bin_iterate_sinks (GstBin * bin)
* 1) check state of all children with 0 timeout to find ERROR and
* NO_PREROLL elements. return if found.
* 2) perform full blocking wait with requested timeout.
- *
+ *
* 2) cannot be performed when 1) returns results as the sinks might
* not be able to complete the state change making 2) block forever.
*
gst_object_unref (GST_OBJECT (peer_elem));
g_queue_delete_link (elem_queue, oldelem);
}
- /* was reffed before pushing on the queue by the
+ /* was reffed before pushing on the queue by the
* gst_object_get_parent() call we used to get the element. */
g_queue_push_tail (elem_queue, peer_elem);
} else {
* Get the element with the given name from this bin. This
* function recurses into subbins.
*
+ * MT safe.
+ *
* Returns: the element with the given name. Returns NULL if the
* element is not found or when bad parameters were given. Unref after
- * usage.
- *
- * MT safe.
+ * use.
*/
GstElement *
gst_bin_get_by_name (GstBin * bin, const gchar * name)
* @bin: #Gstbin to search
* @name: the element name to search for
*
+ * MT safe.
+ *
* Get the element with the given name from this bin. If the
* element is not found, a recursion is performed on the parent bin.
*
* Returns: the element with the given name or NULL when the element
- * was not found or bad parameters were given. Unref after usage.
- *
- * MT safe.
+ * was not found or bad parameters were given. Unref after use.
*/
GstElement *
gst_bin_get_by_name_recurse_up (GstBin * bin, const gchar * name)
* interface. If such an element is found, it returns the element. You can
* cast this element to the given interface afterwards.
* If you want all elements that implement the interface, use
- * gst_bin_iterate_all_by_interface(). The function recurses bins inside bins.
- *
- * Returns: An element inside the bin implementing the interface. Unref after
- * usage.
+ * gst_bin_iterate_all_by_interface(). The function recurses inside bins.
*
* MT safe.
+ *
+ * Returns: An #GstElement inside the bin implementing the interface.
+ * Unref after use.
*/
GstElement *
gst_bin_get_by_interface (GstBin * bin, GType interface)
* Looks for all elements inside the bin that implements the given
* interface. You can safely cast all returned elements to the given interface.
* The function recurses bins inside bins. The iterator will return a series
- * of #GstElement that should be unreffed after usage.
- *
- * Returns: An iterator for the elements inside the bin implementing the interface.
+ * of #GstElement that should be unreffed after use.
*
* MT safe.
+ *
+ * Returns: A #GstIterator for the elements inside the bin implementing the
+ * given interface.
*/
GstIterator *
gst_bin_iterate_all_by_interface (GstBin * bin, GType interface)
/**
* GstBinFlags:
- * @GST_BIN_FLAG_MANAGER: this bin is a manager of child elements, i.e.
- * a pipeline or thread.
- * @GST_BIN_SELF_SCHEDULABLE: the bin iterates itself.
- * @GST_BIN_FLAG_PREFER_COTHREADS: we prefer to have cothreads when its
- * an option, over chain-based.
- * @GST_BIN_FLAG_FIXED_CLOCK: bin has one clock that cannot be changed.
- * @GST_BIN_STATE_LOCKED: indicator that we are in a non-recursive
- * state-change on the bin, or that kids should not change parent state.
- * Both are internally used to prevent infinitely recursive loops of
- * state changes. Since they are mutually exclusive and serve the same
- * purpose, we use the same flag for them.
- * @GST_BIN_FLAG_LAST: the last enum in the series of flags in a bin,
- * derived classes can use this as first value in a list of flags.
+ * @GST_BIN_FLAG_LAST: the last enum in the series of flags for bins.
+ * Derived classes can use this as first value in a list of flags.
*
* GstBinFlags are a set of flags specific to bins. Most are set/used
* internally. They can be checked using the GST_FLAG_IS_SET () macro,
struct _GstBinClass {
GstElementClass parent_class;
- /*< public >*/
+ /*< private >*/
/* signals */
void (*element_added) (GstBin *bin, GstElement *child);
void (*element_removed) (GstBin *bin, GstElement *child);
- /*< protected >*/
- /* vtable */
+ /*< public >*/
+ /* virtual methods for subclasses */
gboolean (*add_element) (GstBin *bin, GstElement *element);
gboolean (*remove_element) (GstBin *bin, GstElement *element);
#define GST_ELEMENT_CAST(obj) ((GstElement*)(obj))
#define GST_NUM_STATES 4
-/* NOTE: this probably should be done with an #ifdef to decide
+/* NOTE: this probably should be done with an #ifdef to decide
* whether to safe-cast or to just do the non-checking cast.
*/
#define GST_STATE(obj) (GST_ELEMENT(obj)->current_state)
* @el: the element that throws the error
* @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #GstError)
* @code: error code defined for that domain (see #GstError)
- * @message: the message to display (format string and args enclosed in round brackets)
- * @debug: debugging information for the message (format string and args enclosed in round brackets)
+ * @message: the message to display (format string and args enclosed in
+ parentheses)
+ * @debug: debugging information for the message (format string and args
+ enclosed in parentheses)
*
* Utility function that elements can use in case they encountered a fatal
* data processing error. The pipeline will throw an error signal and the
struct _GstElement
{
- GstObject object;
+ GstObject object;
/*< public >*/ /* with STATE_LOCK */
/* element state */
gboolean no_preroll; /* flag is set when the element cannot preroll */
/*< public >*/ /* with LOCK */
/* element manager */
- GstPipeline *manager;
- GstBus *bus;
- GstScheduler *scheduler;
+ GstPipeline *manager;
+ GstBus *bus;
+ GstScheduler *scheduler;
/* allocated clock */
GstClock *clock;
- GstClockTimeDiff base_time; /* NULL/READY: 0 - PAUSED: current time - PLAYING: difference to clock */
+ GstClockTimeDiff base_time; /* NULL/READY: 0 - PAUSED: current time - PLAYING: difference to clock */
/* element pads, these lists can only be iterated while holding
* the LOCK or checking the cookie after each LOCK. */
/*< public >*/
/* the element details */
- GstElementDetails details;
+ GstElementDetails details;
/* factory that the element was created from */
GstElementFactory *elementfactory;
gint numpadtemplates;
guint32 pad_templ_cookie;
+ /*< private >*/
/* signal callbacks */
void (*state_change) (GstElement *element, GstElementState old, GstElementState state);
void (*new_pad) (GstElement *element, GstPad *pad);
void (*pad_removed) (GstElement *element, GstPad *pad);
void (*no_more_pads) (GstElement *element);
- /*< protected >*/
- /* vtable */
+ /*< public >*/
+ /* virtual methods for subclasses */
/* request/release pads */
GstPad* (*request_new_pad) (GstElement *element, GstPadTemplate *templ, const gchar* name);
void (*release_pad) (GstElement *element, GstPad *pad);
/* state changes */
- GstElementStateReturn (*get_state) (GstElement * element, GstElementState * state,
- GstElementState * pending, GTimeVal * timeout);
+ GstElementStateReturn (*get_state) (GstElement * element, GstElementState * state,
+ GstElementState * pending, GTimeVal * timeout);
GstElementStateReturn (*change_state) (GstElement *element);
/* manager */
- void (*set_manager) (GstElement * element, GstPipeline * pipeline);
- void (*set_bus) (GstElement * element, GstBus * bus);
+ void (*set_manager) (GstElement * element, GstPipeline * pipeline);
+ void (*set_bus) (GstElement * element, GstBus * bus);
void (*set_scheduler) (GstElement *element, GstScheduler *scheduler);
/* set/get clocks */
/* query functions */
gboolean (*send_event) (GstElement *element, GstEvent *event);
- const GstQueryType* (*get_query_types) (GstElement *element);
+ const GstQueryType* (*get_query_types) (GstElement *element);
gboolean (*query) (GstElement *element, GstQuery *query);
/*< private >*/
/* clocking */
gboolean gst_element_requires_clock (GstElement *element);
gboolean gst_element_provides_clock (GstElement *element);
-GstClock* gst_element_get_clock (GstElement *element);
-void gst_element_set_clock (GstElement *element, GstClock *clock);
+GstClock* gst_element_get_clock (GstElement *element);
+void gst_element_set_clock (GstElement *element, GstClock *clock);
/* indexes */
gboolean gst_element_is_indexable (GstElement *element);
GstIndex* gst_element_get_index (GstElement *element);
/* manager and tasks */
-void gst_element_set_manager (GstElement * element, GstPipeline * pipeline);
-GstPipeline * gst_element_get_manager (GstElement * element);
-void gst_element_set_bus (GstElement * element, GstBus * bus);
-GstBus * gst_element_get_bus (GstElement * element);
+void gst_element_set_manager (GstElement * element, GstPipeline * pipeline);
+GstPipeline * gst_element_get_manager (GstElement * element);
+void gst_element_set_bus (GstElement * element, GstBus * bus);
+GstBus * gst_element_get_bus (GstElement * element);
void gst_element_set_scheduler (GstElement *element, GstScheduler *sched);
GstScheduler* gst_element_get_scheduler (GstElement *element);
GstPad* gst_element_get_request_pad (GstElement *element, const gchar *name);
void gst_element_release_request_pad (GstElement *element, GstPad *pad);
-GstIterator * gst_element_iterate_pads (GstElement * element);
+GstIterator * gst_element_iterate_pads (GstElement * element);
/* event/query/format stuff */
gboolean gst_element_send_event (GstElement *element, GstEvent *event);
gboolean gst_element_query (GstElement *element, GstQuery *query);
/* messages */
-gboolean gst_element_post_message (GstElement * element, GstMessage * message);
+gboolean gst_element_post_message (GstElement * element, GstMessage * message);
/* error handling */
gchar * _gst_element_error_printf (const gchar *format, ...);
-void gst_element_message_full (GstElement * element, GstMessageType type,
- GQuark domain, gint code, gchar * text,
+void gst_element_message_full (GstElement * element, GstMessageType type,
+ GQuark domain, gint code, gchar * text,
gchar * debug, const gchar * file,
- const gchar * function, gint line);
+ const gchar * function, gint line);
/* state management */
gboolean gst_element_is_locked_state (GstElement *element);
gboolean gst_element_set_locked_state (GstElement *element, gboolean locked_state);
gboolean gst_element_sync_state_with_parent (GstElement *element);
-GstElementStateReturn gst_element_get_state (GstElement * element,
+GstElementStateReturn gst_element_get_state (GstElement * element,
GstElementState * state,
- GstElementState * pending,
+ GstElementState * pending,
GTimeVal * timeout);
GstElementStateReturn gst_element_set_state (GstElement *element, GstElementState state);
-void gst_element_abort_state (GstElement * element);
-void gst_element_commit_state (GstElement * element);
-void gst_element_lost_state (GstElement * element);
+void gst_element_abort_state (GstElement * element);
+void gst_element_commit_state (GstElement * element);
+void gst_element_lost_state (GstElement * element);
/* factory management */
GstElementFactory* gst_element_get_factory (GstElement *element);
* 2000 Wim Taymans <wtay@chello.be>
* 2005 Wim Taymans <wim@fluendo.com>
*
- * gstbasesrc.h:
+ * gstbasesrc.h:
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
struct _GstBaseSrc {
GstElement element;
+ GstPad *srcpad;
- GstPad *srcpad;
-
- /*< protected >*/ /* with LIVE_LOCK */
+ /* only for subclass implementations */
+ /* MT-protected (with LIVE_LOCK) */
GMutex *live_lock;
GCond *live_cond;
gboolean is_live;
gboolean live_running;
- /*< protected >*/ /* with LOCK */
- gint blocksize; /* size of buffers when operating push based */
- gboolean has_loop; /* some scheduling properties */
+
+ /* MT-protected (with LOCK) */
+ gint blocksize; /* size of buffers when operating push based */
+ gboolean has_loop; /* some scheduling properties */
gboolean has_getrange;
gboolean seekable;
gboolean random_access;
- GstClockID clock_id; /* for syncing */
+ GstClockID clock_id; /* for syncing */
GstClockTime end_time;
- /* with STREAM_LOCK */
- gint64 segment_start; /* start and end positions for seeking */
+ /* MT-protected (with STREAM_LOCK) */
+ gint64 segment_start; /* start and end positions for seeking */
gint64 segment_end;
gboolean segment_loop;
- guint64 offset; /* current offset in the resource */
- guint64 size; /* total size of the resource */
+ guint64 offset; /* current offset in the resource */
+ guint64 size; /* total size of the resource */
};
+/**
+ * _GstBaseSrcClass:
+ * @create: ask the subclass to create a buffer with offset and size
+ * @start: start processing
+ */
struct _GstBaseSrcClass {
GstElementClass parent_class;
gboolean (*event) (GstBaseSrc *src, GstEvent *event);
/* ask the subclass to create a buffer with offset and size */
- GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size,
+ GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size,
GstBuffer **buf);
};