Source elements
---------------

A source element is an element that provides data to the pipeline. It
does typically not have any sink (input) pads.

Typical source elements include:

 - file readers
 - network elements (live or not)
 - capture elements (video/audio/...)
 - generators (signals/video/audio/...)


Live sources
~~~~~~~~~~~~

A source is said to be a live source when it has the following property:

 * temporarily stopping reading from the source causes data to be lost. 

In general when this property holds, the source also produces data at a fixed
rate. Most sources have a limit to the rate at which they can deliver data, which
might be faster or slower than the consumption rate. this property however does
not make them a live source.

Let's look at some example sources.

 - file readers: you can PAUSE without losing data. There is however a limit to
   how fast you can read from this source. This limit is usually much higher
   than the consumption rate. In some cases it might be slower (an NFS share,
   for example) in which case you might need to use some buffering
   (see part-buffering.txt).

 - http network element: you can PAUSE without data loss. Depending on the
   available network bandwidth, consumption rate might be higher than production
   rate in which case buffering should be used (see part-buffering.txt).
  
 - audio source: pausing the audio capture will lead to lost data. this source
   is therefore definatly live. In addition, an audio source will produce data
   at a fixed rate (the samplerate). Also depending on the buffersize, this
   source will introduce a latency (see part-latency.txt).

 - udp network source: Pausing the receiving part will lead to lost data. This
   source is therefore a live source. Also in a typical case the udp packets
   will be received at a certain rate, which might be difficult to guess because
   of network jitter. This source does not necessarily introduce latency on its
   own.

 - dvb source: PAUSING this element will lead to data loss, it's a live source
   similar to a UDP source. 


Source types
~~~~~~~~~~~~

A source element can operate in three ways:

  - it is fully seekable, this means that random access can be performed
    on it in an efficient way. (a file reader,...). This also typically
    means that the source is not live.

  - data can be obtained from it with a variable size. This means that
    the source can give N bytes of data. An example is an audio source.
    A video source always provides the same amount of data (one video 
    frame). Note that this is not a fully seekable source.

  - it is a live source, see above.

When writing a source, one has to look at how the source can operate to
decide on the scheduling methods to implement on the source.

  - fully seekable sources implement a getrange function on the source pad.

  - sources that can give N bytes but cannot do seeking also implement a
    getrange function but state that they cannot do random access.

  - sources that are purely live sources implement a task to push out
    data.

Any source that has a getrange function must also implement a push based
scheduling mode. In this mode the source starts a task that gets N bytes
and pushes them out. Whenever possible, the peer element will select the
getrange based scheduling method of the source, though.

A source with a getrange function must activate itself in the pad activate
function. This is needed because the downstream peer element will decide
and activate the source element in its state change function before the
source's state change function is called.


Source base classes
~~~~~~~~~~~~~~~~~~~

GstBaseSrc:

This base class provides an implementation of a random access source and
is very well suited for file reader like sources.


GstPushSrc:

Base class for block-based sources. This class is mostly useful for 
elements that cannot do random access, or at least very slowly. The
source usually prefers to push out a fixed size buffer.

Classes extending this base class will usually be scheduled in a push
based mode. It the peer accepts to operate without offsets and withing
the limits of the allowed block size, this class can operate in getrange
based mode automatically.

The subclass should extend the methods from the baseclass in
addition to the create method. If the source is seekable, it
needs to override GstBaseSrc::event() in addition to 
GstBaseSrc::is_seekable() in order to retrieve the seek offset,
which is the offset of the next buffer to be requested.

Flushing, scheduling and sync is all handled by this base class.


Timestamps
~~~~~~~~~~

A non-live source should timestamp the buffers it produces starting from 0. If
it is not possible to timestamp every buffer (filesrc), the source is allowed to
only timestamp the first buffer (as 0).

Live sources only produce data in the PLAYING state, when the clock is running.
They should timestamp each buffer they produce with the current running_time of
the pipeline, which is expressed as:

    absolute_time - base_time

With absolute_time the time obtained from the global pipeline with
gst_clock_get_time() and base_time being the time of that clock when the
pipeline was last set to PLAYING.

