OUTDATED
--------


case 1) 

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

  gst_pad_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 fakesink.
  none of these plugins override the default behaviour so gst_pad_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       !!
 (--------)         (--------)         (--------)    !     (--------)!
                                                     (---------------)


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

  gst_pad_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 responsible 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 already 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 responsible 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 already 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.

  

case 5) 

 (--------)         (--------)         (--------) 
 ! disksrc!         !  mad   !         !filesink! 
 !       src ----- sink     src ---- sink       ! 
 (--------)         (--------)         (--------)


  disksrc 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 mad returns false on the
  eos request. the parent removes mad as an EOS provider.

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

  After mad has sent its last buffer, it performs gst_pad_eos on its
  src pad.
  the parent already has mad in the list of EOS providers so it does not
  get added twice.
  mad finally fires the EOS signal.  This time, filesink returns false on
  the eos request.  the parent removes mad as an EOS provider. 
  
  filesink was responsible for the EOS delay and gets added to the bin
  as a possible EOS provider.
  When filesink has written all of it's data and closed the output file,
  it fires EOS.
  The parent already has filesink in the list of EOS providers so it does
  not get added twice.
  The parent removes the EOS provider 
  from its list, and since the list is empty, the parent fires EOS.

case 6) 

 (--------)         (--------)         (--------) 
 !disksrc1!         !  mad1  !         ! mixer  ! 
 !       src ----- sink     src ---- sink1      !        (--------)
 (--------)         (--------)         !        !        !filesink!
                                       !       src ---- sink      !
 (--------)         (--------)         !        !        (--------)
 !disksrc2!         !  mad2  !         !        ! 
 !       src ----- sink     src ---- sink2      ! 
 (--------)         (--------)         (--------)

  In this case, we want to make sure the pipeline keeps running after one
  of the two sources reaches eos.  Suppose in this case that disksrc1 will
  reach eos first.

  disksrc1 detects the end of stream. It sets eos, mad1 will return false,
  and mad1 will be responsible for eos.  When mad1 had sent out the last
  buffer, it sends out eos.

  The mixer intercepts eos and returns false.  mad1 is removed from the
  eos providers and mixer is added.

  (At this point, the mixer might choose to disconnect mad1->src and
  mixer->sink1 pads, since it's received eos on mad1->src)

  mixer will not send out eos since it hasn't received eos from 
  mad2->src.

  After a while, disksrc2 will detect end of stream, and eos will finally
  propagate to mixer.  mixer might disconnect mad->src2, and after
  realizing all of it's sources have reached eos, it sends out the final
  buffer and fires EOS.

  At this point, filesink will return false, mixer will be removed as an
  eos provider, and filesink will write out it's final buffer and close
  the file on disk.  At this point, it fires eos, and since it's the last
  eos provider, the parent can fire eos.


