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 on 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. If the peer accepts to operate without offsets and within
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.

