From f18c4056f7ebf34093ccc3cc492565f3faab03f5 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sat, 13 Jan 2001 15:47:43 +0000 Subject: [PATCH] Added an updated use case for EOS handling. Original commit message from CVS: Added an updated use case for EOS handling. --- docs/random/wtay/eos4 | 84 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 docs/random/wtay/eos4 diff --git a/docs/random/wtay/eos4 b/docs/random/wtay/eos4 new file mode 100644 index 0000000000..dad31e22dc --- /dev/null +++ b/docs/random/wtay/eos4 @@ -0,0 +1,84 @@ + +case 1) + +(--------------------------------------------------) +! bin ! +! (--------) (--------) (--------) ! +! ! fakesrc! !identity! !fakesink! ! +! ! 1 src ----- sink 1 src ---- sink 1 ! ! +! (--------) (--------) (--------) ! +! ! +! (--------) (--------) (--------) ! +! !fakesrc ! !identity! !fakesink! ! +! ! 2 src ----- sink 2 src ---- sink 2 ! ! +! (--------) (--------) (--------) ! +(--------------------------------------------------) + + just two scheduled chains in a single bin. + +.scheduling. + + we have two chains here fs1-i1-fsk1 and fs2-i2-fsk2 + fakesrc1 will output 1 buffer, fakesrc2 3 buffers + +.eos. + + fs1 will call gst_pad_set_eos (src, TRUE) on its srcpad + in the _get function and returns a NULL buffer. + + gst_pad_set_eos will recurse down the pipeline and set + all the pads in i1 and fsk1 to EOS too. none of these elements + override the default behaviour so gst_pad_set_eos returns TRUE. + + fakesrc signals EOS. since an element in chain1 has signales + EOS, chain1 becomes EOS. All the elements in the chain are set + to the READY state and the chain is not scheduled anymore because + its EOS flag is on. + + the same procedure happens for chain2. At that point, the bin + has no chains to schedule and so it fires EOS. + + +case 2) + +(---------------------------------------------------) +! bin ! +! (--------) (--------) (---------) ! +! ! disksrc! ! mpg123 ! !audiosink! ! +! ! 1 src ----- sink 1 src ---- sink 1 ! ! +! (--------) (--------) (---------) ! +! ! +! (--------) (--------) (---------) ! +! !disksrc ! ! mpg123 ! !audiosink! ! +! ! 2 src ----- sink 2 src ---- sink 2 ! ! +! (--------) (--------) (---------) ! +(---------------------------------------------------) + + same as case 1, an mp3 mixer where the mixing is performed + in hardware (in the audiosink). + we want to show how the EOS state can be undone. + +.scheduling. + + we have two chains here ds1-mpg1-ask1 and ds2-mpg2-ask2 + the song in chain1 is about to end, chain2 has just begun + playing a song. + +.eos. + + disksrc1 will set the src pad to EOS with gst_pad_set_eos (pad, TRUE) + the call recurses up and down, disksrc1 signals EOS. the chain with + disksrc1 becomes EOS and is excluded from the scheduling algorithm. + disksrc1 is set to the READY state. + + the user then changes the location of disksrc1 to the new mp3 song. + The user then sets the element state of disksrc to PLAYING. disksrc + performs gst_pad_set_eos (pad, FALSE) + + the call recurses up and down and returns TRUE. chain1 is set to !EOS + so that it will be scheduled again. + + disksrc1 is set to PLAYING and the new mp3 is playing again. + + +