OUTDATED
--------


case 1) 

(--------------------------------------------------)
! bin                                              !
! (--------)         (--------)         (--------) !
! ! fakesrc!         !identity!         !fakesink! !
! !       src ----- sink     src ---- sink       ! !
! (--------)         (--------)         (--------) !
(--------------------------------------------------)

.scheduling.
  
  case1 has just one scheduled entity (chain) no problem here.

.eos.

  fakesrc detects the end of stream. It just returned the last buffer.
  The next _pull will cause the srcpad to trigger gst_pad_set_eos ().
  After that it will return a NULL buffer.

  gst_pad_set_eos() will notify the parent about the plugins attempt to
  signal eos. the parent disables scheduling for the chain containing
  fakesrc.
  
  no more chains are being scheduled so the bin fires EOS.


case 2) 


(-----------------------------------------------------------------------)
! bin                                                                   !
!                                                     (---------------) !
!                                                     !thread         ! !
! (--------)         (--------)         (--------)    !     (--------)! !
! ! fakesrc!         !identity!         !  queue !    !     !fakesink!! !
! !       src ----- sink     src ---- sink       src ---- sink       !! !
! (--------)         (--------)         (--------)    !     (--------)! !
!                                                     (---------------) !
(-----------------------------------------------------------------------)

.scheduling.

  case2 has two scheduled entities: fsr-i-q, q-fsk.
  The first one is scheduled by the bin, the second one by the thread.
  
.eos.

  fakesrc detects the end of stream. It just returned the last buffer.
  The next _pull will cause the srcpad to trigger gst_pad_set_eos ().
  After that it will return a NULL buffer.

  gst_pad_set_eos() will notify the parent about the plugins attempt to
  signal eos. the parent will take chain1 out if its scheduled chains.

  the bin does not fire EOS yet because the thread has not yet signaled 
  EOS.

  after the queue has sent out the last buffer, its calls eos on its
  src pad. the chain with the queue is removed from the threads scheduled
  chains. there are no more chains to schedule, the thread fires EOS.

  The bin now has no more scheduled chains and no more pending subbins,
  it fires EOS.


case 3) 

(-----------------------------------------------------------------------)
! bin                                                                   !
!                                                     (---------------) !
!                                                     !thread         ! !
! (--------)         (--------)         (--------)    !     (--------)! !
! ! fakesrc!         !  tee   !         ! queue1 !    !     !fakesink!! !
! !       src ----- sink     src ---- sink       src ---- sink       !! !
! (--------)         !        !         (--------)    !     (--------)! !
!                    !        !                       (---------------) !
!                    !        !                                         !
!                    !        !                       (---------------) !
!                    !        !                       !thread         ! !
!                    !        !         (--------)    !     (--------)! !
!                    !        !         ! queue2 !    !     !fakesink!! !
!                    !       src ---- sink       src ---- sink       !! !
!                    !        !         (--------)    !     (--------)! !
!                    (--------)                       (---------------) !
(-----------------------------------------------------------------------)

.scheduling.

  case3 has tree scheduled entities: fsr-t(-q1,-q2), q1-fsk. q2-fsk
  the first one is managed by the bin, the second two are managed by the
  threads.
  
.eos.

  fakesrc detects the end of stream. It just returned the last buffer.
  The next _pull will cause the srcpad to trigger gst_pad_set_eos ().
  After that it will return a NULL buffer.

  chain1 is taken out of the scheduling algorithm of the bin.

  after a while, the threads finish their scheduling and fire EOS too.

  The bin now has no more scheduled chains and no more pending subbins,
  it fires EOS.
  
  
case 4) 

(-----------------------------------------------------------------------)
! bin                                                                   !
!                                                     (---------------) !
!                                                     !thread         ! !
! (--------)       (----------)         (--------)    !     (--------)! !
! ! fakesrc!       !mpeg1parse!         ! queue1 !    !     !fakesink!! !
! !       src -- sink        src ---- sink       src ---- sink       !! !
! (--------)       !          !         (--------)    !     (--------)! !
!                  !          !                       (---------------) !
!                  !          !                                         !
!                  !          !                       (---------------) !
!                  !          !                       !thread         ! !
!                  !          !         (--------)    !     (--------)! !
!                  !          !         ! queue2 !    !     !fakesink!! !
!                  !         src ---- sink       src ---- sink       !! !
!                  !          !         (--------)    !     (--------)! !
!                  (----------)                       (---------------) !
(-----------------------------------------------------------------------)

  this case differs from case3 in that one of the queues can be empty
  while the other isn't. we assume queue1 is empty while queue2 isn't yet.

.scheduling.

  case3 has tree scheduled entities: fsr-t(-q1,-q2), q1-fsk. q2-fsk
  the first one is managed by the bin, the second two are managed by the
  threads.
  
.eos.

  fakesrc detects the end of stream. It just returned the last buffer.
  The next _pull will cause the srcpad to trigger gst_pad_set_eos ().
  After that it will return a NULL buffer.

  chain1 is taken out of the scheduling algorithm of the bin.

  after a while, the threads finish their scheduling and fire EOS too.
  chain2 (with  queue1) is taken out of the scheduling first because it
  is empty.

  chain3 (with queue2) finally removes its last scheduled chain and
  fires EOS.

  The bin now has no more scheduled chains and no more pending subbins,
  it fires EOS.
  
  
case 5) 

(-----------------------------------------------------------------------)
! bin                                                                   !
!                                                     (---------------) !
!                                                     !audiosink      ! !
! (--------)       (----------)         (--------)    !               ! !
! !disksrc1!       ! effect   !         ! mixer  !    !               ! !
! !       src -- sink        src ---- sink     src -- sink            ! !
! (--------)       (----------)         !        !    !               ! !
!                                       !        !    (---------------) !
! (--------)       (----------)         !        !                      !
! !disksrc2!       ! effect   !         !        !                      !
! !       src -- sink        src ---- sink       !                      !
! (--------)       (----------)         (--------)                      !
(-----------------------------------------------------------------------)

  This is a simple audio mixer (mp3audio mixer).
  We assume disksrc1 is going to be in EOS while disksrc2 is still in !EOS


.scheduling.

  two chains are detected: disksrc1-effect-mixer-audiosink, 
  disksrc2-effect-mixer-audiosink

.eos.

  disksrc1 has passed the last buffer in the _get function. with its next 
  call to _get, it will return a NULL buffer and set the src pad to EOS.

  the EOS call travels up till the mixer element because it has overridden
  the handler. The first chain is disabled from the scheduler.

  finally disksrc2 run into EOS, same procedure as with disksrc1, except
  now the mixer also sets EOS to its src pad, chain2 becomes inactive too
  and the bin fires EOS because there are no more chains to schedule.
  
  somebody sets the location of disksrc1 to a new mp3 file, the srcpad 
  is set to !EOS, chain1 is scheduled again, mixer is activated again too
  and audio is playing again...


case 6) 

(-------------------------------------------------------------------------------------)
! bin                                                                                 !
!                                                                   (---------------) !
! (---------------------------------------------)                   !audiosink      ! !
! ! thread1                                     !                   !               ! !
! ! (--------)       (----------)      (-----)  !   (--------)      !               ! !
! ! !disksrc1!       ! effect   !      !queue!  !   ! mixer  !      !               ! !
! ! !       src -- sink        src -- sink  src -- sink     src -- sink             ! !
! ! (--------)       (----------)      (-----)  !   !        !      !               ! !
! (---------------------------------------------)   !        !      !               ! !
!                                                   !        !      (---------------) !
! (---------------------------------------------)   !        !                        !
! ! thread2                                     !   !        !                        !
! ! (--------)       (----------)      (-----)  !   !        !                        !
! ! !disksrc2!       ! effect   !      !queue!  !   !        !                        !
! ! !       src -- sink        src -- sink  src -- sink      !                        !
! ! (--------)       (----------)      (-----)  !   (--------)                        !
! (---------------------------------------------)                                     !
(-------------------------------------------------------------------------------------)

  This is a simple audio mixer (mp3audio mixer).
  We assume disksrc1 is going to be in EOS while disksrc2 is still in !EOS

.scheduling.

  Scheduling is a bit tricky here: we have two threads with each one chain ds1-e-q and
  ds2-e-q. the mixer element is loop based and forms a third chain, mixer-audiosink

.eos.

  disksrc1 has passed the last buffer in the _get function. with its next 
  call to _get, it will return a NULL buffer and set the src pad to EOS.

  the EOS call travels up till the queue element because it has overridden
  the handler. The first chain is disabled from the scheduler. thread1 fires EOS
  because it does not have any chains to schedule.

  the mixer element pulls buffers from queue1 until queue1 is empty. At that time,
  queue1 sets the pad to EOS, mixer now knows that it does not have to request
  another buffer from that pad again.

  disksrc2 finally sets its pad to EOS, rendering chain2 unscheduled which makes
  the thread2 fire an EOS.

  the mixer element pulls buffers from queue2 until queue2 is empty. At that time,
  queue2 sets the pad to EOS, mixer now knows that it does not have to request
  another buffer from that pad again. all pads for the mixer are in EOS now so
  it sets the src pad to EOS. the last chain now also becomes unscheduled and
  the bin fires EOS.


