mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-16 17:10:35 +00:00
2c202f9120
Original commit message from CVS: * docs/design/part-gstbin.txt: * docs/design/part-gstbus.txt: * gst/gstbus.c: Add blurb about how the bus goes into flushing mode and drops all messages when its bin goes from READY into NULL state.
35 lines
1.6 KiB
Text
35 lines
1.6 KiB
Text
GstBus
|
|
------
|
|
|
|
The GstBus is an object responsible for delivering GstMessages in
|
|
a first-in first-out way from the streaming threads to the application.
|
|
|
|
Since the application typically only wants to deal with delivery of these
|
|
messages from one thread, the GstBus will marshall the messages between
|
|
different threads. This is important since the actual streaming of media
|
|
is done in another thread than the application.
|
|
|
|
The GstBus provides support for GSource based notifications. This makes it
|
|
possible to handle the delivery in the glib mainloop.
|
|
|
|
A message is posted on the bus with the gst_bus_post() method. With the
|
|
gst_bus_peek() and _pop() methods one can look at or retrieve a previously
|
|
posted message.
|
|
|
|
The bus can be polled with the gst_bus_poll() method. This methods blocks
|
|
up to the specified timeout value until one of the specified messages types
|
|
is posted on the bus. The application can then _pop() the messages from the
|
|
bus to handle them.
|
|
|
|
It is also possible to get messages from the bus without any thread
|
|
marshalling with the gst_bus_set_sync_handler() method. This makes it
|
|
possible to react to a message in the same thread that posted the
|
|
message on the bus. This should only be used if the application is able
|
|
to deal with messages from different threads.
|
|
|
|
When a pipeline or bin goes from READY into NULL state, it will set its bus
|
|
to flushing, ie. the bus will drop all existing and new messages on the bus,
|
|
This is necessary because bus messages hold references to the bin/pipeline
|
|
or its elements, so there are circular references that need to be broken if
|
|
one ever wants to be able to destroy a bin or pipeline properly.
|
|
|