mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
Some more random thoughts
Original commit message from CVS: Some more random thoughts
This commit is contained in:
parent
f330cdb86c
commit
d18ed58ee4
3 changed files with 143 additions and 0 deletions
88
docs/random/wtay/clocking2
Normal file
88
docs/random/wtay/clocking2
Normal file
|
@ -0,0 +1,88 @@
|
|||
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 !-^
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
41
docs/random/wtay/clocking3
Normal file
41
docs/random/wtay/clocking3
Normal file
|
@ -0,0 +1,41 @@
|
|||
|
||||
blocking wait
|
||||
-------------
|
||||
|
||||
- allocate a new clock entry
|
||||
- add to list of pending sync waits
|
||||
- do {
|
||||
wait on entry
|
||||
} while (entry != restart)
|
||||
- free entry/remove from list
|
||||
|
||||
async wait
|
||||
----------
|
||||
|
||||
- if no thread, start thread
|
||||
- alloc a new clock entry
|
||||
- add to list of pending async waits
|
||||
- signal thread to restart timeouts
|
||||
|
||||
async thread
|
||||
------------
|
||||
|
||||
while (true) {
|
||||
if (no entry) wait for restart
|
||||
do {
|
||||
take first entry
|
||||
wait on it
|
||||
} while (entry != restart)
|
||||
call entry signal function
|
||||
free entry/remove from list
|
||||
}
|
||||
|
||||
clock adjust
|
||||
------------
|
||||
|
||||
- loop over sync/async entries
|
||||
- restart all entries
|
||||
|
||||
|
||||
|
||||
|
14
docs/random/wtay/padprobes
Normal file
14
docs/random/wtay/padprobes
Normal file
|
@ -0,0 +1,14 @@
|
|||
PadProbes
|
||||
---------
|
||||
|
||||
Required functionality
|
||||
|
||||
- get notification of data passing on arbitrary pad
|
||||
- posibility to drop data
|
||||
- posibility to change/inspect data
|
||||
- single shot probe
|
||||
- filter on events/buffers?
|
||||
- filter on timestamp?
|
||||
- filter on types of events?
|
||||
|
||||
|
Loading…
Reference in a new issue