This is the current implementation of events, based on an earlier
document, in this same directory, called "events".

Definition 
----------

The event system is designed to be a mechanism for _inter_plugin_
communication. Their scope is therefore limited in a way that they do
not serve as a way to communicate between plugins and the app (signals
and properties are still used for plugin-app communication).

Events will be generated by either a plugin or the app. It should be
possible for a plugin to generate an event on one of its pads and it
should be possible for an app to insert an event on an arbitrary pad or
element in the pipeline.


Event handling 
--------------

Events can both travel upstream or downstream. Some events, by nature,
only travel in one direction.

* downstream events

  - Travel in the same way buffers do. This includes that they are handled
    by the scheduler. The rationale is that the events should be kept
    as close to the buffers are possible.

  - plugins should check the type of the GstData passed in the _chain
    or _loop function and act appropriatly. This can be done by either 
    doing their own stuff or by calling the default handler.

  - are handled on the sink pad.

* upstream events

  - are handled with an event handler attached to the srcpad. A default
    handler is implemented for pads that don't implement their own 
    handler.

  - travel as fast as possible. the rationale is that a seek event should
    get to the src element ASAP.



Plugin generated events
-----------------------

We cover the range of events a plugin can generate and how they
are supposed to handle them.

* EOS

  when the plugin has no more data to push, it pushes an EOS
  event and calls gst_element_set_eos.

  _get based plugins should call gst_element_set_eos() before
  returning the EOS event.

  gst_element_set_eos() will put an element into the PAUSED state
  and will emit the eos signal to the app.

  Elements receiving the EOS event on a pad should not pull anymore
  data from that pad (in case of a loop based element).
  If the plugin cannot operate when it doesn't receive data on that
  pad, the element should go to EOS too. It does this by pushing 
  any data it might still have, to the srcpad after which it 
  pushes an EOS event on thet pad and calls gst_element_set_eos().

  The EOS event will typically originate from a source element, it 
  will eventually put all elements into the PAUSED state so that the
  pipeline stops.

  The EOS event is strictly a downstream event.

* DISCONTINUOUS

  The discontinuous event is used to indicate a discontinuity in the
  stream to downstream elements.  A disctontinuity happens for the
  following reasons:

   - a source element is sending the first buffers of a stream.
   - an element has performed a seek operation resulting in a 
     discontinuity in the data.

  elements that receive a discontinuity event should flush any state
  they might have and treat the new data as the start of new data.
  Before sending out the new data the element must send a discont event
  to the downstream element with at least a GST_FORMAT_TIME or
  GST_FORMAT_BYTES as the format/value pair (see below).

  a DISCONTINUOUS event has a flush flag. If that flag is set, the
  element should also remove any buffered data it might have.

  In addition to the flush flag, a DISCONTINUOUS event also caries up
  to GST_DISCONTINUOUS_MAX_FORMATS format/value pairs. These values
  might be used by the receiver of the event to resynchronize itself.

  elements that are using a clock must take special actions upon 
  receiving the DISCONTINUOUS event: they must call 
  gst_clock_handle_discont() with the GST_FORMAT_TIME value of
  the discont event.
  
  The DISCONTINUOUS event is strictly a downstream event.


* SEEK
 
  The seek event is used to reposition  the upstream elements to
  a new position in the media stream. 

  The seek event caries a bitwise-or of a GstFormat and a GstSeekType.

  An element receiving the seek event on its srcpad should try to
  reposition itself as closely to the requested location as possible.
  if the ACCURATE flag is set and it cannot reposition itself with
  absolute certainty, it should reposition itself well before the 
  requested position. If the ACCURATE flag is not set, the element
  is free to choose a suitable position in the stream before or after
  the requested time.

  If the flush flag is set it should make sure that it pushes the
  DISCONTINUOUS event the next time it is scheduled, clearing any
  data it might have buffered.

  The element is free to set the ACCURACY field in the event to notify
  the originator of the event of the result. If no accuracy is set, it
  defaults to FUZZY.

  The SEEK event is stricly an upstream event.
  
* QOS

  QoS is sent to indicate Quality of Service to the upstream element(s).

  The QOS event is stricly an upstream event.

* FLUSH

  A plugin can send a flush event to its src or sink peer to clear the
  buffered contents in the pipeline.


application generated events 
----------------------------

The application can insert events into the pipeline at arbirary
places. This is done by calling gst_pad_send_event() on a pad.

An application can also insert events on any element. The element
can implement its own handler for these events or it can use
the default handler, which simply forwards the event to the first
connected sinkpad of the element. Events to an element are send using
gst_element_send_event().

This first implementation only covers inserting events on src pads
since inserting events on sinkpads needs changes to the scheduler.


* FLUSH

  A flush event is used to clear any buffered data an element might 
  have. It is a downstream and upstream event.

  Flush events are typically inserted into the pipeline by the app.
  Elements that buffer data should implement an event handler on 
  both the sink and src pads it might have and respond to the flush
  event by clearing all data they have buffered.

* SEEK

  The application can insert the seek event into the pipeline on
  a srcpad with gst_pad_send_event () or on an element with 
  gst_element_send_event().

  The semantics of the seek parameters are described above.
  

Thread safety
-------------

All upstream events can occur outside the element's thread context. 
It is not required to protect the element's data structures with
mutexes because in principal we don't support sending events to
a running threaded pipeline.

GstQueue in its current form will refuse to pass events upstream if
it is in the PLAYING state. Future versions might pass the event
on as soon as the element is scheduled again on the sinkpad.

An application cannot insert an event on an element that is PLAYING
in another thread context. It is therefore strongly recommended to
PAUSE the threaded pipeline before inserting an event.


use cases 
---------

1) filesrc ! fakesink

<< explain EOS >>


2) filesrc ! fakesink

The app wants to perform a seek on filesrc. It'll call the gst_pad_send_event()
on filesrcs src pad with the SEEK event type. The event handler will
react and change filesrcs internal status. filesrc will return a DISCONT
event before returning the buffer with the new offset.

3) filesrc ! mpeg2parse video_0! queue ! { mpeg2dec ! xvideosink }

lost of possibilities here: The app can choose to insert a seek event
on the filesrc element (byte offset), it can insert a byte/time offset
seek on the video_0 pad of mpeg2parse or it can insert a time seek event
on mpeg2decs src pad.

the event will travel upstream using the handlers and the intermediate
elements can convert the event from a time to a byte offset (possibly
using GstTimeCache to speed up things).

Filesrc will get a byte seek event on its src pad and will proceed as
in case 2.

As can be seen from this example the app will generate an event in another
context than those of the plugins, so this will need proper locking.

The app can also choose to insert a flush event on one of the src
pads. The plugins would clear their cached data and forward the event
to their upstream peer pad(s).

4)...

Insert impossible case here..




