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