| OUTDATED |
| -------- |
| |
| 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 |