mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-01 17:31:10 +00:00
Original commit message from CVS: * docs/design/draft-klass.txt: We use Filter now. Added Connector to mark elements that are only used to allow pipeline connections. Moved Debug to extra feature since most of them are functionally something else.
167 lines
6.3 KiB
Text
167 lines
6.3 KiB
Text
Element Klass definition
|
|
------------------------
|
|
|
|
Status:
|
|
|
|
DRAFT.
|
|
|
|
|
|
Purpose:
|
|
|
|
Applications should be able to retrieve elements from the registry of existing
|
|
elements based on specific capabilities or features of the element.
|
|
|
|
A playback application might want to retrieve all the elements that can be
|
|
used for visualisation, for example, or a video editor might want to select all
|
|
video effect filters.
|
|
|
|
The topic of defining the klass of elements should be based on use cases.
|
|
|
|
|
|
Proposal:
|
|
|
|
The GstElementDetails contains a field named klass that is a pointer to a
|
|
string describing the element type.
|
|
|
|
In this document we describe the format and contents of the string. Elements
|
|
should adhere to this specification although that is not enforced to allow
|
|
for wild (application specific) customisation.
|
|
|
|
1) string format
|
|
|
|
<keyword>['/'<keyword]*
|
|
|
|
The string consists of an unordered list of keywords separated with a '/'
|
|
character. While the / suggests a hierarchy, this is not the case.
|
|
|
|
2) keyword categories
|
|
|
|
- functional
|
|
|
|
Categories are base on _intended usage_ of the element. Some elements
|
|
might have other side-effects (especially for filers/effects). The purpose
|
|
is to list enough keywords so that applications can do meaningfull filtering,
|
|
not to completely describe the functionality, that is expressed in caps etc..
|
|
|
|
* Source : produces data
|
|
* Sink : consumes data
|
|
* Filter : filters/transforms data, no modification on the data is
|
|
intended (although it might be unavoidable). The
|
|
filter can decide on input and output caps independently
|
|
of the stream contents (GstBaseTransform).
|
|
* Effect : applies an effect to some data, changes to data are
|
|
intended.
|
|
* Demuxer : splits audio, video, ... from a stream
|
|
* Muxer : interleave audio, video, ... into one stream, this is
|
|
like mixing but without losing or degrading each separate
|
|
input stream. The reverse operation is possible with a
|
|
Demuxer that reproduces the exact same input streams.
|
|
* Decoder : decodes encoded data into a raw format, there is typically
|
|
no relation between input caps and output caps. The output
|
|
caps are defined in the stream data. This separates the
|
|
decoder from the filter.
|
|
* Encoder : encodes raw data into an encoded format.
|
|
* Mixer : combine audio, video, .. this is like muxing but with
|
|
applying some algorithm so that the individual streams
|
|
are not extractable anymore, there is therefore no
|
|
reverse operation to mixing.
|
|
* Converter : convert audio into video, text to audio, ... The converter
|
|
typically works on raw types only. The source media type
|
|
is listed first.
|
|
* Analyzer : reports about the stream contents.
|
|
* Control : controls some aspect of a hardware device
|
|
* Extracter : extracts tags/headers from a stream
|
|
* Formatter : adds tags/headers to a stream
|
|
* Connector : allows for new connections in the pipeline. (tee, ...)
|
|
* ...
|
|
|
|
- Based on media type
|
|
|
|
Purpose is to make a selection for elements operating on the different
|
|
types of media. An audio application must be able to filter out the
|
|
elements operating on audio, for example.
|
|
|
|
* Audio : operates on audio data
|
|
* Video : operates on video data
|
|
* Text : operates on text data
|
|
* Metadata : operates on metadata
|
|
* ...
|
|
|
|
- Extra features
|
|
|
|
The purpose is to further specialize the element, mostly for
|
|
application specific needs.
|
|
|
|
* Network : element is used in networked situations
|
|
* Protocol : implements some protocol (RTSP, HTTP, ...)
|
|
* Payloader : encapsulate as payload (RTP, RDT,.. )
|
|
* Depayloader : strip a payload (RTP, RDT,.. )
|
|
* RTP : intended to be used in RTP applications
|
|
* Device : operates on some hardware device (disk, network,
|
|
audio card, video card, usb, ...)
|
|
* Visualisation : intended to be used for audio visualisation
|
|
* Debug : intended usage is more for debugging purposes.
|
|
|
|
3) suggested order:
|
|
|
|
<functional>[/<media type>]*[/<extra...>]*
|
|
|
|
4) examples:
|
|
|
|
apedemux : Extracter/Metadata
|
|
audiotestsrc : Source/Audio
|
|
autoaudiosink : Sink/Audio/Device
|
|
cairotimeoverlay : Mixer/Video/Text
|
|
dvdec : Decoder/Video
|
|
dvdemux : Demuxer
|
|
goom : Converter/Audio/Video
|
|
id3demux : Extracter/Metadata
|
|
udpsrc : Source/Network/Protocol/Device
|
|
videomixer : Mixer/Video
|
|
ffmpegcolorspace : Filter/Video (intended use to convert video with as little
|
|
visible change as possible)
|
|
vertigotv : Effect/Video (intended use is to change the video)
|
|
volume : Effect/Audio (intended use is to change the audio data)
|
|
vorbisdec : Decoder/Audio
|
|
vorbisenc : Encoder/Audio
|
|
oggmux : Muxer
|
|
adder : Mixer/Audio
|
|
videobox : Effect/Video
|
|
alsamixer : Control/Audio/Device
|
|
audioconvert : Filter/Audio
|
|
audioresample : Filter/Audio
|
|
xvimagesink : Sink/Video/Device
|
|
navseek : Filter/Debug
|
|
decodebin : Decoder/Demuxer
|
|
level : Filter/Analyzer/Audio
|
|
tee : Connector/Debug
|
|
|
|
Use cases:
|
|
|
|
- get a list of all elements implementing a video effect (pitivi):
|
|
|
|
klass.contains (Effect & Video)
|
|
|
|
- get list of muxers (pitivi):
|
|
|
|
klass.contains (Muxer)
|
|
|
|
- get list of video encoders (pitivi):
|
|
|
|
klass.contains (Encoder & video)
|
|
|
|
- Get a list of all audio/video visualisations (totem):
|
|
|
|
klass.contains (Visualisation)
|
|
|
|
- Get a list of all decoders/demuxer/metadata parsers/vis (playbin):
|
|
|
|
klass.contains (Visualisation | Demuxer | Decoder | (Extractor & Metadata))
|
|
|
|
- Get a list of elements that can capture from an audio device (gst-properties):
|
|
|
|
klass.contains (Source & Audio & Device)
|
|
|
|
* filters out audiotestsrc, since it is not a device
|
|
|
|
|