gstreamer/markdown/design/gstelement.md

62 lines
2.7 KiB
Markdown
Raw Normal View History

# GstElement
The Element is the most important object in the entire GStreamer system,
as it defines the structure of the pipeline. Elements include sources,
filters, sinks, and containers (Bins). They may be an intrinsic part of
the core GStreamer library, or may be loaded from a plugin. In some
cases theyre even fabricated from completely different systems (see the
LADSPA plugin). They are generally created from a GstElementFactory,
which will be covered in another chapter, but for the intrinsic types
they can be created with specific functions.
Elements contains GstPads (also covered in another chapter), which are
subsequently used to connect the Elements together to form a pipeline
capable of passing and processing data. They have a parent, which must
be another Element. This allows deeply nested pipelines, and the
possibility of "black-box" meta-elements.
## Name
All elements are named, and while they should ideally be unique in any
given pipeline, they do not have to be. The only guaranteed unique name
for an element is its complete path in the object hierarchy. In other
words, an elements name is unique inside its parent. (This follows from
GstObjects name explanation)
This uniqueness is guaranteed through all functions where either
parentage or name of an element is changed.
## Pads
GstPads are the property of a given GstElement. They provide the
connection capability, with allowing arbitrary structure in the graph.
For any Element but a source or sink, there will be at least 2 Pads
owned by the Element. These pads are stored in a single GList within the
Element. Several counters are kept in order to allow quicker
determination of the type and properties of a given Element.
Pads may be added to an element with `_add_pad.` Retrieval is via
`_get_static_pad()`, which operates on the name of the Pad (the unique
key). This means that all Pads owned by a given Element must have unique
names. A pointer to the GList of pads may be obtained with
`_iterate_pads`.
`gst_element_add_pad(element,pads)`: Sets the element as the parent of
the pad, then adds the pad to the elements list of pads, keeping the
counts of total, src, and sink pads up to date. Emits the `new_pad`
signal with the pad as argument. Fails if either the element or pad are
either NULL or not what they claim to be. Should fail if the pad already
has a parent. Should fail if the pad is already owned by the element.
Should fail if theres already a pad by that name in the list of pads.
`pad = gst_element_get_pad(element, "padname")`: Searches through the
list of pads
## Ghost Pads
More info in [ghostpad](design/gstghostpad.md).
## State
An element has a state. More info in [state](design/states.md).