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 adds the element to its possible EOS 
  providers.
  
  gst_pad_set_eos() will by default propagate to identy and to fakesink.
  none of these plugins override the default behaviour so gst_pad_set_eos
  returns TRUE and fakesrc signals EOS with the value TRUE.

  The parent looks in the list of EOS providers and finds the faksrc
  element that is now signaling EOS. all EOS providers are now in EOS
  and so the bin fires EOS.



case 2) 
                                                     (---------------)
                                                     !thread         !
 (--------)         (--------)         (--------)    !     (--------)!
 ! fakesrc!         !identity!         !  queue !    !     !fakesink!!
 !       src ----- sink     src ---- sink       src ---- sink       !!
 (--------)         (--------)         (--------)    !     (--------)!
                                                     (---------------)

.scheduling.

  case2 has two scheduled entities: fsr-i-q, q-fsk.
  
.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 adds the element to its possible EOS 
  providers.

  gst_pad_eos() will by default propagate to identy and to queue.
  queue overrides the eos handler and returns false on the eos
  request. fakesrc signals EOS with a value of false and the parent
  bin removes the EOS provider from its list.

  after the queue has sent out the last buffer, its calls eos on its
  src pad. queue is added to the top level bin as an eos provider and
  the default eos handler signals EOS with a value of TRUE to the parent.

  the parent sees that all the eos providers are in eos now and signals
  EOS.


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


  fakesrc detects the end of stream. It just sent the last buffer
  and sets the srcpad to EOS with gst_pad_eos ().

  the eos handler returns false because both queues return false on the
  eos request. the parent removes fakesrc as an EOS provider.

  queue1 and queue2 were responisble for the EOS delay and so they get
  added to the bin as possible EOS providers.

  after the queues have sent out their last buffer, they calls eos on their
  src pads.
  the parent allready has the two queues in the EOS provider list so they dont
  get added twice.
  the two queues perform gst_pad_eos () on their pads when the queue is empty,
  the parent removes the EOS providers from its list, when the list is empty,
  the parent fires EOS.
  
  
case 4) 

                                                     (---------------)
                                                     !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.

  fakesrc detects the end of stream. It just sent the last buffer
  and sets the srcpad to EOS with gst_pad_eos ().

  the eos handler returns false because queue2 returns false on the
  eos request. the parent removes fakesrc as an EOS provider.

  queue2 was responisble for the EOS delay and so it gets added to the bin 
  as a possible EOS provider.

  after the queue2 has sent its last buffer, it performs gst_pad_eos on its
  src pad.
  the parent allready has the queue2 in the list of EOS providers so it does not
  get added twice.
  queue2 finally fires the EOS signal and the parent removes the EOS provider 
  from its list, when the list is empty, the parent fires EOS.

  

