2.4 KiB
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 appropriate namespaces, to prevent name conflicts, e.g. "gst.egl.EGLDisplay". 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:
-
Check if the element already has a context of the specific type, i.e. it was previously set via
gst_element_set_context()
. -
Query downstream with
GST_QUERY_CONTEXT
for the context and check if downstream already has a context of the specific type -
Query upstream with
GST_QUERY_CONTEXT
for the context and check if upstream already has a context of the specific type -
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. -
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 to their child
elements via gst_element_set_context()
. Even to elements added after
a given context has been 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 to 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 element that requests them.