| 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 !-^ |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |