GStreamer Core Reference Manual | |||
---|---|---|---|
<<< Previous Page | Home | Up | Next Page >>> |
GstElement are connected to each other via "pads", which are extremely light-weight generic connections. After two pad are retrieved from an element with gst_element_get_pad(), the pads can be connected with gst_pad_connect().
Pads are typically created from a GstPadTemplate with gst_pad_new_from_template().
Pad have GstCaps attached to it to describe the media type they are capable of dealing with. gst_pad_get_caps() and gst_pad_set_caps() are used to manipulate the caps of the pads. Pads created from a padtemplate cannot set capabilities that are incompatible with the padtemplates capabilities.
Pads without padtemplates can be created with gst_pad_new() which takes a direction and a name as an argument.
gst_pad_get_parent() will retrieve the GstElement that owns the pad.
GstElements creating a pad will typicilally use the various gst_pad_set_*_function() calls to register callbacks for various events on the pads.
GstElements will use gst_pad_push() and gst_pad_pull() to push out or pull a buffer in. The gst_pad_pullregion() function can be used to request for a buffer with a specific offset (in time or in bytes). gst_pad_select() and gst_pad_selectv() are use by plugins to wait on a set of pads for a new GstBuffer or GstEvent.
To send an event on a pad, use gst_pad_send_event().
#define GST_PAD_ELEMENT_PRIVATE(pad) (((GstPad *)(pad))->element_private) |
Get the private data set by the element that owns the pad.
#define GST_PAD_PARENT(pad) ((GstElement *)(GST_OBJECT_PARENT(pad))) |
Get the parent element of this pad.
#define GST_PAD_PAD_TEMPLATE(pad) (((GstPad *)(pad))->padtemplate) |
Get the padtemplate that was used to create this pad. NULL if no padtemplate was used.
#define GST_PAD_REALIZE(pad) (GST_IS_REAL_PAD(pad) ? ((GstRealPad *)(pad)) : GST_GPAD_REALPAD(pad)) |
Return the real pad of this pad.
#define GST_PAD_DIRECTION(pad) GST_RPAD_DIRECTION(GST_PAD_REALIZE(pad)) |
Get the pad direction.
#define GST_PAD_CAPS(pad) GST_RPAD_CAPS(GST_PAD_REALIZE(pad)) |
Get the capabilities of a pad.
#define GST_PAD_PEER(pad) GST_PAD_CAST(GST_RPAD_PEER(GST_PAD_REALIZE(pad))) |
Get the peerpad of this pad.
#define GST_PAD_CAN_PULL(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->gethandler != NULL) |
Can this pad be used to pull a buffer.
#define GST_PAD_IS_SINK(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SINK) |
Check if the pad is a sinkpad.
#define GST_PAD_IS_SRC(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SRC) |
Check if the pad is a srcpad.
#define GST_PAD_IS_CONNECTED(pad) (GST_PAD_PEER(pad) != NULL) |
Checks if the pad is connected
void (*GstPadChainFunction) (GstPad *pad, GstBuffer *buf); |
The function that will be called when chaining buffers.
GstBuffer* (*GstPadGetFunction) (GstPad *pad); |
The function that will be called when pulling a buffer.
pad : | the pad to get a buffer from |
Returns : | a GstBuffer |
GstBufferPool* (*GstPadBufferPoolFunction) (GstPad *pad); |
The function that will be called when a bufferpool is requested from this pad.
GstCaps* (*GstPadGetCapsFunction) (GstPad *pad, GstCaps *caps); |
Return the caps of the specified pad. By default this function will return the pad template caps but can optionally be overridden.
gboolean (*GstPadEventFunction) (GstPad *pad, GstEvent *event); |
Function signature to handle an event for the pad.
GstPadConnectReturn (*GstPadConnectFunction) (GstPad *pad, GstCaps *caps); |
Function signature to handle a new connection on the pad.
typedef enum { GST_PAD_CONNECT_REFUSED = -1, GST_PAD_CONNECT_DELAYED = 0, GST_PAD_CONNECT_OK = 1, GST_PAD_CONNECT_DONE = 2 } GstPadConnectReturn; |
The result of a pad connection.
gboolean (*GstPadConvertFunction) (GstPad *pad, GstFormat src_format, gint64 src_value, GstFormat *dest_format, gint64 *dest_value); |
The signature of a convert function.
gboolean (*GstPadDispatcherFunc) (GstPad *pad, gpointer data); |
The signature of the dispatcher callback.
GList* (*GstPadIntConnFunction) (GstPad *pad); |
The signature of the internal pad connection function
typedef enum { GST_PAD_QUERY_TOTAL, GST_PAD_QUERY_POSITION, GST_PAD_QUERY_LATENCY, GST_PAD_QUERY_JITTER } GstPadQueryType; |
The different supported query types
gboolean (*GstPadQueryFunction) (GstPad *pad, GstPadQueryType type, GstFormat *format, gint64 *value); |
The signature of query function
typedef enum { GST_PAD_UNKNOWN, GST_PAD_SRC, GST_PAD_SINK } GstPadDirection; |
The direction this pad is.
typedef enum { GST_PAD_DISABLED = GST_OBJECT_FLAG_LAST, GST_PAD_EOS, GST_PAD_FLAG_LAST = GST_OBJECT_FLAG_LAST + 4 } GstPadFlags; |
Flags for the pad.
GstPad* gst_pad_new (const gchar *name, GstPadDirection direction); |
Create a new pad with given name.
GstPad* gst_pad_custom_new (GType type, const gchar *name, GstPadDirection direction); |
Create a new pad with given name from the given type.
GstPad* gst_pad_custom_new_from_template (GType type, GstPadTemplate *templ, const gchar *name); |
Create a new pad with given name from the given template.
GstPad* gst_pad_new_from_template (GstPadTemplate *templ, const gchar *name); |
Create a new pad with given name from the given template.
GstPadDirection gst_pad_get_direction (GstPad *pad); |
Get the direction of the pad.
void gst_pad_set_chain_function (GstPad *pad, GstPadChainFunction chain); |
Set the given chain function for the pad.
void gst_pad_set_get_function (GstPad *pad, GstPadGetFunction get); |
Set the given get function for the pad.
void gst_pad_set_bufferpool_function (GstPad *pad, GstPadBufferPoolFunction bufpool); |
Set the given bufferpool function for the pad.
void gst_pad_set_connect_function (GstPad *pad, GstPadConnectFunction connect); |
Set the given connect function for the pad. It will be called when the pad is connected or reconnected with caps.
void gst_pad_set_getcaps_function (GstPad *pad, GstPadGetCapsFunction getcaps); |
Set the given getcaps function for the pad.
gboolean gst_pad_try_set_caps (GstPad *pad, GstCaps *caps); |
Try to set the caps on the given pad.
gboolean gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad); |
Check if two pads have compatible capabilities.
void gst_pad_set_element_private (GstPad *pad, gpointer priv); |
Set the given private data pointer to the pad. This function can only be used by the element that own the pad.
gpointer gst_pad_get_element_private (GstPad *pad); |
Get the private data of a pad. The private data can only be set by the parent element of this pad.
void gst_pad_set_parent (GstPad *pad, GstObject *parent); |
Sets the parent object of a pad.
GstElement* gst_pad_get_parent (GstPad *pad); |
Get the parent object of this pad.
GstScheduler* gst_pad_get_scheduler (GstPad *pad); |
Get the scheduler of the pad
void gst_pad_set_scheduler (GstPad *pad, GstScheduler *sched); |
Set the scheduler for the pad
void gst_pad_unset_scheduler (GstPad *pad); |
Unset the scheduler for the pad
GstElement* gst_pad_get_real_parent (GstPad *pad); |
Get the real parent object of this pad. If the pad is a ghostpad, the actual owner of the real pad is returned, as opposed to the gst_pad_get_parent().
void gst_pad_add_ghost_pad (GstPad *pad, GstPad *ghostpad); |
Add a ghost pad to a pad.
void gst_pad_remove_ghost_pad (GstPad *pad, GstPad *ghostpad); |
Remove a ghost pad from a pad.
GList* gst_pad_get_ghost_pad_list (GstPad *pad); |
Get the ghost parents of this pad.
gboolean gst_pad_connect (GstPad *srcpad, GstPad *sinkpad); |
Connects the source pad to the sink pad.
gboolean gst_pad_connect_filtered (GstPad *srcpad, GstPad *sinkpad, GstCaps *filtercaps); |
Connects the source pad to the sink pad. The filter indicates the media type that should flow trought this connection.
gboolean gst_pad_reconnect_filtered (GstPad *srcpad, GstPad *sinkpad, GstCaps *filtercaps); |
Try to reconnect this pad and its peer with the specified caps.
gboolean gst_pad_try_reconnect_filtered (GstPad *srcpad, GstPad *sinkpad, GstCaps *filtercaps); |
Try to reconnect this pad and its peer with the specified caps
void gst_pad_disconnect (GstPad *srcpad, GstPad *sinkpad); |
Disconnects the source pad from the sink pad.
gboolean gst_pad_can_connect (GstPad *srcpad, GstPad *sinkpad); |
Checks if the source pad can be connected to the sink pad.
gboolean gst_pad_can_connect_filtered (GstPad *srcpad, GstPad *sinkpad, GstCaps *filtercaps); |
Checks if the source pad and the sink pad can be connected. The filter indicates the media type that should flow trought this connection.
void gst_pad_push (GstPad *pad, GstBuffer *buf); |
Push a buffer to the peer of the pad.
GstBufferPool* gst_pad_get_bufferpool (GstPad *pad); |
Get the bufferpool of the peer pad of the given pad.
void gst_pad_load_and_connect (xmlNodePtr self, GstObject *parent); |
Read the pad definition from the XML node and connect the given pad in element to a pad of an element up in the hierarchy.
GstPadConnectReturn gst_pad_proxy_connect (GstPad *pad, GstCaps *caps); |
Proxy the connect function to the specified pad.
GstPadTemplate* gst_pad_get_pad_template (GstPad *pad); |
Get the padtemplate object of this pad.
GstCaps* gst_pad_get_pad_template_caps (GstPad *pad); |
Get the capabilities of this pad.
GstCaps* gst_pad_get_allowed_caps (GstPad *pad); |
Get the caps of the allowed media types that can go through this pad.
gboolean gst_pad_recalc_allowed_caps (GstPad *pad); |
Attempt to reconnect the pad to its peer through its filter, set with gst_pad_[re]connect_filtered. This function is useful when a plugin has new capabilities on a pad and wants to notify the peer.
gboolean gst_pad_perform_negotiate (GstPad *srcpad, GstPad *sinkpad); |
Try to negotiate the pads.
xmlNodePtr gst_pad_ghost_save_thyself (GstPad *pad, GstElement *bin, xmlNodePtr parent); |
Saves the ghost pad into an xml representation.
GstPad* gst_pad_select (GList *padlist); |
Wait for a buffer on the list of pads.
padlist : | A list of pads |
Returns : | The pad that has a buffer available, use gst_pad_pull to get the buffer. |
GstPad* gst_pad_selectv (GstPad *pad, ...); |
Wait for a buffer on the given of pads.
pad : | The first pad to perform the select on |
... : | More pads |
Returns : | The pad that has a buffer available, use gst_pad_pull to get the buffer. |
gboolean gst_pad_dispatcher (GstPad *pad, GstPadDispatcherFunc dispatch, gpointer data); |
Invoke the given dispatcher function on all internally connected pads of the given pad. The GstPadDispatcherFunc should return TRUE when no further pads need to be preocessed.
gboolean gst_pad_send_event (GstPad *pad, GstEvent *event); |
Send the event to the pad.
gboolean gst_pad_event_default (GstPad *pad, GstEvent *event); |
Invoke the default event handler for the given pad.
void gst_pad_set_event_function (GstPad *pad, GstPadEventFunction event); |
Set the given event handler for the pad.
void gst_pad_set_convert_function (GstPad *pad, GstPadConvertFunction convert); |
Set the given convert function for the pad.
gboolean gst_pad_convert (GstPad *pad, GstFormat src_format, gint64 src_value, GstFormat *dest_format, gint64 *dest_value); |
Invoke a conversion on the pad.
gboolean gst_pad_convert_default (GstPad *pad, GstFormat src_format, gint64 src_value, GstFormat *dest_format, gint64 *dest_value); |
Invoke the default converter on a pad. This will forward the call to the pad obtained using the internal connection of the element.
GList* gst_pad_get_internal_connections (GstPad *pad); |
Get a GList of pads that this pad is connected to internally to the parent element.
GList* gst_pad_get_internal_connections_default (GstPad *pad); |
Get a GList of pads that this pad is connected to internally to the parent element.
void gst_pad_set_internal_connection_function (GstPad *pad, GstPadIntConnFunction intconn); |
Set the given internal connection function for the pad.
void gst_pad_set_query_function (GstPad *pad, GstPadQueryFunction query); |
Set the given query function for the pad.
gboolean gst_pad_query (GstPad *pad, GstPadQueryType type, GstFormat *format, gint64 *value); |
Query a pad for one of the available GstPadQuery properties.
gboolean gst_pad_query_default (GstPad *pad, GstPadQueryType type, GstFormat *format, gint64 *value); |
Invoke the default query function on a pad.
struct GstRealPad { GstPad pad; GstCaps *caps; GstCaps *filter; GstCaps *appfilter; GstPadDirection direction; GstScheduler *sched; gpointer sched_private; GstRealPad *peer; GstBuffer *bufpen; GstPadChainFunction chainfunc; GstPadChainFunction chainhandler; GstPadGetFunction getfunc; GstPadGetFunction gethandler; GstPadEventFunction eventfunc; GstPadEventFunction eventhandler; GstPadConvertFunction convertfunc; GstPadQueryFunction queryfunc; GstPadIntConnFunction intconnfunc; GstPadGetCapsFunction getcapsfunc; GstPadConnectFunction connectfunc; GstPadBufferPoolFunction bufferpoolfunc; GList *ghostpads; }; |
#define GST_RPAD_SCHED(pad) (((GstRealPad *)(pad))->sched) |
Get the scheduler of this real pad.
#define GST_RPAD_DIRECTION(pad) (((GstRealPad *)(pad))->direction) |
Get the direction of the real pad.
#define GST_RPAD_CAPS(pad) (((GstRealPad *)(pad))->caps) |
Get the caps of the real pad.
#define GST_RPAD_PEER(pad) (((GstRealPad *)(pad))->peer) |
Get the peer element of the real pad.
#define GST_RPAD_BUFPEN(pad) (((GstRealPad *)(pad))->bufpen) |
Get the bufpen of the real pad.
#define GST_RPAD_CHAINFUNC(pad) (((GstRealPad *)(pad))->chainfunc) |
Get the chain function of the real pad.
#define GST_RPAD_FILTER(pad) (((GstRealPad *)(pad))->filter) |
Get the filter from the pad
#define GST_RPAD_APPFILTER(pad) (((GstRealPad *)(pad))->appfilter) |
Get the application filter for this pad
#define GST_RPAD_GETFUNC(pad) (((GstRealPad *)(pad))->getfunc) |
Get get getfunction of the real pad.
#define GST_RPAD_BUFFERPOOLFUNC(pad) (((GstRealPad *)(pad))->bufferpoolfunc) |
Get the bufferpoolfunction from the real pad.
#define GST_RPAD_CHAINHANDLER(pad) (((GstRealPad *)(pad))->chainhandler) |
Get the eventhandler function from the real pad.
#define GST_RPAD_EVENTFUNC(pad) (((GstRealPad *)(pad))->eventfunc) |
Get the event function of this real pad.
#define GST_RPAD_EVENTHANDLER(pad) (((GstRealPad *)(pad))->eventhandler) |
Get the eventhandler function of this real pad.
#define GST_RPAD_GETHANDLER(pad) (((GstRealPad *)(pad))->gethandler) |
Get the gethandler function of this real pad.
#define GST_RPAD_CONNECTFUNC(pad) (((GstRealPad *)(pad))->connectfunc) |
Get the connect function of the pad
#define GST_RPAD_GETCAPSFUNC(pad) (((GstRealPad *)(pad))->getcapsfunc) |
Get the getcaps function of this pad
#define GST_RPAD_CONVERTFUNC(pad) (((GstRealPad *)(pad))->convertfunc) |
Get the convert function of this pad
#define GST_RPAD_INTCONNFUNC(pad) (((GstRealPad *)(pad))->intconnfunc) |
Get the internal connection function of this pad
#define GST_RPAD_QUERYFUNC(pad) (((GstRealPad *)(pad))->queryfunc) |
Get the query function of this pad
#define GST_GPAD_REALPAD(pad) (((GstGhostPad *)(pad))->realpad) |
Get the real pad of this ghost pad.