1) transitions -------------- There are four states, NULL, READY, PAUSED, PLAYING. state transitions only happen from once neighbouring state to another. NULL: the element is just being created, the initial state. ! ! the element creates all of its resources (a thread will create ! its pthread etc..) ! - most used by bins to set up thread context for its children v READY: the element is ready to start processing. ! ! the element sets up its state so it can start processing buffers. ! - open devices v PAUSED: the element is paused ! ! the element starts spinning ! v PLAYING: the element is playing ! ! the element stops spinning ! the element frees resources from other plugins (bufferpools) ! v PAUSED ! element removes caps from pads ! reset internal state ! - close devices ! v READY ! ! the element frees all of its resources (eg: pthread_join) ! v NULL 2) bin transition ----------------- the state of a bin is equal to the maximum state of its children. 3) interaction with the scheduler --------------------------------- elements in the !PLAYING state are disabled in the scheduler. 4) action that can be performed by the app in the different states ------------------------------------------------------------------ PLAYING: nothing, only iterate on the pipeline, some properties can be changed. PAUSED: elements can be connected, removed, disconnected. some properties can be changed READY: as in PAUSED but *all* properties can be changed. NULL: everything.