Gst.StateChange
These are the different state changes an element goes through. Gst.State.null ⇒ Gst.State.playing is called an upwards state change and Gst.State.playing ⇒ Gst.State.null a downwards state change.
- StateChange.NULL_TO_READY
state change from NULL to READY. <itemizedlist> <listitem><para> The element must check if the resources it needs are available. Device sinks and -sources typically try to probe the device to constrain their caps. </para></listitem> <listitem><para> The element opens the device (in case feature need to be probed). </para></listitem> </itemizedlist>
- StateChange.READY_TO_PAUSED
state change from READY to PAUSED. <itemizedlist> <listitem><para> The element pads are activated in order to receive data in PAUSED. Streaming threads are started. </para></listitem> <listitem><para> Some elements might need to return Gst.StateChangeReturn.async and complete the state change when they have enough information. It is a requirement for sinks to return Gst.StateChangeReturn.async and complete the state change when they receive the first buffer or Gst.EventType.eos (preroll). Sinks also block the dataflow when in PAUSED. </para></listitem> <listitem><para> A pipeline resets the running_time to 0. </para></listitem> <listitem><para> Live sources return Gst.StateChangeReturn.no_preroll and don't generate data. </para></listitem> </itemizedlist>
- StateChange.PAUSED_TO_PLAYING
state change from PAUSED to PLAYING. <itemizedlist> <listitem><para> Most elements ignore this state change. </para></listitem> <listitem><para> The pipeline selects a Gst.Clock and distributes this to all the children before setting them to PLAYING. This means that it is only alowed to synchronize on the Gst.Clock in the PLAYING state. </para></listitem> <listitem><para> The pipeline uses the Gst.Clock and the running_time to calculate the base_time. The base_time is distributed to all children when performing the state change. </para></listitem> <listitem><para> Sink elements stop blocking on the preroll buffer or event and start rendering the data. </para></listitem> <listitem><para> Sinks can post Gst.MessageType.eos in the PLAYING state. It is not allowed to post Gst.MessageType.eos when not in the PLAYING state. </para></listitem> <listitem><para> While streaming in PAUSED or PLAYING elements can create and remove sometimes pads. </para></listitem> <listitem><para> Live sources start generating data and return Gst.StateChangeReturn.success. </para></listitem> </itemizedlist>
- StateChange.PLAYING_TO_PAUSED
state change from PLAYING to PAUSED. <itemizedlist> <listitem><para> Most elements ignore this state change. </para></listitem> <listitem><para> The pipeline calculates the running_time based on the last selected Gst.Clock and the base_time. It stores this information to continue playback when going back to the PLAYING state. </para></listitem> <listitem><para> Sinks unblock any Gst.Clock wait calls. </para></listitem> <listitem><para> When a sink does not have a pending buffer to play, it returns Gst.StateChangeReturn.async from this state change and completes the state change when it receives a new buffer or an Gst.EventType.eos. </para></listitem> <listitem><para> Any queued Gst.MessageType.eos items are removed since they will be reposted when going back to the PLAYING state. The EOS messages are queued in Gst.Bin containers. </para></listitem> <listitem><para> Live sources stop generating data and return Gst.StateChangeReturn.no_preroll. </para></listitem> </itemizedlist>
- StateChange.PAUSED_TO_READY
state change from PAUSED to READY. <itemizedlist> <listitem><para> Sinks unblock any waits in the preroll. </para></listitem> <listitem><para> Elements unblock any waits on devices </para></listitem> <listitem><para> Chain or get_range functions return Gst.FlowReturn.flushing. </para></listitem> <listitem><para> The element pads are deactivated so that streaming becomes impossible and all streaming threads are stopped. </para></listitem> <listitem><para> The sink forgets all negotiated formats </para></listitem> <listitem><para> Elements remove all sometimes pads </para></listitem> </itemizedlist>
- StateChange.READY_TO_NULL
state change from READY to NULL. <itemizedlist> <listitem><para> Elements close devices </para></listitem> <listitem><para> Elements reset any internal state. </para></listitem> </itemizedlist>