playbin
--------

The purpose of this element is to decode and render the media contained in a
given generic uri. The element extends GstPipeline and is typically used in
playback situations.

Required features:

 - accept and play any valid uri. This includes
   - rendering video/audio
   - overlaying subtitles on the video
 - optionally read external subtitle files
 - allow for hardware (non raw) sinks
 - selection of audio/video/subtitle streams based on language.
 - perform network buffering/incremental download
 - gapless playback
 - support for visualisations with configurable sizes
 - ability to reject files that are too big, or of a format that would require
   too much CPU/memory usage.
 - be very efficient with adding elements such as converters to reduce the
   amount of negotiation that has to happen.
 - handle chained oggs. This includes having support for dynamic pad add and
   remove from a demuxer.

Components
----------

* decodebin2

 - performs the autoplugging of demuxers/decoders
 - emits signals when for steering the autoplugging
   - to decide if a non-raw media format is acceptable as output
   - to sort the possible decoders for a non-raw format
 - see also decodebin2 design doc

* uridecodebin

 - combination of a source to handle the given uri, an optional queueing element
   and one or more decodebin2 elements to decode the non-raw streams.

* playsink

 - handles display of audio/video/text.
 - has request audio/video/text input pad. There is only one sinkpad per type.
   The requested pads define the configuration of the internal pipeline. 
 - allows for setting audio/video sinks or does automatic sink selection.
 - allows for configuration of visualisation element.
 - allows for enable/disable of visualisation, audio and video.

* playbin

 - combination of one or more uridecodebin elements to read the uri and subtitle
   uri.
 - support for queuing new media to support gapless playback.
 - handles stream selection.
 - uses playsink to display.
 - selection of sinks and configuration of uridecodebin with raw output formats.


Gapless playback
----------------

playbin has an "about-to-finish" signal. The application should configure a new
uri (and optional suburi) in the callback. When the current media finishes, this
new media will be played next.