gstelement.h   gstelement.h 
skipping to change at line 33 skipping to change at line 33
#ifndef __GST_ELEMENT_H__ #ifndef __GST_ELEMENT_H__
#define __GST_ELEMENT_H__ #define __GST_ELEMENT_H__
/* gstelement.h and gstelementfactory.h include eachother */ /* gstelement.h and gstelementfactory.h include eachother */
typedef struct _GstElement GstElement; typedef struct _GstElement GstElement;
typedef struct _GstElementClass GstElementClass; typedef struct _GstElementClass GstElementClass;
/* gstmessage.h needs State */ /* gstmessage.h needs State */
/** /**
* GstState: * GstState:
* @GST_STATE_VOID_PENDING : no pending state. * @GST_STATE_VOID_PENDING: no pending state.
* @GST_STATE_NULL : the NULL state or initial state of an elem * @GST_STATE_NULL : the NULL state or initial state of an element.
ent * @GST_STATE_READY : the element is ready to go to PAUSED.
* @GST_STATE_READY : the element is ready to go to PAUSED * @GST_STATE_PAUSED : the element is PAUSED, it is ready to accept an
* @GST_STATE_PAUSED : the element is PAUSED d
* @GST_STATE_PLAYING : the element is PLAYING * process data. Sink elements however only accept
one
* buffer and then block.
* @GST_STATE_PLAYING : the element is PLAYING, the #GstClock is runnin
g and
* the data is flowing.
* *
* The posible states an element can be in. * The possible states an element can be in. States can be changed using
* gst_element_set_state() and checked using gst_element_get_state().
*/ */
typedef enum { typedef enum {
GST_STATE_VOID_PENDING = 0, GST_STATE_VOID_PENDING = 0,
GST_STATE_NULL = 1, GST_STATE_NULL = 1,
GST_STATE_READY = 2, GST_STATE_READY = 2,
GST_STATE_PAUSED = 3, GST_STATE_PAUSED = 3,
GST_STATE_PLAYING = 4 GST_STATE_PLAYING = 4
} GstState; } GstState;
#include <gst/gstconfig.h> #include <gst/gstconfig.h>
skipping to change at line 65 skipping to change at line 69
#include <gst/gstplugin.h> #include <gst/gstplugin.h>
#include <gst/gstpluginfeature.h> #include <gst/gstpluginfeature.h>
#include <gst/gstindex.h> #include <gst/gstindex.h>
#include <gst/gstindexfactory.h> #include <gst/gstindexfactory.h>
#include <gst/gstiterator.h> #include <gst/gstiterator.h>
#include <gst/gstmessage.h> #include <gst/gstmessage.h>
#include <gst/gsttaglist.h> #include <gst/gsttaglist.h>
G_BEGIN_DECLS G_BEGIN_DECLS
#define GST_TYPE_ELEMENT (gst_element_get_type ()) #define GST_TYPE_ELEMENT (gst_element_get_type ())
#define GST_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), #define GST_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GST_TYPE_ELEMENT)) GST_TYPE_ELEMENT))
#define GST_IS_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G #define GST_IS_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
ST_TYPE_ELEMENT)) GST_TYPE_ELEMENT))
#define GST_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G #define GST_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
ST_TYPE_ELEMENT, GstElementClass)) GST_TYPE_ELEMENT, GstElementClass))
#define GST_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), #define GST_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GST_TYPE_ELEMENT, GstElement)) GST_TYPE_ELEMENT, GstElement))
#define GST_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G #define GST_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
ST_TYPE_ELEMENT, GstElementClass)) GST_TYPE_ELEMENT, GstElementClass))
#define GST_ELEMENT_CAST(obj) ((GstElement*)(obj)) #define GST_ELEMENT_CAST(obj) ((GstElement*)(obj))
/** /**
* GstStateChangeReturn: * GstStateChangeReturn:
* @GST_STATE_CHANGE_FAILURE : the state change failed * @GST_STATE_CHANGE_FAILURE : the state change failed
* @GST_STATE_CHANGE_SUCCESS : the state change succeeded * @GST_STATE_CHANGE_SUCCESS : the state change succeeded
* @GST_STATE_CHANGE_ASYNC : the state change will happen asynchronousl y * @GST_STATE_CHANGE_ASYNC : the state change will happen asynchronousl y
* @GST_STATE_CHANGE_NO_PREROLL: the state change succeeded but the element * @GST_STATE_CHANGE_NO_PREROLL: the state change succeeded but the element
* cannot produce data in PAUSED. This typica * cannot produce data in %GST_STATE_PAUSED.
lly * This typically happens with live sources.
* happens with live sources.
* *
* The possible return values from a state change function. Only * The possible return values from a state change function. Only
* @GST_STATE_CHANGE_FAILURE is a real failure. * @GST_STATE_CHANGE_FAILURE is a real failure.
*/ */
typedef enum { typedef enum {
GST_STATE_CHANGE_FAILURE = 0, GST_STATE_CHANGE_FAILURE = 0,
GST_STATE_CHANGE_SUCCESS = 1, GST_STATE_CHANGE_SUCCESS = 1,
GST_STATE_CHANGE_ASYNC = 2, GST_STATE_CHANGE_ASYNC = 2,
GST_STATE_CHANGE_NO_PREROLL = 3 GST_STATE_CHANGE_NO_PREROLL = 3
} GstStateChangeReturn; } GstStateChangeReturn;
skipping to change at line 102 skipping to change at line 106
/* 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. * whether to safe-cast or to just do the non-checking cast.
*/ */
/** /**
* GST_STATE: * GST_STATE:
* @elem: a #GstElement to return state for. * @elem: a #GstElement to return state for.
* *
* This macro returns the current #GstState of the element. * This macro returns the current #GstState of the element.
*/ */
#define GST_STATE(elem) (GST_ELEMENT_CAST(elem)->cur rent_state) #define GST_STATE(elem) (GST_ELEMENT_CAST(elem)->current_st ate)
/** /**
* GST_STATE_NEXT: * GST_STATE_NEXT:
* @elem: a #GstElement to return the next state for. * @elem: a #GstElement to return the next state for.
* *
* This macro returns the next #GstState of the element. * This macro returns the next #GstState of the element.
*/ */
#define GST_STATE_NEXT(elem) (GST_ELEMENT_CAST(elem)->next_state) #define GST_STATE_NEXT(elem) (GST_ELEMENT_CAST(elem)->next_state )
/** /**
* GST_STATE_PENDING: * GST_STATE_PENDING:
* @elem: a #GstElement to return the pending state for. * @elem: a #GstElement to return the pending state for.
* *
* This macro returns the currently pending #GstState of the element. * This macro returns the currently pending #GstState of the element.
*/ */
#define GST_STATE_PENDING(elem) (GST_ELEMENT_CAST(elem)->pen ding_state) #define GST_STATE_PENDING(elem) (GST_ELEMENT_CAST(elem)->pending_st ate)
/** /**
* GST_STATE_TARGET: * GST_STATE_TARGET:
* @elem: a #GstElement to return the target state for. * @elem: a #GstElement to return the target state for.
* *
* This macro returns the target #GstState of the element. * This macro returns the target #GstState of the element.
* *
* Since: 0.10.13 * Since: 0.10.13
*/ */
#define GST_STATE_TARGET(elem) (GST_ELEMENT_CAST(elem)->abidata.ABI .target_state) #define GST_STATE_TARGET(elem) (GST_ELEMENT_CAST(elem)->abidata.AB I.target_state)
/** /**
* GST_STATE_RETURN: * GST_STATE_RETURN:
* @elem: a #GstElement to return the last state result for. * @elem: a #GstElement to return the last state result for.
* *
* This macro returns the last #GstStateChangeReturn value. * This macro returns the last #GstStateChangeReturn value.
*/ */
#define GST_STATE_RETURN(elem) (GST_ELEMENT_CAST(elem)->last_return ) #define GST_STATE_RETURN(elem) (GST_ELEMENT_CAST(elem)->last_retur n)
#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: * GST_STATE_GET_NEXT:
* @cur: A starting #GstState * @cur: A starting #GstState
* @pending: A target #GstState * @pending: A target #GstState
* *
* Given a current state @cur and a target state @pending, calculate the ne xt (intermediate) * Given a current state @cur and a target state @pending, calculate the ne xt (intermediate)
* #GstState. * #GstState.
*/ */
#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: * GST_STATE_TRANSITION:
* @cur: A current state * @cur: A current state
* @next: A next state * @next: A next state
* *
* Given a current state @cur and a next state @next, calculate the associa ted * Given a current state @cur and a next state @next, calculate the associa ted
* #GstStateChange transition. * #GstStateChange transition.
*/ */
#define GST_STATE_TRANSITION(cur,next) ((GstStateChange)(((cur)<<3) |(next))) #define GST_STATE_TRANSITION(cur,next) ((GstStateChange)(((cur)<<3 )|(next)))
/** /**
* GST_STATE_TRANSITION_CURRENT: * GST_STATE_TRANSITION_CURRENT:
* @trans: A #GstStateChange * @trans: A #GstStateChange
* *
* Given a state transition @trans, extract the current #GstState. * Given a state transition @trans, extract the current #GstState.
*/ */
#define GST_STATE_TRANSITION_CURRENT(trans) ((GstState)((trans)>>3)) #define GST_STATE_TRANSITION_CURRENT(trans) ((GstState)((trans)>>3))
/** /**
* GST_STATE_TRANSITION_NEXT: * GST_STATE_TRANSITION_NEXT:
* @trans: A #GstStateChange * @trans: A #GstStateChange
* *
* Given a state transition @trans, extract the next #GstState. * Given a state transition @trans, extract the next #GstState.
*/ */
#define GST_STATE_TRANSITION_NEXT(trans) ((GstState)((trans)&0x7)) #define GST_STATE_TRANSITION_NEXT(trans) ((GstState)((trans)&0x7))
/** /**
* GstStateChange: * GstStateChange:
* @GST_STATE_CHANGE_NULL_TO_READY : state change from NULL to READY * @GST_STATE_CHANGE_NULL_TO_READY : state change from NULL to READY.
* @GST_STATE_CHANGE_READY_TO_PAUSED : state change from READY to PAUSED * <itemizedlist>
* @GST_STATE_CHANGE_PAUSED_TO_PLAYING: state change from PAUSED to PLAYING * <listitem><para>
* @GST_STATE_CHANGE_PLAYING_TO_PAUSED: state change from PLAYING to PAUSED * The element must check if the resources it needs are available. Devi
* @GST_STATE_CHANGE_PAUSED_TO_READY : state change from PAUSED to READY ce
* @GST_STATE_CHANGE_READY_TO_NULL : state change from READY to NULL * sinks and -sources typically try to probe the device to constrain th
* eir
* The different (interesting) state changes that are passed to the * caps.
* state change functions of elements. * </para></listitem>
* <listitem><para>
* The element opens the device (in case feature need to be probed).
* </para></listitem>
* </itemizedlist>
* @GST_STATE_CHANGE_READY_TO_PAUSED : state change from READY to PAUSED.
* <itemizedlist>
* <listitem><para>
* The element pads are activated in order to receive data in PAUSED.
* Streaming threads are started.
* </para></listitem>
* <listitem><para>
* Some elements might need to return ASYNC and complete the state chan
ge
* when they have enough information. It is a requirement for sinks to
* return ASYNC and complete the state change when they receive the fir
st
* buffer or EOS event (preroll). Sinks also block the dataflow when in
* PAUSED.
* </para></listitem>
* <listitem><para>
* A pipeline resets the running_time to 0.
* </para></listitem>
* <listitem><para>
* Live sources return NO_PREROLL and don't generate data.
* </para></listitem>
* </itemizedlist>
* @GST_STATE_CHANGE_PAUSED_TO_PLAYING: state change from PAUSED to PLAYING
.
* <itemizedlist>
* <listitem><para>
* Most elements ignore this state change.
* </para></listitem>
* <listitem><para>
* The pipeline selects a clock and distributes this to all the childre
n
* before setting them to PLAYING. This means that it is only alowed to
* synchronize on the clock in the PLAYING state.
* </para></listitem>
* <listitem><para>
* The pipeline uses the clock and the running_time to calculate the
* base_time. The base_time is distributed to all children when perform
ing
* the state change.
* </para></listitem>
* <listitem><para>
* Sink elements stop blocking on the preroll buffer or event and start
* rendering the data.
* </para></listitem>
* <listitem><para>
* Sinks can post the EOS message in the PLAYING state. It is not allow
ed to
* post EOS when not in the PLAYING state.
* </para></listitem>
* <listitem><para>
* While streaming in PAUSED or PLAYING elements can create and remove
* sometimes pads.
* </para></listitem>
* <listitem><para>
* Live sources start generating data and return SUCCESS.
* </para></listitem>
* </itemizedlist>
* @GST_STATE_CHANGE_PLAYING_TO_PAUSED: state change from PLAYING to PAUSED
.
* <itemizedlist>
* <listitem><para>
* Most elements ignore this state change.
* </para></listitem>
* <listitem><para>
* The pipeline calculates the running_time based on the last selected
clock
* and the base_time. It stores this information to continue playback w
hen
* going back to the PLAYING state.
* </para></listitem>
* <listitem><para>
* Sinks unblock any clock wait calls.
* </para></listitem>
* <listitem><para>
* When a sink does not have a pending buffer to play, it returns ASYNC
from
* this state change and completes the state change when it receives a
new
* buffer or an EOS event.
* </para></listitem>
* <listitem><para>
* Any queued EOS messages are removed since they will be reposted when
going
* back to the PLAYING state. The EOS messages are queued in GstBins.
* </para></listitem>
* <listitem><para>
* Live sources stop generating data and return NO_PREROLL.
* </para></listitem>
* </itemizedlist>
* @GST_STATE_CHANGE_PAUSED_TO_READY : state change from PAUSED to READY.
* <itemizedlist>
* <listitem><para>
* Sinks unblock any waits in the preroll.
* </para></listitem>
* <listitem><para>
* Elements unblock any waits on devices
* </para></listitem>
* <listitem><para>
* Chain or get_range functions return WRONG_STATE.
* </para></listitem>
* <listitem><para>
* The element pads are deactivated so that streaming becomes impossibl
e and
* all streaming threads are stopped.
* </para></listitem>
* <listitem><para>
* The sink forgets all negotiated formats
* </para></listitem>
* <listitem><para>
* Elements remove all sometimes pads
* </para></listitem>
* </itemizedlist>
* @GST_STATE_CHANGE_READY_TO_NULL : state change from READY to NULL.
* <itemizedlist>
* <listitem><para>
* Elements close devices
* </para></listitem>
* <listitem><para>
* Elements reset any internal state.
* </para></listitem>
* </itemizedlist>
*
* These are the different state changes an element goes through.
* %GST_STATE_NULL &rArr; %GST_STATE_PLAYING is called an upwards state cha
nge
* and %GST_STATE_PLAYING &rArr; %GST_STATE_NULL a downwards state change.
*/ */
typedef enum /*< flags=0 >*/ typedef enum /*< flags=0 >*/
{ {
GST_STATE_CHANGE_NULL_TO_READY = (GST_STATE_NULL<<3) | GST_STATE_RE GST_STATE_CHANGE_NULL_TO_READY = (GST_STATE_NULL<<3) | GST_STATE_R
ADY, EADY,
GST_STATE_CHANGE_READY_TO_PAUSED = (GST_STATE_READY<<3) | GST_STATE_P GST_STATE_CHANGE_READY_TO_PAUSED = (GST_STATE_READY<<3) | GST_STATE_
AUSED, PAUSED,
GST_STATE_CHANGE_PAUSED_TO_PLAYING = (GST_STATE_PAUSED<<3) | GST_STATE_ GST_STATE_CHANGE_PAUSED_TO_PLAYING = (GST_STATE_PAUSED<<3) | GST_STATE
PLAYING, _PLAYING,
GST_STATE_CHANGE_PLAYING_TO_PAUSED = (GST_STATE_PLAYING<<3) | GST_STATE GST_STATE_CHANGE_PLAYING_TO_PAUSED = (GST_STATE_PLAYING<<3) | GST_STAT
_PAUSED, E_PAUSED,
GST_STATE_CHANGE_PAUSED_TO_READY = (GST_STATE_PAUSED<<3) | GST_STATE_ GST_STATE_CHANGE_PAUSED_TO_READY = (GST_STATE_PAUSED<<3) | GST_STATE
READY, _READY,
GST_STATE_CHANGE_READY_TO_NULL = (GST_STATE_READY<<3) | GST_STATE_N GST_STATE_CHANGE_READY_TO_NULL = (GST_STATE_READY<<3) | GST_STATE_
ULL NULL
} GstStateChange; } GstStateChange;
/** /**
* GstElementFlags: * GstElementFlags:
* @GST_ELEMENT_LOCKED_STATE: ignore state changes from parent * @GST_ELEMENT_LOCKED_STATE: ignore state changes from parent
* @GST_ELEMENT_IS_SINK: the element is a sink * @GST_ELEMENT_IS_SINK: the element is a sink
* @GST_ELEMENT_UNPARENTING: Child is being removed from the parent bin. * @GST_ELEMENT_UNPARENTING: Child is being removed from the parent bin.
* gst_bin_remove() on a child already being removed immediately returns F ALSE * gst_bin_remove() on a child already being removed immediately returns F ALSE
* @GST_ELEMENT_IS_SOURCE: the element is a source. Since 0.10.31
* @GST_ELEMENT_FLAG_LAST: offset to define more flags * @GST_ELEMENT_FLAG_LAST: offset to define more flags
* *
* The standard flags that an element may have. * The standard flags that an element may have.
*/ */
typedef enum typedef enum
{ {
GST_ELEMENT_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 0), GST_ELEMENT_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 0),
GST_ELEMENT_IS_SINK = (GST_OBJECT_FLAG_LAST << 1), GST_ELEMENT_IS_SINK = (GST_OBJECT_FLAG_LAST << 1),
GST_ELEMENT_UNPARENTING = (GST_OBJECT_FLAG_LAST << 2), GST_ELEMENT_UNPARENTING = (GST_OBJECT_FLAG_LAST << 2),
GST_ELEMENT_IS_SOURCE = (GST_OBJECT_FLAG_LAST << 3),
/* padding */ /* padding */
GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16) GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16)
} GstElementFlags; } GstElementFlags;
/** /**
* GST_ELEMENT_IS_LOCKED_STATE: * GST_ELEMENT_IS_LOCKED_STATE:
* @elem: A #GstElement to query * @elem: A #GstElement to query
* *
* Check if the element is in the locked state and therefore will ignore st ate * Check if the element is in the locked state and therefore will ignore st ate
* changes from its parent object. * changes from its parent object.
*/ */
#define GST_ELEMENT_IS_LOCKED_STATE(elem) (GST_OBJECT_FLAG_IS_SET(el em,GST_ELEMENT_LOCKED_STATE)) #define GST_ELEMENT_IS_LOCKED_STATE(elem) (GST_OBJECT_FLAG_IS_SET(el em,GST_ELEMENT_LOCKED_STATE))
/** /**
* GST_ELEMENT_NAME: * GST_ELEMENT_NAME:
* @elem: A #GstElement to query * @elem: A #GstElement to query
* *
* Gets the name of this element. Use only in core as this is not * Gets the name of this element. Use only in core as this is not
* ABI-compatible. Others use gst_element_get_name() * ABI-compatible. Others use gst_element_get_name()
*/ */
#define GST_ELEMENT_NAME(elem) (GST_OBJECT_NAME(elem)) #define GST_ELEMENT_NAME(elem) (GST_OBJECT_NAME(elem))
/** /**
* GST_ELEMENT_PARENT: * GST_ELEMENT_PARENT:
* @elem: A #GstElement to query * @elem: A #GstElement to query
* *
* Get the parent object of this element. * Get the parent object of this element.
*/ */
#define GST_ELEMENT_PARENT(elem) (GST_ELEMENT_CAST(GST_OBJECT _PARENT(elem))) #define GST_ELEMENT_PARENT(elem) (GST_ELEMENT_CAST(GST_OBJEC T_PARENT(elem)))
/** /**
* GST_ELEMENT_BUS: * GST_ELEMENT_BUS:
* @elem: A #GstElement to query * @elem: A #GstElement to query
* *
* Get the message bus of this element. * Get the message bus of this element.
*/ */
#define GST_ELEMENT_BUS(elem) (GST_ELEMENT_CAST(elem)->bus ) #define GST_ELEMENT_BUS(elem) (GST_ELEMENT_CAST(elem)->bu s)
/** /**
* GST_ELEMENT_CLOCK: * GST_ELEMENT_CLOCK:
* @elem: A #GstElement to query * @elem: A #GstElement to query
* *
* Get the clock of this element * Get the clock of this element
*/ */
#define GST_ELEMENT_CLOCK(elem) (GST_ELEMENT_CAST(el em)->clock) #define GST_ELEMENT_CLOCK(elem) (GST_ELEMENT_CAST(elem)->cl ock)
/** /**
* GST_ELEMENT_PADS: * GST_ELEMENT_PADS:
* @elem: A #GstElement to query * @elem: A #GstElement to query
* *
* Get the pads of this elements. * Get the pads of this elements.
*/ */
#define GST_ELEMENT_PADS(elem) (GST_ELEMENT_CAST(elem)->pad #define GST_ELEMENT_PADS(elem) (GST_ELEMENT_CAST(elem)->pa
s) ds)
/**
* GST_ELEMENT_START_TIME:
* @elem: a #GstElement to return the start time for.
*
* This macro returns the start_time of the @elem. The start_time is the
* running_time of the pipeline when the element went to PAUSED.
*
* Since: 0.10.24
*/
#define GST_ELEMENT_START_TIME(elem) (GST_ELEMENT_CAST(elem)->ab
idata.ABI.start_time)
/** /**
* GST_ELEMENT_ERROR: * GST_ELEMENT_ERROR:
* @el: the element that generates the error * @el: the element that generates the error
* @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGErro r) * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGErro r)
* @code: error code defined for that domain (see #gstreamer-GstGError) * @code: error code defined for that domain (see #gstreamer-GstGError)
* @text: the message to display (format string and args enclosed in * @text: the message to display (format string and args enclosed in
parentheses) parentheses)
* @debug: debugging information for the message (format string and args * @debug: debugging information for the message (format string and args
enclosed in parentheses) enclosed in parentheses)
* *
* Utility function that elements can use in case they encountered a fatal * Utility function that elements can use in case they encountered a fatal
* data processing error. The pipeline will post an error message and the * data processing error. The pipeline will post an error message and the
* application will be requested to stop further media processing. * application will be requested to stop further media processing.
*/ */
#define GST_ELEMENT_ERROR(el, domain, code, text, debug) \ #define GST_ELEMENT_ERROR(el, domain, code, text, debug) \
G_STMT_START { \ G_STMT_START { \
gchar *__txt = _gst_element_error_printf text; \ gchar *__txt = _gst_element_error_printf text; \
gchar *__dbg = _gst_element_error_printf debug; \ gchar *__dbg = _gst_element_error_printf debug; \
if (__txt) \ if (__txt) \
GST_WARNING_OBJECT (el, "error: %s", __txt); \ GST_WARNING_OBJECT (el, "error: %s", __txt); \
if (__dbg) \ if (__dbg) \
GST_WARNING_OBJECT (el, "error: %s", __dbg); \ GST_WARNING_OBJECT (el, "error: %s", __dbg); \
gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_ERROR, gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_ERROR, \
\ GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \
GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \
__txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \
} G_STMT_END } G_STMT_END
/** /**
* GST_ELEMENT_WARNING: * GST_ELEMENT_WARNING:
* @el: the element that generates the warning * @el: the element that generates the warning
* @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGErro r) * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGErro r)
* @code: error code defined for that domain (see #gstreamer-GstGError) * @code: error code defined for that domain (see #gstreamer-GstGError)
* @text: the message to display (format string and args enclosed in * @text: the message to display (format string and args enclosed in
parentheses) parentheses)
* @debug: debugging information for the message (format string and args * @debug: debugging information for the message (format string and args
enclosed in parentheses) enclosed in parentheses)
* *
* Utility function that elements can use in case they encountered a non-fa tal * Utility function that elements can use in case they encountered a non-fa tal
* data processing problem. The pipeline will post a warning message and th e * data processing problem. The pipeline will post a warning message and th e
* application will be informed. * application will be informed.
*/ */
#define GST_ELEMENT_WARNING(el, domain, code, text, debug) \ #define GST_ELEMENT_WARNING(el, domain, code, text, debug) \
G_STMT_START { \ G_STMT_START { \
gchar *__txt = _gst_element_error_printf text; \ gchar *__txt = _gst_element_error_printf text; \
gchar *__dbg = _gst_element_error_printf debug; \ gchar *__dbg = _gst_element_error_printf debug; \
if (__txt) \ if (__txt) \
GST_WARNING_OBJECT (el, "warning: %s", __txt); \ GST_WARNING_OBJECT (el, "warning: %s", __txt); \
if (__dbg) \ if (__dbg) \
GST_WARNING_OBJECT (el, "warning: %s", __dbg); \ GST_WARNING_OBJECT (el, "warning: %s", __dbg); \
gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_WARNING, \ gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_WARNING, \
GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \
__txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \ __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \
} G_STMT_END } G_STMT_END
/** /**
* GST_ELEMENT_INFO: * GST_ELEMENT_INFO:
* @el: the element that generates the information * @el: the element that generates the information
* @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGErro r) * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGErro r)
* @code: error code defined for that domain (see #gstreamer-GstGError) * @code: error code defined for that domain (see #gstreamer-GstGError)
* @text: the message to display (format string and args enclosed in * @text: the message to display (format string and args enclosed in
parentheses) parentheses)
* @debug: debugging information for the message (format string and args * @debug: debugging information for the message (format string and args
enclosed in parentheses) enclosed in parentheses)
* *
* Utility function that elements can use in case they want to inform * Utility function that elements can use in case they want to inform
* the application of something noteworthy that is not an error. * the application of something noteworthy that is not an error.
* The pipeline will post a warning message and the * The pipeline will post a warning message and the
* application will be informed. * application will be informed.
* *
* Since: 0.10.12 * Since: 0.10.12
*/ */
#define GST_ELEMENT_INFO(el, domain, code, text, debug) #define GST_ELEMENT_INFO(el, domain, code, text, debug) \
\ G_STMT_START { \
G_STMT_START { \ gchar *__txt = _gst_element_error_printf text; \
gchar *__txt = _gst_element_error_printf text; \ gchar *__dbg = _gst_element_error_printf debug; \
gchar *__dbg = _gst_element_error_printf debug; \ if (__txt) \
if (__txt) \ GST_INFO_OBJECT (el, "info: %s", __txt); \
GST_INFO_OBJECT (el, "info: %s", __txt); \ if (__dbg) \
if (__dbg) \ GST_INFO_OBJECT (el, "info: %s", __dbg); \
GST_INFO_OBJECT (el, "info: %s", __dbg); \ gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_INFO, \
gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_INFO, \ GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \
GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \
__txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \
} G_STMT_END } G_STMT_END
/* the state change mutexes and conds */ /* the state change mutexes and conds */
/** /**
* GST_STATE_GET_LOCK: * GST_STATE_GET_LOCK:
* @elem: a #GstElement * @elem: a #GstElement
* *
* Get a reference to the state lock of @elem. * Get a reference to the state lock of @elem.
* This lock is used by the core. It is taken while getting or setting * This lock is used by the core. It is taken while getting or setting
* the state, during state changes, and while finalizing. * the state, during state changes, and while finalizing.
skipping to change at line 371 skipping to change at line 502
* Get the conditional used to signal the completion of a state change. * Get the conditional used to signal the completion of a state change.
*/ */
#define GST_STATE_GET_COND(elem) (GST_ELEMENT_CAST(elem)->sta te_cond) #define GST_STATE_GET_COND(elem) (GST_ELEMENT_CAST(elem)->sta te_cond)
#define GST_STATE_LOCK(elem) g_static_rec_mutex_lock(GST_ STATE_GET_LOCK(elem)) #define GST_STATE_LOCK(elem) g_static_rec_mutex_lock(GST_ STATE_GET_LOCK(elem))
#define GST_STATE_TRYLOCK(elem) g_static_rec_mutex_trylock(G ST_STATE_GET_LOCK(elem)) #define GST_STATE_TRYLOCK(elem) g_static_rec_mutex_trylock(G ST_STATE_GET_LOCK(elem))
#define GST_STATE_UNLOCK(elem) g_static_rec_mutex_unlock(GS T_STATE_GET_LOCK(elem)) #define GST_STATE_UNLOCK(elem) g_static_rec_mutex_unlock(GS T_STATE_GET_LOCK(elem))
#define GST_STATE_UNLOCK_FULL(elem) g_static_rec_mutex_unlock_fu ll(GST_STATE_GET_LOCK(elem)) #define GST_STATE_UNLOCK_FULL(elem) g_static_rec_mutex_unlock_fu ll(GST_STATE_GET_LOCK(elem))
#define GST_STATE_LOCK_FULL(elem,t) g_static_rec_mutex_lock_full (GST_STATE_GET_LOCK(elem), t) #define GST_STATE_LOCK_FULL(elem,t) g_static_rec_mutex_lock_full (GST_STATE_GET_LOCK(elem), t)
#define GST_STATE_WAIT(elem) g_cond_wait (GST_STATE_GET_C OND (elem), \ #define GST_STATE_WAIT(elem) g_cond_wait (GST_STATE_GET_C OND (elem), \
GST_OBJECT_GET_LOCK (elem)) GST_OBJECT_GET_LOCK (elem))
#define GST_STATE_TIMED_WAIT(elem, timeval) g_cond_timed_wait (GST_STATE _GET_COND (elem), \ #define GST_STATE_TIMED_WAIT(elem, timeval) g_cond_timed_wait (GST_STATE _GET_COND (elem), \
GST_OBJECT_GET_LOCK (elem), timeval) GST_OBJECT_GET_LOCK (elem), timeval)
#define GST_STATE_SIGNAL(elem) g_cond_signal (GST_STATE_GET _COND (elem)); #define GST_STATE_SIGNAL(elem) g_cond_signal (GST_STATE_GET _COND (elem));
#define GST_STATE_BROADCAST(elem) g_cond_broadcast (GST_STATE_ GET_COND (elem)); #define GST_STATE_BROADCAST(elem) g_cond_broadcast (GST_STATE_ GET_COND (elem));
/** /**
* GstElement: * GstElement:
* @state_lock: Used to serialize execution of gst_element_set_state() * @state_lock: Used to serialize execution of gst_element_set_state()
* @state_cond: Used to signal completion of a state change * @state_cond: Used to signal completion of a state change
* @state_cookie: Used to detect concurrent execution of * @state_cookie: Used to detect concurrent execution of
* gst_element_set_state() and gst_element_get_state() * gst_element_set_state() and gst_element_get_state()
* @current_state: the current state of an element * @current_state: the current state of an element
* @next_state: the next state of an element, can be #GST_STATE_VOID_PENDIN G if * @next_state: the next state of an element, can be #GST_STATE_VOID_PENDIN G if
* the element is in the correct state. * the element is in the correct state.
* @pending_state: the final state the element should go to, can be * @pending_state: the final state the element should go to, can be
* #GST_STATE_VOID_PENDING if the element is in the correct state * #GST_STATE_VOID_PENDING if the element is in the correct state
* @last_return: the last return value of an element state change * @last_return: the last return value of an element state change
* @bus: the bus of the element. This bus is provided to the element by the * @bus: the bus of the element. This bus is provided to the element by the
* parent element or the application. A #GstPipeline has a bus of its own. * parent element or the application. A #GstPipeline has a bus of its own.
* @clock: the clock of the element. This clock is usually provided by to t he * @clock: the clock of the element. This clock is usually provided to the
* element by the toplevel #GstPipeline. * element by the toplevel #GstPipeline.
* @base_time: the time of the clock right before the element is set to * @base_time: the time of the clock right before the element is set to
* PLAYING. Subtracting @base_time from the current clock time in the PLAYI NG * PLAYING. Subtracting @base_time from the current clock time in the PLAYI NG
* state will yield the stream time. * state will yield the running_time against the clock.
* @numpads: number of pads of the element, includes both source and sink p ads. * @numpads: number of pads of the element, includes both source and sink p ads.
* @pads: list of pads * @pads: list of pads
* @numsrcpads: number of source pads of the element. * @numsrcpads: number of source pads of the element.
* @srcpads: list of source pads * @srcpads: list of source pads
* @numsinkpads: number of sink pads of the element. * @numsinkpads: number of sink pads of the element.
* @sinkpads: list of sink pads * @sinkpads: list of sink pads
* @pads_cookie: updated whenever the a pad is added or removed * @pads_cookie: updated whenever the a pad is added or removed
* *
* GStreamer element abstract base class. * GStreamer element abstract base class.
*/ */
struct _GstElement struct _GstElement
{ {
GstObject object; GstObject object;
/*< public >*/ /* with LOCK */ /*< public >*/ /* with LOCK */
GStaticRecMutex *state_lock; GStaticRecMutex *state_lock;
/* element state */ /* element state */
GCond *state_cond; GCond *state_cond;
guint32 state_cookie; guint32 state_cookie;
GstState current_state; GstState current_state;
GstState next_state; GstState next_state;
GstState pending_state; GstState pending_state;
GstStateChangeReturn last_return; GstStateChangeReturn last_return;
GstBus *bus; GstBus *bus;
/* allocated clock */ /* allocated clock */
GstClock *clock; GstClock *clock;
GstClockTimeDiff base_time; /* NULL/READY: 0 - PAUSED: current time - GstClockTimeDiff base_time; /* NULL/READY: 0 - PAUSED: current time
PLAYING: difference to clock */ - PLAYING: difference to clock */
PLAYING: difference to clock */
/* element pads, these lists can only be iterated while holding /* element pads, these lists can only be iterated while holding
* the LOCK or checking the cookie after each LOCK. */ * the LOCK or checking the cookie after each LOCK. */
guint16 numpads; guint16 numpads;
GList *pads; GList *pads;
guint16 numsrcpads; guint16 numsrcpads;
GList *srcpads; GList *srcpads;
guint16 numsinkpads; guint16 numsinkpads;
GList *sinkpads; GList *sinkpads;
guint32 pads_cookie; guint32 pads_cookie;
/*< private >*/ /*< private >*/
union { union {
struct { struct {
/* state set by application */ /* state set by application */
GstState target_state; GstState target_state;
/* running time of the last PAUSED state */
GstClockTime start_time;
} ABI; } ABI;
/* adding + 0 to mark ABI change to be undone later */ /* adding + 0 to mark ABI change to be undone later */
gpointer _gst_reserved[GST_PADDING + 0]; gpointer _gst_reserved[GST_PADDING + 0];
} abidata; } abidata;
}; };
/** /**
* GstElementClass: * GstElementClass:
* @parent_class: the parent class structure * @parent_class: the parent class structure
* @details: #GstElementDetails for elements of this class * @details: #GstElementDetails for elements of this class
skipping to change at line 469 skipping to change at line 602
* @set_state: set a new state on the element * @set_state: set a new state on the element
* @change_state: called by @set_state to perform an incremental state chan ge * @change_state: called by @set_state to perform an incremental state chan ge
* @set_bus: set a #GstBus on the element * @set_bus: set a #GstBus on the element
* @provide_clock: gets the #GstClock provided by the element * @provide_clock: gets the #GstClock provided by the element
* @set_clock: set the #GstClock on the element * @set_clock: set the #GstClock on the element
* @get_index: set a #GstIndex on the element * @get_index: set a #GstIndex on the element
* @set_index: get the #GstIndex of an element * @set_index: get the #GstIndex of an element
* @send_event: send a #GstEvent to the element * @send_event: send a #GstEvent to the element
* @get_query_types: get the supported #GstQueryType of this element * @get_query_types: get the supported #GstQueryType of this element
* @query: perform a #GstQuery on the element * @query: perform a #GstQuery on the element
* @request_new_pad_full: called when a new pad is requested. Since: 0.10.3 2.
* *
* GStreamer element class. Override the vmethods to implement the element * GStreamer element class. Override the vmethods to implement the element
* functionality. * functionality.
*/ */
struct _GstElementClass struct _GstElementClass
{ {
GstObjectClass parent_class; GstObjectClass parent_class;
/*< public >*/ /*< public >*/
/* the element details */ /* the element details */
GstElementDetails details; /* FIXME-0.11: deprecate this in favour of meta_data */
GstElementDetails details;
/* factory that the element was created from */ /* factory that the element was created from */
GstElementFactory *elementfactory; GstElementFactory *elementfactory;
/* templates for our pads */ /* templates for our pads */
GList *padtemplates; GList *padtemplates;
gint numpadtemplates; gint numpadtemplates;
guint32 pad_templ_cookie; guint32 pad_templ_cookie;
/*< private >*/ /*< private >*/
/* signal callbacks */ /* signal callbacks */
void (*pad_added) (GstElement *element, GstPad *pad); void (*pad_added) (GstElement *element, GstPad *pad);
void (*pad_removed) (GstElement *element, GstPad *pad); void (*pad_removed) (GstElement *element, GstPad *pad);
void (*no_more_pads) (GstElement *element); void (*no_more_pads) (GstElement *element);
/*< public >*/ /*< public >*/
/* virtual methods for subclasses */ /* virtual methods for subclasses */
/* request/release pads */ /* request/release pads */
GstPad* (*request_new_pad) (GstElement *element, GstPad GstPad* (*request_new_pad) (GstElement *element, GstPa
Template *templ, const gchar* name); dTemplate *templ, const gchar* name);
void (*release_pad) (GstElement *element, GstPad void (*release_pad) (GstElement *element, GstPa
*pad); d *pad);
/* state changes */ /* state changes */
GstStateChangeReturn (*get_state) (GstElement * element, GstSt GstStateChangeReturn (*get_state) (GstElement * element, GstS
ate * state, tate * state,
GstState * pending, GstCloc GstState * pending, GstClo
kTime timeout); ckTime timeout);
GstStateChangeReturn (*set_state) (GstElement *element, GstSta GstStateChangeReturn (*set_state) (GstElement *element, GstSt
te state); ate state);
GstStateChangeReturn (*change_state) (GstElement *element, GstSta GstStateChangeReturn (*change_state) (GstElement *element, GstSt
teChange transition); ateChange transition);
/* bus */ /* bus */
void (*set_bus) (GstElement * element, GstBu s * bus); void (*set_bus) (GstElement * element, GstB us * bus);
/* set/get clocks */ /* set/get clocks */
GstClock* (*provide_clock) (GstElement *element); GstClock* (*provide_clock) (GstElement *element);
gboolean (*set_clock) (GstElement *element, GstClo gboolean (*set_clock) (GstElement *element, GstCl
ck *clock); ock *clock);
/* index */ /* index */
GstIndex* (*get_index) (GstElement *element); GstIndex* (*get_index) (GstElement *element);
void (*set_index) (GstElement *element, GstInd void (*set_index) (GstElement *element, GstIn
ex *index); dex *index);
/* query functions */ /* query functions */
gboolean (*send_event) (GstElement *element, GstEve nt *event); gboolean (*send_event) (GstElement *element, GstEv ent *event);
const GstQueryType* (*get_query_types) (GstElement *element); const GstQueryType* (*get_query_types) (GstElement *element);
gboolean (*query) (GstElement *element, GstQue gboolean (*query) (GstElement *element, GstQu
ry *query); ery *query);
/*< private >*/ /*< private >*/
gpointer _gst_reserved[GST_PADDING]; /* FIXME-0.11: move up and replace details */
gpointer meta_data;
/*< public >*/
/* Virtual method for subclasses (additions) */
/* FIXME-0.11 Make this the default behaviour */
GstPad* (*request_new_pad_full) (GstElement *element, GstPad
Template *templ,
const gchar* name, const Gs
tCaps *caps);
/*< private >*/
gpointer _gst_reserved[GST_PADDING-2];
}; };
/* element class pad templates */ /* element class pad templates */
void gst_element_class_add_pad_template (GstElementC void gst_element_class_add_pad_template (GstElement
lass *klass, GstPadTemplate *templ); Class *klass, GstPadTemplate *templ);
GstPadTemplate* gst_element_class_get_pad_template (Gst GstPadTemplate* gst_element_class_get_pad_template (GstElement
ElementClass *element_class, const gchar *name); Class *element_class, const gchar *name);
GList* gst_element_class_get_pad_template_list (Gst GList* gst_element_class_get_pad_template_list (GstElement
ElementClass *element_class); Class *element_class);
void gst_element_class_set_details (GstElementC
lass *klass, const GstElementDetails *details); /* element class meta data */
void gst_element_class_set_details_simple (GstElementC void gst_element_class_set_documentation_uri (GstElement
lass *klass, Class * klass, const gchar *uri);
const gchar void gst_element_class_set_icon_name (GstElement
*longname, Class * klass, const gchar *name);
const gchar #ifndef GST_DISABLE_DEPRECATED
*classification, void gst_element_class_set_details (GstElement
const gchar Class *klass, const GstElementDetails *details);
*description, #endif
const gchar void gst_element_class_set_details_simple (GstElement
*author); Class *klass,
const gcha
r *longname,
const gcha
r *classification,
const gcha
r *description,
const gcha
r *author);
/* element instance */ /* element instance */
GType gst_element_get_type (void); GType gst_element_get_type (void);
/* basic name and parentage stuff from GstObject */ /* basic name and parentage stuff from GstObject */
/** /**
* gst_element_get_name: * gst_element_get_name:
* @elem: a #GstElement to set the name of. * @elem: a #GstElement to get the name of @elem.
*
* Returns a copy of the name of @elem.
* Caller should g_free() the return value after usage.
* For a nameless element, this returns NULL, which you can safely g_free()
* as well.
*
* Returns: (transfer full): the name of @elem. g_free() after usage. MT sa
fe.
* *
* Gets the name of the element.
*/ */
#define gst_element_get_name(elem) gst_object_g et_name(GST_OBJECT_CAST(elem)) #define gst_element_get_name(elem) gst_object_get_name (GST_OBJECT_CAST(elem))
/** /**
* gst_element_set_name: * gst_element_set_name:
* @elem: a #GstElement to set the name of. * @elem: a #GstElement to set the name of.
* @name: the new name * @name: the new name
* *
* Sets the name of the element, getting rid of the old name if there was o ne. * Sets the name of the element, getting rid of the old name if there was o ne.
*/ */
#define gst_element_set_name(elem,name) gst_object_s et_name(GST_OBJECT_CAST(elem),name) #define gst_element_set_name(elem,name) gst_object_set_name (GST_OBJECT_CAST(elem),name)
/** /**
* gst_element_get_parent: * gst_element_get_parent:
* @elem: a #GstElement to get the parent of. * @elem: a #GstElement to get the parent of.
* *
* Gets the parent of an element. * Returns: (transfer full): the parent of an element.
*/ */
#define gst_element_get_parent(elem) gst_object_g et_parent(GST_OBJECT_CAST(elem)) #define gst_element_get_parent(elem) gst_object_get_pare nt(GST_OBJECT_CAST(elem))
/** /**
* gst_element_set_parent: * gst_element_set_parent:
* @elem: a #GstElement to set the parent of. * @elem: a #GstElement to set the parent of.
* @parent: the new parent #GstObject of the element. * @parent: the new parent #GstObject of the element.
* *
* Sets the parent of an element. * Sets the parent of an element.
*/ */
#define gst_element_set_parent(elem,parent) gst_ object_set_parent(GST_OBJECT_CAST(elem),parent) #define gst_element_set_parent(elem,parent) gst_object_ set_parent(GST_OBJECT_CAST(elem),parent)
/* clocking */ /* clocking */
gboolean gst_element_requires_clock (GstElement *element gboolean gst_element_requires_clock (GstElement *elemen
); t);
gboolean gst_element_provides_clock (GstElement *element gboolean gst_element_provides_clock (GstElement *elemen
); t);
GstClock* gst_element_provide_clock (GstElement *element GstClock* gst_element_provide_clock (GstElement *elemen
); t);
GstClock* gst_element_get_clock (GstElement *element GstClock* gst_element_get_clock (GstElement *elemen
); t);
gboolean gst_element_set_clock (GstElement *element gboolean gst_element_set_clock (GstElement *elemen
, GstClock *clock); t, GstClock *clock);
void gst_element_set_base_time (GstElement *element void gst_element_set_base_time (GstElement *elemen
, GstClockTime time); t, GstClockTime time);
GstClockTime gst_element_get_base_time (GstElement *element GstClockTime gst_element_get_base_time (GstElement *elemen
); t);
void gst_element_set_start_time (GstElement *elemen
t, GstClockTime time);
GstClockTime gst_element_get_start_time (GstElement *elemen
t);
/* indexes */ /* indexes */
gboolean gst_element_is_indexable (GstElement *element gboolean gst_element_is_indexable (GstElement *elemen
); t);
void gst_element_set_index (GstElement *element void gst_element_set_index (GstElement *elemen
, GstIndex *index); t, GstIndex *index);
GstIndex* gst_element_get_index (GstElement *element GstIndex* gst_element_get_index (GstElement *elemen
); t);
/* bus */ /* bus */
void gst_element_set_bus (GstElement * elemen void gst_element_set_bus (GstElement * eleme
t, GstBus * bus); nt, GstBus * bus);
GstBus * gst_element_get_bus (GstElement * elemen GstBus * gst_element_get_bus (GstElement * eleme
t); nt);
/* pad management */ /* pad management */
gboolean gst_element_add_pad (GstElement *element gboolean gst_element_add_pad (GstElement *elemen
, GstPad *pad); t, GstPad *pad);
gboolean gst_element_remove_pad (GstElement *element gboolean gst_element_remove_pad (GstElement *elemen
, GstPad *pad); t, GstPad *pad);
void gst_element_no_more_pads (GstElement *element void gst_element_no_more_pads (GstElement *elemen
); t);
#ifndef GST_DISABLE_DEPRECATED #ifndef GST_DISABLE_DEPRECATED
GstPad* gst_element_get_pad (GstElement *element, const gchar *name); GstPad* gst_element_get_pad (GstElement *elemen t, const gchar *name);
#endif /* GST_DISABLE_DEPRECATED */ #endif /* GST_DISABLE_DEPRECATED */
GstPad* gst_element_get_static_pad (GstElement GstPad* gst_element_get_static_pad (GstElement *elemen
*element, const gchar *name); t, const gchar *name);
GstPad* gst_element_get_request_pad (GstElement GstPad* gst_element_get_request_pad (GstElement *elemen
*element, const gchar *name); t, const gchar *name);
void gst_element_release_request_pad (GstElement *element GstPad* gst_element_request_pad (GstElement *elemen
, GstPad *pad); t,
GstPadTemplate *tem
GstIterator * gst_element_iterate_pads (GstElement * elemen pl,
t); const gchar * name,
GstIterator * gst_element_iterate_src_pads (GstElement * elemen const GstCaps *caps);
t); void gst_element_release_request_pad (GstElement *elemen
GstIterator * gst_element_iterate_sink_pads (GstElement * elemen t, GstPad *pad);
t);
GstIterator * gst_element_iterate_pads (GstElement * eleme
nt);
GstIterator * gst_element_iterate_src_pads (GstElement * eleme
nt);
GstIterator * gst_element_iterate_sink_pads (GstElement * eleme
nt);
/* event/query/format stuff */ /* event/query/format stuff */
gboolean gst_element_send_event (GstElement *element gboolean gst_element_send_event (GstElement *elemen
, GstEvent *event); t, GstEvent *event);
gboolean gst_element_seek (GstElement *element gboolean gst_element_seek (GstElement *elemen
, gdouble rate, t, gdouble rate,
GstFormat format, G GstFormat format,
stSeekFlags flags, GstSeekFlags flags,
GstSeekType cur_typ GstSeekType cur_ty
e, gint64 cur, pe, gint64 cur,
GstSeekType stop_ty GstSeekType stop_t
pe, gint64 stop); ype, gint64 stop);
G_CONST_RETURN GstQueryType* G_CONST_RETURN GstQueryType*
gst_element_get_query_types (GstElement *element gst_element_get_query_types (GstElement *elemen
); t);
gboolean gst_element_query (GstElement *element gboolean gst_element_query (GstElement *elemen
, GstQuery *query); t, GstQuery *query);
/* messages */ /* messages */
gboolean gst_element_post_message (GstElement * elemen t, GstMessage * message); gboolean gst_element_post_message (GstElement * eleme nt, GstMessage * message);
/* error handling */ /* error handling */
/* gcc versions < 3.3 warn about NULL being passed as format to printf */ /* gcc versions < 3.3 warn about NULL being passed as format to printf */
#if (defined(GST_USING_PRINTF_EXTENSION) || !defined(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)) #if (defined(GST_USING_PRINTF_EXTENSION) || !defined(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3))
gchar * _gst_element_error_printf (const gchar *format, ...); gchar * _gst_element_error_printf (const gchar *forma t, ...);
#else #else
gchar * _gst_element_error_printf (const gchar *format, ...) G_GNUC_PRINTF (1, 2); gchar * _gst_element_error_printf (const gchar *forma t, ...) G_GNUC_PRINTF (1, 2);
#endif #endif
void gst_element_message_full (GstElement * elemen void gst_element_message_full (GstElement * eleme
t, GstMessageType type, nt, GstMessageType type,
GQuark domain, gint GQuark domain, gin
code, gchar * text, t code, gchar * text,
gchar * debug, cons gchar * debug, con
t gchar * file, st gchar * file,
const gchar * funct const gchar * func
ion, gint line); tion, gint line);
/* state management */ /* state management */
gboolean gst_element_is_locked_state (GstElement *element gboolean gst_element_is_locked_state (GstElement *elemen
); t);
gboolean gst_element_set_locked_state (GstElement *element gboolean gst_element_set_locked_state (GstElement *elemen
, gboolean locked_state); t, gboolean locked_state);
gboolean gst_element_sync_state_with_parent (GstElement *elem gboolean gst_element_sync_state_with_parent (GstElement *ele
ent); ment);
GstStateChangeReturn gst_element_get_state (GstElement * elemen GstStateChangeReturn gst_element_get_state (GstElement * eleme
t, nt,
GstState * state, GstState * state,
GstState * pending, GstState * pending
GstClockTime timeou ,
t); GstClockTime timeo
GstStateChangeReturn gst_element_set_state (GstElement *element ut);
, GstState state); GstStateChangeReturn gst_element_set_state (GstElement *elemen
t, GstState state);
void gst_element_abort_state (GstElement * elemen t); void gst_element_abort_state (GstElement * eleme nt);
GstStateChangeReturn gst_element_change_state (GstElement * eleme nt, GstStateChangeReturn gst_element_change_state (GstElement * eleme nt,
GstStateChange tran GstStateChange tra
sition); nsition);
GstStateChangeReturn gst_element_continue_state (GstElement * elemen GstStateChangeReturn gst_element_continue_state (GstElement * eleme
t, nt,
GstStateChangeRetu rn ret); GstStateChangeRetu rn ret);
void gst_element_lost_state (GstElement * elemen void gst_element_lost_state (GstElement * eleme
t); nt);
void gst_element_lost_state_full (GstElement * eleme
nt, gboolean new_base_time);
/* factory management */ /* factory management */
GstElementFactory* gst_element_get_factory (GstElement *element ); GstElementFactory* gst_element_get_factory (GstElement *elemen t);
G_END_DECLS G_END_DECLS
#endif /* __GST_ELEMENT_H__ */ #endif /* __GST_ELEMENT_H__ */
 End of changes. 74 change blocks. 
252 lines changed or deleted 442 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/