diff -r 71e347f905f2 -r 4a7fac7dd34a gstreamer_core/gst/gstpad.h --- a/gstreamer_core/gst/gstpad.h Fri Mar 19 09:35:09 2010 +0200 +++ b/gstreamer_core/gst/gstpad.h Fri Apr 16 15:15:52 2010 +0300 @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -47,6 +48,7 @@ typedef struct _GstPad GstPad; +typedef struct _GstPadPrivate GstPadPrivate; typedef struct _GstPadClass GstPadClass; /** @@ -229,11 +231,31 @@ * gst_buffer_unref() when the buffer is no longer needed. * * When a chain function detects an error in the data stream, it must post an - * error on the buffer and return an appropriate #GstFlowReturn value. + * error on the bus and return an appropriate #GstFlowReturn value. * * Returns: #GST_FLOW_OK for success */ typedef GstFlowReturn (*GstPadChainFunction) (GstPad *pad, GstBuffer *buffer); + +/** + * GstPadChainListFunction: + * @pad: the sink #GstPad that performed the chain. + * @list: the #GstBufferList that is chained, not %NULL. + * + * A function that will be called on sinkpads when chaining buffer lists. + * The function typically processes the data contained in the buffer list and + * either consumes the data or passes it on to the internally linked pad(s). + * + * The implementer of this function receives a refcount to @list and + * should gst_buffer_list_unref() when the list is no longer needed. + * + * When a chainlist function detects an error in the data stream, it must + * post an error on the bus and return an appropriate #GstFlowReturn value. + * + * Returns: #GST_FLOW_OK for success + */ +typedef GstFlowReturn (*GstPadChainListFunction) (GstPad *pad, GstBufferList *list); + /** * GstPadGetRangeFunction: * @pad: the src #GstPad to perform the getrange on. @@ -312,11 +334,28 @@ * The signature of the internal pad link function. * * Returns: a newly allocated #GList of pads that are linked to the given pad on - * the inside of the parent element. - * The caller must call g_list_free() on it after use. + * the inside of the parent element. + * + * The caller must call g_list_free() on it after use. + * + * Deprecated: use the threadsafe #GstPadIterIntLinkFunction instead. */ typedef GList* (*GstPadIntLinkFunction) (GstPad *pad); +/** + * GstPadIterIntLinkFunction: + * @pad: The #GstPad to query. + * + * The signature of the internal pad link iterator function. + * + * Returns: a new #GstIterator that will iterate over all pads that are + * linked to the given pad on the inside of the parent element. + * + * the caller must call gst_iterator_free() after usage. + * + * Since 0.10.21 + */ +typedef GstIterator* (*GstPadIterIntLinkFunction) (GstPad *pad); /* generic query function */ /** @@ -424,13 +463,16 @@ * be processed by @pad. The function is mostly overridden by elements that can * provide a hardware buffer in order to avoid additional memcpy operations. * - * The function can return a buffer that does not have @caps, in which case the - * upstream element requests a format change. If a format change was requested, - * the returned buffer will be one to hold the data of said new caps, so its - * size might be different from @size. + * The function can return a buffer that has caps different from the requested + * @caps, in which case the upstream element requests a format change to this + * new caps. + * If a format change was requested, the returned buffer will be one to hold + * the data of said new caps, so its size might be different from the requested + * @size. * * When this function returns anything else than #GST_FLOW_OK, the buffer allocation - * failed and @buf does not contain valid data. + * failed and @buf does not contain valid data. If the function returns #GST_FLOW_OK and + * the @buf is NULL, a #GstBuffer will be created with @caps, @offset and @size. * * By default this function returns a new buffer of @size and with @caps containing * purely malloced data. The buffer should be freed with gst_buffer_unref() @@ -530,7 +572,7 @@ * @unlinkfunc: function called when pad is unlinked * @peer: the pad this pad is linked to * @sched_private: private storage for the scheduler - * @chainfunc: function to chain data to pad + * @chainfunc: function to chain buffer to pad * @checkgetrangefunc: function to check if pad can operate in pull mode * @getrangefunc: function to get a range of data from a pad * @eventfunc: function to send an event to a pad @@ -541,6 +583,8 @@ * @bufferallocfunc: function to allocate a buffer for this pad * @do_buffer_signals: counter counting installed buffer signals * @do_event_signals: counter counting installed event signals + * @iterintlinkfunc: get the internal links iterator of this pad + * @block_destroy_data: notify function for gst_pad_set_blocked_async_full() * * The #GstPad structure. Use the functions to update the variables. */ @@ -608,8 +652,21 @@ gint do_buffer_signals; gint do_event_signals; + /* ABI added */ + /* iterate internal links */ + GstPadIterIntLinkFunction iterintlinkfunc; + + /* free block_data */ + GDestroyNotify block_destroy_data; + /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; + union { + struct { + gboolean block_callback_called; + GstPadPrivate *priv; + } ABI; + gpointer _gst_reserved[GST_PADDING - 2]; + } abidata; }; struct _GstPadClass { @@ -646,11 +703,18 @@ #define GST_PAD_QUERYTYPEFUNC(pad) (GST_PAD_CAST(pad)->querytypefunc) #define GST_PAD_QUERYFUNC(pad) (GST_PAD_CAST(pad)->queryfunc) #define GST_PAD_INTLINKFUNC(pad) (GST_PAD_CAST(pad)->intlinkfunc) +#define GST_PAD_ITERINTLINKFUNC(pad) (GST_PAD_CAST(pad)->iterintlinkfunc) #define GST_PAD_PEER(pad) (GST_PAD_CAST(pad)->peer) #define GST_PAD_LINKFUNC(pad) (GST_PAD_CAST(pad)->linkfunc) #define GST_PAD_UNLINKFUNC(pad) (GST_PAD_CAST(pad)->unlinkfunc) +/** + * GST_PAD_CAPS: + * @pad: a #GstPad. + * + * The caps for this pad. + */ #define GST_PAD_CAPS(pad) (GST_PAD_CAST(pad)->caps) #define GST_PAD_GETCAPSFUNC(pad) (GST_PAD_CAST(pad)->getcapsfunc) #define GST_PAD_SETCAPSFUNC(pad) (GST_PAD_CAST(pad)->setcapsfunc) @@ -821,6 +885,13 @@ IMPORT_C #endif +gboolean gst_pad_set_blocked_async_full (GstPad *pad, gboolean blocked, + GstPadBlockCallback callback, gpointer user_data, + GDestroyNotify destroy_data); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + gboolean gst_pad_is_blocked (GstPad *pad); #ifdef __SYMBIAN32__ IMPORT_C @@ -888,6 +959,11 @@ IMPORT_C #endif +void gst_pad_set_chain_list_function (GstPad *pad, GstPadChainListFunction chainlist); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + void gst_pad_set_getrange_function (GstPad *pad, GstPadGetRangeFunction get); #ifdef __SYMBIAN32__ IMPORT_C @@ -916,6 +992,11 @@ #endif +gboolean gst_pad_can_link (GstPad *srcpad, GstPad *sinkpad); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + GstPadLinkReturn gst_pad_link (GstPad *srcpad, GstPad *sinkpad); #ifdef __SYMBIAN32__ IMPORT_C @@ -962,7 +1043,7 @@ G_CONST_RETURN GstCaps* gst_pad_get_pad_template_caps (GstPad *pad); -/* capsnego function for connected/unconnected pads */ +/* capsnego function for linked/unlinked pads */ #ifdef __SYMBIAN32__ IMPORT_C #endif @@ -995,7 +1076,7 @@ gboolean gst_pad_peer_accept_caps (GstPad * pad, GstCaps *caps); -/* capsnego for connected pads */ +/* capsnego for linked pads */ #ifdef __SYMBIAN32__ IMPORT_C #endif @@ -1017,6 +1098,11 @@ IMPORT_C #endif +GstFlowReturn gst_pad_push_list (GstPad *pad, GstBufferList *list); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + gboolean gst_pad_check_pull_range (GstPad *pad); #ifdef __SYMBIAN32__ IMPORT_C @@ -1045,6 +1131,11 @@ IMPORT_C #endif +GstFlowReturn gst_pad_chain_list (GstPad *pad, GstBufferList *list); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + GstFlowReturn gst_pad_get_range (GstPad *pad, guint64 offset, guint size, GstBuffer **buffer); #ifdef __SYMBIAN32__ @@ -1087,6 +1178,24 @@ #endif GList* gst_pad_get_internal_links_default (GstPad *pad); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + + +void gst_pad_set_iterate_internal_links_function (GstPad * pad, + GstPadIterIntLinkFunction iterintlink); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +GstIterator * gst_pad_iterate_internal_links (GstPad * pad); +#ifdef __SYMBIAN32__ +IMPORT_C +#endif + +GstIterator * gst_pad_iterate_internal_links_default (GstPad * pad); + /* generic query function */ #ifdef __SYMBIAN32__