X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgstelement.h;h=408d10ca497d83857eccd057023509dc2fd1d332;hb=e10266e3f3cf9b05b69198b1ac6faa9a62840e30;hp=9cc30ed1b85ed21056b248c8b81eab921d939379;hpb=40bb69827ccfdd3b7d975de4f8973edcc74c9d70;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gstelement.h b/gst/gstelement.h index 9cc30ed..408d10c 100644 --- a/gst/gstelement.h +++ b/gst/gstelement.h @@ -16,8 +16,8 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. */ @@ -60,8 +60,6 @@ typedef enum { #include #include #include -#include -#include #include #include #include @@ -129,8 +127,6 @@ typedef enum { * @elem: a #GstElement to return the target state for. * * This macro returns the target #GstState of the element. - * - * Since: 0.10.13 */ #define GST_STATE_TARGET(elem) (GST_ELEMENT_CAST(elem)->target_state) @@ -216,7 +212,7 @@ typedef enum { * * * The pipeline selects a #GstClock and distributes this to all the children - * before setting them to PLAYING. This means that it is only alowed to + * before setting them to PLAYING. This means that it is only allowed to * synchronize on the #GstClock in the PLAYING state. * * @@ -254,7 +250,7 @@ typedef enum { * Sinks unblock any #GstClock wait calls. * * - * When a sink does not have a pending buffer to play, it returns + * 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. * @@ -276,7 +272,7 @@ typedef enum { * Elements unblock any waits on devices * * - * Chain or get_range functions return %GST_FLOW_WRONG_STATE. + * Chain or get_range functions return %GST_FLOW_FLUSHING. * * * The element pads are deactivated so that streaming becomes impossible and @@ -315,23 +311,26 @@ typedef enum /*< flags=0 >*/ /** * GstElementFlags: - * @GST_ELEMENT_LOCKED_STATE: ignore state changes from parent - * @GST_ELEMENT_IS_SINK: the element is a sink - * @GST_ELEMENT_UNPARENTING: Child is being removed from the parent bin. - * gst_bin_remove() on a child already being removed immediately returns FALSE - * @GST_ELEMENT_IS_SOURCE: the element is a source. Since 0.10.31 + * @GST_ELEMENT_FLAG_LOCKED_STATE: ignore state changes from parent + * @GST_ELEMENT_FLAG_SINK: the element is a sink + * @GST_ELEMENT_FLAG_SOURCE: the element is a source. + * @GST_ELEMENT_FLAG_PROVIDE_CLOCK: the element can provide a clock + * @GST_ELEMENT_FLAG_REQUIRE_CLOCK: the element requires a clock + * @GST_ELEMENT_FLAG_INDEXABLE: the element can use an index * @GST_ELEMENT_FLAG_LAST: offset to define more flags * * The standard flags that an element may have. */ typedef enum { - GST_ELEMENT_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 0), - GST_ELEMENT_IS_SINK = (GST_OBJECT_FLAG_LAST << 1), - GST_ELEMENT_UNPARENTING = (GST_OBJECT_FLAG_LAST << 2), - GST_ELEMENT_IS_SOURCE = (GST_OBJECT_FLAG_LAST << 3), + GST_ELEMENT_FLAG_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 0), + GST_ELEMENT_FLAG_SINK = (GST_OBJECT_FLAG_LAST << 1), + GST_ELEMENT_FLAG_SOURCE = (GST_OBJECT_FLAG_LAST << 2), + GST_ELEMENT_FLAG_PROVIDE_CLOCK = (GST_OBJECT_FLAG_LAST << 3), + GST_ELEMENT_FLAG_REQUIRE_CLOCK = (GST_OBJECT_FLAG_LAST << 4), + GST_ELEMENT_FLAG_INDEXABLE = (GST_OBJECT_FLAG_LAST << 5), /* padding */ - GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16) + GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 10) } GstElementFlags; /** @@ -341,7 +340,7 @@ typedef enum * Check if the element is in the locked state and therefore will ignore state * changes from its parent object. */ -#define GST_ELEMENT_IS_LOCKED_STATE(elem) (GST_OBJECT_FLAG_IS_SET(elem,GST_ELEMENT_LOCKED_STATE)) +#define GST_ELEMENT_IS_LOCKED_STATE(elem) (GST_OBJECT_FLAG_IS_SET(elem,GST_ELEMENT_FLAG_LOCKED_STATE)) /** * GST_ELEMENT_NAME: @@ -390,8 +389,6 @@ typedef enum * * 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)->start_time) @@ -463,8 +460,6 @@ G_STMT_START { \ * the application of something noteworthy that is not an error. * The pipeline will post a info message and the * application will be informed. - * - * Since: 0.10.12 */ #define GST_ELEMENT_INFO(el, domain, code, text, debug) \ G_STMT_START { \ @@ -495,17 +490,17 @@ G_STMT_START { \ * * Get the conditional used to signal the completion of a state change. */ -#define GST_STATE_GET_COND(elem) (GST_ELEMENT_CAST(elem)->state_cond) +#define GST_STATE_GET_COND(elem) (&GST_ELEMENT_CAST(elem)->state_cond) -#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(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_UNLOCK(elem) g_static_rec_mutex_unlock(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_UNLOCK_FULL(elem) g_static_rec_mutex_unlock_full(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(elem) g_rec_mutex_lock(GST_STATE_GET_LOCK(elem)) +#define GST_STATE_TRYLOCK(elem) g_rec_mutex_trylock(GST_STATE_GET_LOCK(elem)) +#define GST_STATE_UNLOCK(elem) g_rec_mutex_unlock(GST_STATE_GET_LOCK(elem)) +#define GST_STATE_UNLOCK_FULL(elem) g_rec_mutex_unlock_full(GST_STATE_GET_LOCK(elem)) +#define GST_STATE_LOCK_FULL(elem,t) g_rec_mutex_lock_full(GST_STATE_GET_LOCK(elem), t) #define GST_STATE_WAIT(elem) g_cond_wait (GST_STATE_GET_COND (elem), \ GST_OBJECT_GET_LOCK (elem)) -#define GST_STATE_TIMED_WAIT(elem, timeval) g_cond_timed_wait (GST_STATE_GET_COND (elem), \ - GST_OBJECT_GET_LOCK (elem), timeval) +#define GST_STATE_WAIT_UNTIL(elem, end_time) g_cond_wait_until (GST_STATE_GET_COND (elem), \ + GST_OBJECT_GET_LOCK (elem), end_time) #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)); @@ -531,11 +526,11 @@ G_STMT_START { \ * state will yield the running_time against the clock. * @start_time: the running_time of the last PAUSED state * @numpads: number of pads of the element, includes both source and sink pads. - * @pads: list of pads + * @pads: (element-type Gst.Pad): list of pads * @numsrcpads: number of source pads of the element. - * @srcpads: list of source pads + * @srcpads: (element-type Gst.Pad): list of source pads * @numsinkpads: number of sink pads of the element. - * @sinkpads: list of sink pads + * @sinkpads: (element-type Gst.Pad): list of sink pads * @pads_cookie: updated whenever the a pad is added or removed * * GStreamer element abstract base class. @@ -545,10 +540,10 @@ struct _GstElement GstObject object; /*< public >*/ /* with LOCK */ - GStaticRecMutex state_lock; + GRecMutex state_lock; /* element state */ - GCond *state_cond; + GCond state_cond; guint32 state_cookie; GstState target_state; GstState current_state; @@ -593,12 +588,12 @@ struct _GstElement * @set_bus: set a #GstBus on the element * @provide_clock: gets the #GstClock provided by the element * @set_clock: set the #GstClock on the element - * @get_index: set a #GstIndex on the element - * @set_index: get the #GstIndex of an element * @send_event: send a #GstEvent to the element - * @get_query_types: get the supported #GstQueryType of this element * @query: perform a #GstQuery on the element - * @state_changed: called immediately after a new state was set. Since: 0.10.35. + * @state_changed: called immediately after a new state was set. + * @post_message: called when a message is posted on the element. Chain up to + * the parent class' handler to have it posted on the bus. + * @set_context: set a #GstContext on the element * * GStreamer element class. Override the vmethods to implement the element * functionality. @@ -648,18 +643,17 @@ struct _GstElementClass GstClock* (*provide_clock) (GstElement *element); gboolean (*set_clock) (GstElement *element, GstClock *clock); - /* index */ - GstIndex* (*get_index) (GstElement *element); - void (*set_index) (GstElement *element, GstIndex *index); - /* query functions */ gboolean (*send_event) (GstElement *element, GstEvent *event); - const GstQueryType* (*get_query_types) (GstElement *element); gboolean (*query) (GstElement *element, GstQuery *query); + gboolean (*post_message) (GstElement *element, GstMessage *message); + + void (*set_context) (GstElement *element, GstContext *context); + /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; + gpointer _gst_reserved[GST_PADDING_LARGE-2]; }; /* element class pad templates */ @@ -673,9 +667,16 @@ void gst_element_class_set_metadata (GstElementClass const gchar *classification, const gchar *description, const gchar *author); +void gst_element_class_set_static_metadata (GstElementClass *klass, + const gchar *longname, + const gchar *classification, + const gchar *description, + const gchar *author); void gst_element_class_add_metadata (GstElementClass * klass, const gchar * key, const gchar * value); -const gchar * gst_element_class_get_metadata (GstElementClass * klass, +void gst_element_class_add_static_metadata (GstElementClass * klass, + const gchar * key, const gchar * value); +const gchar * gst_element_class_get_metadata (GstElementClass * klass, const gchar * key); @@ -690,7 +691,7 @@ GType gst_element_get_type (void); * * 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() + * 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 safe. @@ -727,8 +728,6 @@ GType gst_element_get_type (void); #define gst_element_set_parent(elem,parent) gst_object_set_parent(GST_OBJECT_CAST(elem),parent) /* clocking */ -gboolean gst_element_requires_clock (GstElement *element); -gboolean gst_element_provides_clock (GstElement *element); GstClock* gst_element_provide_clock (GstElement *element); GstClock* gst_element_get_clock (GstElement *element); gboolean gst_element_set_clock (GstElement *element, GstClock *clock); @@ -737,15 +736,13 @@ GstClockTime gst_element_get_base_time (GstElement *element); void gst_element_set_start_time (GstElement *element, GstClockTime time); GstClockTime gst_element_get_start_time (GstElement *element); -/* indexes */ -gboolean gst_element_is_indexable (GstElement *element); -void gst_element_set_index (GstElement *element, GstIndex *index); -GstIndex* gst_element_get_index (GstElement *element); - /* bus */ void gst_element_set_bus (GstElement * element, GstBus * bus); GstBus * gst_element_get_bus (GstElement * element); +/* context */ +void gst_element_set_context (GstElement * element, GstContext * context); + /* pad management */ gboolean gst_element_add_pad (GstElement *element, GstPad *pad); gboolean gst_element_remove_pad (GstElement *element, GstPad *pad); @@ -765,9 +762,8 @@ GstIterator * gst_element_iterate_sink_pads (GstElement * element); gboolean gst_element_send_event (GstElement *element, GstEvent *event); gboolean gst_element_seek (GstElement *element, gdouble rate, GstFormat format, GstSeekFlags flags, - GstSeekType cur_type, gint64 cur, + GstSeekType start_type, gint64 start, GstSeekType stop_type, gint64 stop); -const GstQueryType* gst_element_get_query_types (GstElement *element); gboolean gst_element_query (GstElement *element, GstQuery *query); /* messages */ @@ -775,7 +771,7 @@ gboolean gst_element_post_message (GstElement * element, G /* error handling */ /* 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(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)) gchar * _gst_element_error_printf (const gchar *format, ...); #else gchar * _gst_element_error_printf (const gchar *format, ...) G_GNUC_PRINTF (1, 2);