gstreamer/docs/random/states.old

81 lines
2.8 KiB
Text
Raw Normal View History

GST States and Transition Rules (graph to follow)
-------------------------------
This should be a map of possible state transitions and what triggers them.
What the states are:
GST_STATE_NEW: a new element has this, if it has nothing set except name.
GST_STATE_INCOMPLETE: any element that has some, but not enough
information to function is in this state.
GST_STATE_COMPLETE: if the element has enough data, but is not in any kind
of running or explicitely stopped state. ready to be used.
GST_STATE_DISCOVERY: anything the element does in this state must be reset
after discovery. any data read from sync source must be cached.
GST_STATE_PREROLL: not a lot different from PLAYING, except sinks don't
render what they're getting. useful for elements that require
data to get in sync, such as an MPEG video decoder that needs
IBBPBB before starting at the next P.
GST_STATE_RUNNING: this is the normal state of the pipeline, where data
goes all the way through the pipeline normally.
GST_STATE_STOPPED: an explicit stop state, different from COMPLETE in that
the state doesn't get reset.
NULL -> GST_STATE_NEW
creating an element (gst_*_new*)
GST_STATE_NEW -> GST_STATE_INCOMPLETE
setting anything in the element that isn't sufficient to bring it
to a useful state (gst_object_set)
GST_STATE_INCOMPLETE -> GST_STATE_COMPLETE
setting whatever the last bit of info the element was looking for
(gst_object_set)
GST_STATE_COMPLETE -> GST_STATE_INCOMPLETE
changing anything that invalidates the complete state of the element
GST_STATE_COMPLETE -> GST_STATE_DISCOVERY
setting the state to DISCOVERY
[ used for autoplug ]
GST_STATE_DISCOVERY -> GST_STATE_COMPLETE
setting the state !DISCOVERY
[ used when autoplug is over ]
GST_STATE_DISCOVERY -> GST_STATE_PREROLL
setting the state to PREROLL
[ you can go straight to preroll from discovery if you want ]
GST_STATE_DISCOVERY -> GST_STATE_RUNNING
setting the state to RUNNING
[ you can even go straight to running from preroll ]
GST_STATE_DISCOVERY -> GST_STATE_STOPPED
setting the state to STOPPED
[ normally you'd go from discovery to stopped when you load a src ]
GST_STATE_PREROLL -> GST_STATE_RUNNING
setting the state to RUNNING
[ preroll generally leads straight to running, as in above ]
GST_STATE_PREROLL -> GST_STATE_STOPPED
setting the state to STOPPED
[ it is possible to go to stopped, i.e load file@time ]
GST_STATE_RUNNING -> GST_STATE_PREROLL
setting the state to PREROLL
[ unsure if you'd need this state, you'd go to stopped first ]
GST_STATE_RUNNING -> GST_STATE_STOPPED
setting the state to STOPPED
[ pause. ]
GST_STATE_STOPPED -> GST_STATE_PREROLL
setting the state to PREROLL
[ if you seek to intermediate time while stopped, you'd preroll to
prepare to start running again immediately ]
GST_STATE_STOPPED -> GST_STATE_RUNNING
setting the state to RUNNING