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 - capture elements (video/audio/...) - generators (signals/video/audio/...) 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, this means that data arrives when it is ready. An example of this is a video or network source. 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 ------------------- GstBaseSource: This base class provides an implementation of a random access source and is very well suited for file reader like sources.