blob: ed071292e56ae0dae991c608a4114d02c5905012 [file] [log] [blame]
Context
-------
GstContext is a container object, containing a type string and a
generic GstStructure. It is used to store and propagate context
information in a pipeline, like device handles, display server
connections and other information that should be shared between
multiple elements in a pipeline.
For sharing context objects and distributing them between application
and elements in a pipeline, there are downstream queries, upstream
queries, messages and functions to set a context on a complete pipeline.
Context types
~~~~~~~~~~~~~
Context type names should be unique and be put in appropiate namespaces,
e.g. "gst.egl.EGLDisplay", go prevent name conflicts. Only one specific
type is allowed per context type name.
Elements
~~~~~~~~
Elements that need a specific context for their operation would
do the following steps until one succeeds:
1) Check if the element already has a context of the specific type,
i.e. it was previoulsy set via gst_element_set_context().
2) Query downstream with GST_QUERY_CONTEXT for the context and check if
downstream already has a context of the specific type
3) Query upstream with GST_QUERY_CONTEXT for the context and check if
upstream already has a context of the specific type
4) Post a GST_MESSAGE_NEED_CONTEXT message on the bus with the required
context types and afterwards check if a usable context was set now
as in 1). The message could be handled by the parent bins of the
element and the application.
4) Create a context by itself and post a GST_MESSAGE_HAVE_CONTEXT message
on the bus.
Bins will propagate any context that is set on them via
gst_element_set_context() to their child elements, including newly added
elements after the context was set.
Bins can handle the GST_MESSAGE_NEED_CONTEXT message, can filter both
messages and can also set different contexts for different pipeline parts.
Applications
~~~~~~~~~~~~
Applications can set a specific context on a pipeline or elements inside
a pipeline with gst_element_set_context().
If an element inside the pipeline needs a specific context, it will post
a GST_MESSAGE_NEED_CONTEXT message on the bus. The application can now
create a context of the requested type or pass an already existing
context to the element (or the complete pipeline).
Whenever an element creates a context internally it will post a
GST_MESSAGE_HAVE_CONTEXT message on the bus. Bins will cache these
contexts and pass them to any future elements that request them.