| Stream Status |
| ------------- |
| |
| This document describes the design and use cases for the stream status |
| messages. |
| |
| STREAM_STATUS messages are posted on the bus when the state of a streaming |
| thread changes. The purpose of this message is to allow the application to |
| interact with the streaming thread properties, such as the thread priority or |
| the threadpool to use. |
| |
| We accommodate for the following requirements: |
| |
| - Application is informed when a streaming thread is about to be created. It |
| should be possible for the application to suggest a custom GstTaskPool. |
| - Application is informed when the status of a streaming thread is changed. |
| This can be interesting for GUI application that want to visualize the status |
| of the streaming threads (playing/paused/stopped) |
| - Application is informed when a streaming thread is destroyed. |
| |
| We allow for the following scenarios: |
| |
| - Elements require a specific (internal) streaming thread to operate or the |
| application can create/specify a thread for the element. |
| - Elements allow the application to configure a priority on the threads. |
| |
| |
| Use cases |
| ~~~~~~~~~ |
| |
| * boost the priority of the udp receiver streaming thread |
| |
| .--------. .-------. .------. .-------. |
| | udpsrc | | depay | | adec | | asink | |
| | src->sink src->sink src->sink | |
| '--------' '-------' '------' '-------' |
| |
| - when going from READY to PAUSED state, udpsrc will require a streaming |
| thread for pushing data into the depayloader. It will post a STREAM_STATUS |
| message indicating its requirement for a streaming thread. |
| |
| - The application will usually react to the STREAM_STATUS messages with a sync |
| bus handler. |
| |
| - The application can configure the GstTask with a custom GstTaskPool to |
| manage the streaming thread or it can ignore the message which will make |
| the element use its default GstTaskPool. |
| |
| - The application can react to the ENTER/LEAVE stream status message to |
| configure the thread right before it is started/stopped. This can be used to |
| configure the thread priority. |
| |
| - Before the GstTask is changed state (start/pause/stop) a STREAM_STATUS |
| message is posted that can be used by the application to keep track of |
| the running streaming threads. |
| |
| |
| Messages |
| ~~~~~~~~ |
| |
| The existing STREAM_STATUS message will be further defined and implemented in |
| (selected) elements. The following fields will be contained in the message: |
| |
| - "type", GST_TYPE_STREAM_STATUS_TYPE |
| |
| - a set of types to control the lifecycle of the thread: |
| GST_STREAM_STATUS_TYPE_CREATE: a new streaming thread is going to be |
| created. The application has the chance to configure a custom thread. |
| GST_STREAM_STATUS_TYPE_ENTER: the streaming thread is about to enter its |
| loop function for the first time. |
| GST_STREAM_STATUS_TYPE_LEAVE: the streaming thread is about to leave its |
| loop. |
| GST_STREAM_STATUS_TYPE_DESTROY: a streaming thread is destroyed |
| |
| - A set of types to control the state of the threads: |
| GST_STREAM_STATUS_TYPE_START: a streaming thread is started |
| GST_STREAM_STATUS_TYPE_PAUSE: a streaming thread is paused |
| GST_STREAM_STATUS_TYPE_STOP: a streaming thread is stopped |
| |
| - "owner", GST_TYPE_ELEMENT |
| The owner element of the thread. The message source will contain the pad |
| (or one of the pads) that will produce data by this thread. If this thread |
| does not produce data on a pad, the message source will contain the owner |
| as well. The idea is that the application should be able to see from the |
| element/pad what function this thread has in the context of the |
| application and configure the thread appropriatly. |
| |
| - "object", G_TYPE, GstTask/GThread |
| A GstTask/GThread controlling this streaming thread. |
| |
| - "flow-return", GstFlowReturn |
| A status code for why the thread state changed. when threads are created |
| and started, this is usually GST_FLOW_OK but when they are stopping it |
| contains the reason code why it stopped. |
| |
| - "reason", G_TYPE_STRING |
| A string describing the reason why the thread started/stopped/paused. |
| Can be NULL if no reason is given. |
| |
| |
| |
| Events |
| ~~~~~~ |
| |
| |
| |
| |
| |