Pad block
---------

The purpose of blocking a pad is to be notified of downstream dataflow
and events. The notification can be used for

 - (Re)connecting/disconnecting the pad.
 - performing a seek 
 - inspecting the data/events on the pad

The pad block is performed on a source pad (push based) or sink pad (pull based)
and will succeed when the following events happen on the pad:

 - gst_pad_push()
 - gst_pad_alloc_buffer()
 - gst_pad_push_event() except for FLUSH_START and FLUSH_STOP events.
 - gst_pad_pull_range () (on a sinkpad)


Flushing
~~~~~~~~

The flushing event is used to clear any data out of the
downstream elements.

Generic case
^^^^^^^^^^^^

Consider the following pipeline: 

 .-----.      .-------.      .-------.
 | src |      | elem1 |\/    | elem2 |
 |    src -> sink    src -> sink    src ....
 '-----'      '-------'/\    '-------'              

Where elem1.src is blocked. If the pad block is taken (the callback
is called or the sync block returned) no data is flowing in elem2.sink.
In this situation, the streaming thread is blocked on a GCond and is
waiting to be unblocked.

When sending a flushing seek upstream on elem1.src, the FLUSH_START event
will temporary unblock the streaming thread and make all pad functions that
can trigger a block (_push/_query/_push_event/_pull_range) return
GST_FLOW_FLUSHING. This will then eventually pause the streaming thread
and release the STREAM_LOCK. 

Since no STREAM lock is taken after the pad block it is not needed to send
the FLUSH_START event further downstream.

The FLUSH_STOP will set the srcpad to non-flushing again and is dropped 
for the same reason. From then on, the new data after the flushing seek 
will be queued when the pad block is taken again.

Case where the stream is blocking downstream
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The example above is only valid if the elem1.src pad is really blocking
(callback called or sync block returned).

In the case where the stream is blocking further downstream (on elem2.src
for example, or on a blocking queue), extra care has to be taken.

Consider the following pipeline:

 .-----.      .-------.      .-------.
 | src |      | elem1 |\/    | elem2 |
 |    src -> sink    src -> sink    src .... Blocking somewhere downstream
 '-----'      '-------'/\    '-------'              

A pad block has been requested by the user on elem1.src , but since the stream
is blocking somewhere downstream, the callback is not called or the sync block
does not return.

In order for the block to happen, a FLUSH_START needs to be sent directly on
the downstream blocking element/pad so that it releases the stream lock, and it
gives a chance for the elem1.src pad to block.


Use cases
~~~~~~~~~

Prerolling a partial pipeline
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 .---------.      .---------.                .----------.
 | filesrc |      | demuxer |     .-----.    | decoder1 |
 |        src -> sink      src1 ->|queue|-> sink       src 
 '---------'      |         |     '-----'    '----------' X
                  |         |                .----------.
                  |         |     .-----.    | decoder2 |
                  |        src2 ->|queue|-> sink       src
                  '---------'     '-----'    '----------' X


The purpose is to create the pipeline dynamically up to the
decoders but not yet connect them to a sink and without losing
any data.

To do this, the source pads of the decoders is blocked so that no
events or buffers can escape and we don't interrupt the stream.

When all of the dynamic pad are created (no-more-pads emited by the
branching point, ie, the demuxer or the queues filled) and the pads
are blocked (blocked callback received) the pipeline is completely
prerolled.

It should then be possible to perform the following actions on the
prerolled pipeline:

- query duration/position
- perform a flushing seek to preroll a new position
- connect other elements and unblock the blocked pads.


dynamically switching an element in a PLAYING pipeline
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


  .----------.      .----------.      .----------.
  | element1 |      | element2 |      | element3 |
 ...        src -> sink       src -> sink       ...
  '----------'      '----------'      '----------'
                    .----------.
                    | element4 |
                   sink       src                  
                    '----------'                     

The purpose is to replace element2 with element4 in the PLAYING 
pipeline. 

  1) block element1 src pad. This can be done async.
  2) wait for block to happen. at that point nothing is flowing between
     element1 and element2 and nothing will flow until unblocked.
  3) unlink element1 and element2
  4) optional step: make sure data is flushed out of element2:
     4a) pad event probe on element2 src
     4b) send EOS to element2, this makes sure that element2 flushes
         out the last bits of data it holds.
     4c) wait for EOS to appear in the probe, drop the EOS.
     4d) remove the EOS pad event probe.
  5) unlink element2 and element3
     5a) optionally element2 can now be set to NULL and/or removed from the
         pipeline.
  6) link element4 and element3
  7) link element1 and element4 (FIXME, how about letting element4 know
     about the currently running segment?, see issues.)
  8) make sure element4 is in the same state as the rest of the elements. The
     element should at least be PAUSED.
  9) unblock element1 src

The same flow can be used to replace an element in a PAUSED pipeline. Only
special care has to be taken when performing step 2) which has to be done
async or it might deadlock. In the async callback one can then perform the
steps from 3). In a playing pipeline one can of course use the async block
as well, so that there is a generic method for both PAUSED and PLAYING.

The same flow works as well for any chain of multiple elements and might 
be implemented with a helper function in the future.

