X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgstelement.h;h=4ebfd092b75ea14e33a051410c91962510877749;hb=32b7108d54447f79a0a70ff9504ced877c069706;hp=6dae5101f0feb8c60fec81913b501692f81950a5;hpb=da73b89200bdfbcae6fa75e9d2a41f9a9d2a6bbb;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gstelement.h b/gst/gstelement.h index 6dae510..4ebfd09 100644 --- a/gst/gstelement.h +++ b/gst/gstelement.h @@ -24,7 +24,11 @@ #ifndef __GST_ELEMENT_H__ #define __GST_ELEMENT_H__ -/* gstelement.h and gstelementfactory.h include eachother */ +#include + +G_BEGIN_DECLS + +/* gstelement.h and gstelementfactory.h include each other */ typedef struct _GstElement GstElement; typedef struct _GstElementClass GstElementClass; @@ -51,22 +55,6 @@ typedef enum { GST_STATE_PLAYING = 4 } GstState; - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - #define GST_TYPE_ELEMENT (gst_element_get_type ()) #define GST_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_ELEMENT)) #define GST_IS_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_ELEMENT)) @@ -84,7 +72,7 @@ G_BEGIN_DECLS * cannot produce data in %GST_STATE_PAUSED. * This typically happens with live sources. * - * The possible return values from a state change function such as + * The possible return values from a state change function such as * gst_element_set_state(). Only @GST_STATE_CHANGE_FAILURE is a real failure. */ typedef enum { @@ -94,6 +82,20 @@ typedef enum { GST_STATE_CHANGE_NO_PREROLL = 3 } GstStateChangeReturn; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + /* NOTE: this probably should be done with an #ifdef to decide * whether to safe-cast or to just do the non-checking cast. */ @@ -175,125 +177,67 @@ typedef enum { /** * GstStateChange: * @GST_STATE_CHANGE_NULL_TO_READY : state change from NULL to READY. - * - * - * The element must check if the resources it needs are available. Device + * * The element must check if the resources it needs are available. Device * sinks and -sources typically try to probe the device to constrain their * caps. - * - * - * The element opens the device (in case feature need to be probed). - * - * + * * The element opens the device (in case feature need to be probed). * @GST_STATE_CHANGE_READY_TO_PAUSED : state change from READY to PAUSED. - * - * - * The element pads are activated in order to receive data in PAUSED. + * * The element pads are activated in order to receive data in PAUSED. * Streaming threads are started. - * - * - * Some elements might need to return %GST_STATE_CHANGE_ASYNC and complete + * * Some elements might need to return %GST_STATE_CHANGE_ASYNC and complete * the state change when they have enough information. It is a requirement * for sinks to return %GST_STATE_CHANGE_ASYNC and complete the state change * when they receive the first buffer or %GST_EVENT_EOS (preroll). * Sinks also block the dataflow when in PAUSED. - * - * - * A pipeline resets the running_time to 0. - * - * - * Live sources return %GST_STATE_CHANGE_NO_PREROLL and don't generate data. - * - * + * * A pipeline resets the running_time to 0. + * * Live sources return %GST_STATE_CHANGE_NO_PREROLL and don't generate data. * @GST_STATE_CHANGE_PAUSED_TO_PLAYING: state change from PAUSED to PLAYING. - * - * - * Most elements ignore this state change. - * - * - * The pipeline selects a #GstClock and distributes this to all the children + * * Most elements ignore this state change. + * * The pipeline selects a #GstClock and distributes this to all the children * before setting them to PLAYING. This means that it is only allowed to * synchronize on the #GstClock in the PLAYING state. - * - * - * The pipeline uses the #GstClock and the running_time to calculate the + * * The pipeline uses the #GstClock and the running_time to calculate the * base_time. The base_time is distributed to all children when performing * the state change. - * - * - * Sink elements stop blocking on the preroll buffer or event and start + * * Sink elements stop blocking on the preroll buffer or event and start * rendering the data. - * - * - * Sinks can post %GST_MESSAGE_EOS in the PLAYING state. It is not allowed + * * Sinks can post %GST_MESSAGE_EOS in the PLAYING state. It is not allowed * to post %GST_MESSAGE_EOS when not in the PLAYING state. - * - * - * While streaming in PAUSED or PLAYING elements can create and remove + * * While streaming in PAUSED or PLAYING elements can create and remove * sometimes pads. - * - * - * Live sources start generating data and return %GST_STATE_CHANGE_SUCCESS. - * - * + * * Live sources start generating data and return %GST_STATE_CHANGE_SUCCESS. * @GST_STATE_CHANGE_PLAYING_TO_PAUSED: state change from PLAYING to PAUSED. - * - * - * Most elements ignore this state change. - * - * - * The pipeline calculates the running_time based on the last selected + * * Most elements ignore this state change. + * * The pipeline calculates the running_time based on the last selected * #GstClock and the base_time. It stores this information to continue * playback when going back to the PLAYING state. - * - * - * Sinks unblock any #GstClock wait calls. - * - * - * When a sink does not have a pending buffer to play, it returns - * %GST_STATE_CHANGE_ASYNC from this state change and completes the state + * * Sinks unblock any #GstClock wait calls. + * * When a sink does not have a pending buffer to play, it returns + * #GST_STATE_CHANGE_ASYNC from this state change and completes the state * change when it receives a new buffer or an %GST_EVENT_EOS. - * - * - * Any queued %GST_MESSAGE_EOS items are removed since they will be reposted + * * Any queued %GST_MESSAGE_EOS items are removed since they will be reposted * when going back to the PLAYING state. The EOS messages are queued in * #GstBin containers. - * - * - * Live sources stop generating data and return %GST_STATE_CHANGE_NO_PREROLL. - * - * + * * Live sources stop generating data and return %GST_STATE_CHANGE_NO_PREROLL. * @GST_STATE_CHANGE_PAUSED_TO_READY : state change from PAUSED to READY. - * - * - * Sinks unblock any waits in the preroll. - * - * - * Elements unblock any waits on devices - * - * - * Chain or get_range functions return %GST_FLOW_FLUSHING. - * - * - * The element pads are deactivated so that streaming becomes impossible and + * * Sinks unblock any waits in the preroll. + * * Elements unblock any waits on devices + * * Chain or get_range functions return %GST_FLOW_FLUSHING. + * * The element pads are deactivated so that streaming becomes impossible and * all streaming threads are stopped. - * - * - * The sink forgets all negotiated formats - * - * - * Elements remove all sometimes pads - * - * + * * The sink forgets all negotiated formats + * * Elements remove all sometimes pads * @GST_STATE_CHANGE_READY_TO_NULL : state change from READY to NULL. - * - * - * Elements close devices - * - * - * Elements reset any internal state. - * - * + * * Elements close devices + * * Elements reset any internal state. + * @GST_STATE_CHANGE_NULL_TO_NULL : state change from NULL to NULL. (Since: 1.14) + * @GST_STATE_CHANGE_READY_TO_READY : state change from READY to READY, + * This might happen when going to PAUSED asynchronously failed, in that case + * elements should make sure they are in a proper, coherent READY state. (Since: 1.14) + * @GST_STATE_CHANGE_PAUSED_TO_PAUSED : state change from PAUSED to PAUSED. + * This might happen when elements were in PLAYING state and 'lost state', + * they should make sure to go back to real 'PAUSED' state (prerolling for example). (Since: 1.14) + * @GST_STATE_CHANGE_PLAYING_TO_PLAYING : state change from PLAYING to PLAYING. (Since: 1.14) * * These are the different state changes an element goes through. * %GST_STATE_NULL ⇒ %GST_STATE_PLAYING is called an upwards state change @@ -306,7 +250,11 @@ typedef enum /*< flags=0 >*/ GST_STATE_CHANGE_PAUSED_TO_PLAYING = (GST_STATE_PAUSED<<3) | GST_STATE_PLAYING, GST_STATE_CHANGE_PLAYING_TO_PAUSED = (GST_STATE_PLAYING<<3) | GST_STATE_PAUSED, GST_STATE_CHANGE_PAUSED_TO_READY = (GST_STATE_PAUSED<<3) | GST_STATE_READY, - GST_STATE_CHANGE_READY_TO_NULL = (GST_STATE_READY<<3) | GST_STATE_NULL + GST_STATE_CHANGE_READY_TO_NULL = (GST_STATE_READY<<3) | GST_STATE_NULL, + GST_STATE_CHANGE_NULL_TO_NULL = (GST_STATE_NULL<<3) | GST_STATE_NULL, + GST_STATE_CHANGE_READY_TO_READY = (GST_STATE_READY<<3) | GST_STATE_READY, + GST_STATE_CHANGE_PAUSED_TO_PAUSED = (GST_STATE_PAUSED<<3) | GST_STATE_PAUSED, + GST_STATE_CHANGE_PLAYING_TO_PLAYING = (GST_STATE_PLAYING<<3) | GST_STATE_PLAYING } GstStateChange; /** @@ -399,7 +347,9 @@ typedef enum */ #define GST_ELEMENT_START_TIME(elem) (GST_ELEMENT_CAST(elem)->start_time) +GST_API GstStructure *gst_make_element_message_details (const char *name, ...); + #define GST_ELEMENT_MESSAGE_MAKE_DETAILS(args) gst_make_element_message_details args /** @@ -429,7 +379,7 @@ G_STMT_START { \ parentheses) * @debug: debugging information for the message (format string and args enclosed in parentheses) - * @args optional name, type, value triplets, which will be stored + * @args: optional name, type, value triplets, which will be stored * in the associated GstStructure. NULL terminator required. * Must be enclosed within parentheses. * @@ -490,7 +440,7 @@ G_STMT_START { \ parentheses) * @debug: debugging information for the message (format string and args enclosed in parentheses) - * @args optional name, type, value triplets, which will be stored + * @args: optional name, type, value triplets, which will be stored * in the associated GstStructure. NULL terminator required. * Must be enclosed within parentheses. * @@ -551,7 +501,7 @@ G_STMT_START { \ parentheses) * @debug: debugging information for the message (format string and args enclosed in parentheses) - * @args optional name, type, value triplets, which will be stored + * @args: optional name, type, value triplets, which will be stored * in the associated GstStructure. NULL terminator required. * Must be enclosed within parentheses. * @@ -663,6 +613,7 @@ G_STMT_START { \ * @numsinkpads: number of sink pads of the element. * @sinkpads: (element-type Gst.Pad): list of sink pads * @pads_cookie: updated whenever the a pad is added or removed + * @contexts: (element-type Gst.Context): list of contexts * * GStreamer element abstract base class. */ @@ -793,33 +744,52 @@ struct _GstElementClass }; /* element class pad templates */ + +GST_API void gst_element_class_add_pad_template (GstElementClass *klass, GstPadTemplate *templ); +GST_API void gst_element_class_add_static_pad_template (GstElementClass *klass, GstStaticPadTemplate *static_templ); +GST_API +void gst_element_class_add_static_pad_template_with_gtype (GstElementClass *klass, + GstStaticPadTemplate *static_templ, + GType pad_type); + +GST_API GstPadTemplate* gst_element_class_get_pad_template (GstElementClass *element_class, const gchar *name); + +GST_API GList* gst_element_class_get_pad_template_list (GstElementClass *element_class); /* element class meta data */ + +GST_API void gst_element_class_set_metadata (GstElementClass *klass, const gchar *longname, const gchar *classification, const gchar *description, const gchar *author); +GST_API void gst_element_class_set_static_metadata (GstElementClass *klass, const gchar *longname, const gchar *classification, const gchar *description, const gchar *author); +GST_API void gst_element_class_add_metadata (GstElementClass * klass, const gchar * key, const gchar * value); +GST_API void gst_element_class_add_static_metadata (GstElementClass * klass, const gchar * key, const gchar * value); +GST_API const gchar * gst_element_class_get_metadata (GstElementClass * klass, const gchar * key); /* element instance */ + +GST_API GType gst_element_get_type (void); /* basic name and parentage stuff from GstObject */ @@ -868,62 +838,145 @@ GType gst_element_get_type (void); #define gst_element_set_parent(elem,parent) gst_object_set_parent(GST_OBJECT_CAST(elem),parent) /* clocking */ + +GST_API GstClock* gst_element_provide_clock (GstElement *element); + +GST_API GstClock* gst_element_get_clock (GstElement *element); + +GST_API gboolean gst_element_set_clock (GstElement *element, GstClock *clock); + +GST_API void gst_element_set_base_time (GstElement *element, GstClockTime time); + +GST_API GstClockTime gst_element_get_base_time (GstElement *element); + +GST_API void gst_element_set_start_time (GstElement *element, GstClockTime time); + +GST_API GstClockTime gst_element_get_start_time (GstElement *element); /* bus */ + +GST_API void gst_element_set_bus (GstElement * element, GstBus * bus); + +GST_API GstBus * gst_element_get_bus (GstElement * element); /* context */ + +GST_API void gst_element_set_context (GstElement * element, GstContext * context); + +GST_API GList * gst_element_get_contexts (GstElement * element); + +GST_API GstContext * gst_element_get_context (GstElement * element, const gchar * context_type); + +GST_API GstContext * gst_element_get_context_unlocked (GstElement * element, const gchar * context_type); /* pad management */ + +GST_API gboolean gst_element_add_pad (GstElement *element, GstPad *pad); + +GST_API gboolean gst_element_remove_pad (GstElement *element, GstPad *pad); + +GST_API void gst_element_no_more_pads (GstElement *element); +GST_API GstPad* gst_element_get_static_pad (GstElement *element, const gchar *name); + +GST_API GstPad* gst_element_get_request_pad (GstElement *element, const gchar *name); + +GST_API GstPad* gst_element_request_pad (GstElement *element, GstPadTemplate *templ, const gchar * name, const GstCaps *caps); +GST_API void gst_element_release_request_pad (GstElement *element, GstPad *pad); +GST_API GstIterator * gst_element_iterate_pads (GstElement * element); + +GST_API GstIterator * gst_element_iterate_src_pads (GstElement * element); + +GST_API GstIterator * gst_element_iterate_sink_pads (GstElement * element); +/** + * GstElementForeachPadFunc: + * @element: the #GstElement + * @pad: a #GstPad + * @user_data: user data passed to the foreach function + * + * Function called for each pad when using gst_element_foreach_sink_pad(), + * gst_element_foreach_src_pad(), or gst_element_foreach_pad(). + * + * Returns: %FALSE to stop iterating pads, %TRUE to continue + * + * Since: 1.14 + */ +typedef gboolean (*GstElementForeachPadFunc) (GstElement * element, + GstPad * pad, + gpointer user_data); + +GST_API +gboolean gst_element_foreach_sink_pad (GstElement * element, + GstElementForeachPadFunc func, + gpointer user_data); +GST_API +gboolean gst_element_foreach_src_pad (GstElement * element, + GstElementForeachPadFunc func, + gpointer user_data); +GST_API +gboolean gst_element_foreach_pad (GstElement * element, + GstElementForeachPadFunc func, + gpointer user_data); /* event/query/format stuff */ + +GST_API gboolean gst_element_send_event (GstElement *element, GstEvent *event); + +GST_API gboolean gst_element_seek (GstElement *element, gdouble rate, GstFormat format, GstSeekFlags flags, GstSeekType start_type, gint64 start, GstSeekType stop_type, gint64 stop); +GST_API gboolean gst_element_query (GstElement *element, GstQuery *query); /* messages */ + +GST_API gboolean gst_element_post_message (GstElement * element, GstMessage * message); /* error handling */ /* gcc versions < 3.3 warn about NULL being passed as format to printf */ #if (!defined(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)) +GST_API gchar * _gst_element_error_printf (const gchar *format, ...); #else +GST_API gchar * _gst_element_error_printf (const gchar *format, ...) G_GNUC_PRINTF (1, 2); #endif + +GST_API 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); - +GST_API void gst_element_message_full_with_details (GstElement * element, GstMessageType type, GQuark domain, gint code, gchar * text, gchar * debug, const gchar * file, @@ -931,45 +984,72 @@ void gst_element_message_full_with_details (GstElement * elem GstStructure * structure); /* state management */ + +GST_API gboolean gst_element_is_locked_state (GstElement *element); + +GST_API gboolean gst_element_set_locked_state (GstElement *element, gboolean locked_state); + +GST_API gboolean gst_element_sync_state_with_parent (GstElement *element); +GST_API GstStateChangeReturn gst_element_get_state (GstElement * element, GstState * state, GstState * pending, GstClockTime timeout); +GST_API GstStateChangeReturn gst_element_set_state (GstElement *element, GstState state); +GST_API void gst_element_abort_state (GstElement * element); + +GST_API GstStateChangeReturn gst_element_change_state (GstElement * element, GstStateChange transition); + +GST_API GstStateChangeReturn gst_element_continue_state (GstElement * element, GstStateChangeReturn ret); +GST_API void gst_element_lost_state (GstElement * element); + typedef void (*GstElementCallAsyncFunc) (GstElement * element, gpointer user_data); - +GST_API void gst_element_call_async (GstElement * element, GstElementCallAsyncFunc func, gpointer user_data, GDestroyNotify destroy_notify); /* factory management */ + +GST_API GstElementFactory* gst_element_get_factory (GstElement *element); /* utility functions */ + +GST_API gulong gst_element_add_property_notify_watch (GstElement * element, const gchar * property_name, gboolean include_value); - +GST_API gulong gst_element_add_property_deep_notify_watch (GstElement * element, const gchar * property_name, gboolean include_value); - +GST_API void gst_element_remove_property_notify_watch (GstElement * element, gulong watch_id); +GST_API +GstPadTemplate* gst_element_get_pad_template (GstElement *element, const gchar *name); + +GST_API +GList* gst_element_get_pad_template_list (GstElement *element); +GST_API +const gchar * gst_element_get_metadata (GstElement * element, const gchar * key); + #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstElement, gst_object_unref) #endif