| The clock | |
| --------- | |
| The clock always returns reference time | |
| Element State change | |
| -------------------- | |
| Each element receives the current clock reference time | |
| in the state change function. | |
| On PAUSED to PLAYING | |
| An element starts sending buffers with timestamp | |
| reftime + internal counter | |
| After a seek, the element sets internal counters to 0 | |
| Bin state change | |
| ---------------- | |
| PAUSED to PLAYING | |
| bin propagates clock time to children | |
| Toplevel bin state change | |
| ------------------------- | |
| PAUSED to PLAYING | |
| start time is set to ref time | |
| stream time is thus 0 | |
| start time is sent to state change of children | |
| use case 1 | |
| ---------- | |
| filesrc ! mad ! osssink | |
| pipeline PAUSED to PLAYING: | |
| start time = ref time | |
| filesrc state change gets starttime | |
| mad state change gets starttime | |
| osssink state change gets starttime | |
| mad sends buffers with timestamp starttime + internal counter | |
| osssink syncs these samples against the clock with starttime + timestamp | |
| PLAYING to PAUSED | |
| nothing happens | |
| use case 2 | |
| ---------- | |
| { filesrc ! mad ! queue } ! osssink | |
| let it play for a while | |
| PAUSE the thread | |
| PLAY the thread | |
| thread is not the toplevel bin, use same starttime as when | |
| it first started. | |
| do state change on elements with same starttime | |
| use case 3 | |
| ---------- | |
| filesrc ! mad ! mixer ! osssink | |
| ! | |
| filesrc ! mad !-^ | |