blob: fbe6bf42d65934d696a5d73f235cfb50aab29fad [file] [log] [blame]
Dynamic pads are pads that are created while the element is playing.
This means that the element will create a new pas depending on the
media type it is handling. For example, the mpeg1pdemuxer element will
create one or more video pads and one or more audio pads depending
on the number of elementtary streams found in the media stream.
The element will present its dynamic pads with the padtemplate list
attached to the elementfactory. both the MIME type, direction, presence
and properties of a pad can be obtained from the elementfactory using
the padtemplates.
Dynamic pad usually have the presence indicator set to
GST_PAD_SOMETIMES. This indicated that the pad might become
available at runtime. When the pad is actually created in the
element, the element will signal the new_pad signal. This signal can
then be used to attach a desired (compatible) element to the
pad.
For certain elements, like a tee and a muxer, we need another pad
presence flag: GST_PAD_REQUEST. With this flag, the
elementfactory will announce that some of the pads are available on
request. For the tee element, for example, one might obtain a new output
pad by looking up a suitable padtemplate (temp) and performing:
gst_element_request_new_pad (element, temp). The element will then
create a new pad from the template (sink or source) and will return
a handle to it. You can then connect elements to this new pad.
The muxer element (an avi encoder, for example) might expose several
padtemplates for audio and video. The typical usage pattern for the
muxer would then be: create a compressor element (JPEG). Get the
src pad of the compressor, Request a new pad from the element using the
padtemplate provided by the compressor src pad and connect the
compressor element to this pad.
An element that can be requested for a new pad has to implement the
gst_element_request_new_pad method and perform the nessesary steps
to create a pad from that template.
This interesting behaviour can be extended to ghostpads too. A
compound element (a bin with internal elements) will also expose some
padtemplates, either from the internal elements or from itself. Along
with a new GstGhostPad class, this also solves the naming conflicts
we might have with the ghostpads. The compound element will override
the request_new_pad function and figure out which element it needs
to get a pad from.
Related to this solution: we will move the tee element to the
gst/elements/ directory because there is no point in having the
header files anymore. The new pad request API will become a feature
of gstelement so gsttee becomes a real element too.