remove christian's double entry
[platform/upstream/gstreamer.git] / docs / manual / advanced-interfaces.xml
1 <chapter id="chapter-interfaces">
2   <title>Interfaces</title>
3
4   <para>
5     In <xref linkend="section-elements-properties"/>, you have learned how
6     to use <classname>GObject</classname> properties as a simple way to do
7     interaction between applications and elements. This method suffices for
8     the simple'n'straight settings, but fails for anything more complicated
9     than a getter and setter. For the more complicated use cases, &GStreamer;
10     uses interfaces based on the Glib <classname>GInterface</classname> type.
11   </para>
12
13   <para>
14     Most of the interfaces handled here will not contain any example code.
15     See the API references for details. Here, we will just describe the
16     scope and purpose of each interface.
17   </para>
18
19   <sect1 id="section-interfaces-mixer">
20     <title>The Mixer interface</title>
21
22     <para>
23       The mixer interface provides a uniform way to control the volume on a
24       hardware (or software) mixer. The interface is primarily intended to
25       be implemented by elements for audio inputs and outputs that talk
26       directly to the hardware (e.g. OSS or ALSA plugins).
27     </para>
28     <para>
29       Using this interface, it is possible to control a list of tracks
30       (such as Line-in, Microphone, etc.) from a mixer element. They can
31       be muted, their volume can be changed and, for input tracks, their
32       record flag can be set as well.
33     </para>
34     <para>
35       Example plugins implementing this interface include the OSS elements
36       (osssrc, osssink, ossmixer) and the ALSA plugins (alsasrc, alsasink
37       and alsamixer).
38     </para>
39   </sect1>
40
41   <sect1 id="section-interfaces-tuner">
42     <title>The Tuner interface</title>
43
44     <para>
45       The tuner interface is a uniform way to control inputs and outputs
46       on a multi-input selection device. This is primarily used for input
47       selection on elements for TV- and capture-cards.
48     </para>
49     <para>
50       Using this interface, it is possible to select one track from a list
51       of tracks supported by that tuner-element. The tuner will than select
52       that track for media-processing internally. This can, for example, be
53       used to switch inputs on a TV-card (e.g. from Composite to S-video).
54     </para>
55     <para>
56       This interface is currently only implemented by the Video4linux and
57       Video4linux2 elements.
58     </para>
59   </sect1>
60
61   <sect1 id="section-interfaces-colorbalance">
62     <title>The Color Balance interface</title>
63
64     <para>
65       The colorbalance interface is a way to control video-related properties
66       on an element, such as brightness, contrast and so on. It's sole
67       reason for existance is that, as far as its authors know, there's no
68       way to dynamically register properties using
69       <classname>GObject</classname>.
70     </para>
71     <para>
72       The colorbalance interface is implemented by several plugins, including
73       xvimagesink and the Video4linux and Video4linux2 elements.
74     </para>
75   </sect1>
76
77   <sect1 id="section-interfaces-proprobe">
78     <title>The Property Probe interface</title>
79
80     <para>
81       The property probe is a way to autodetect allowed values for a
82       <classname>GObject</classname> property. It's primary use (and
83       the only thing that we currently use it for) is to autodetect
84       devices in several elements. For example, the OSS elements use
85       this interface to detect all OSS devices on a system. Applications
86       can then <quote>probe</quote> this property and get a list of
87       detected devices. Given the overlap between HAL and the practical
88       implementations of this interface, this might in time be deprecated
89       in favour of HAL.
90     </para>
91     <para>
92       This interface is currently implemented by many elements, including
93       the ALSA, OSS, Video4linux and Video4linux2 elements.
94     </para>
95   </sect1>
96
97   <sect1 id="section-interfaces-xoverlay">
98     <title>The X Overlay interface</title>
99
100     <para>
101       The X Overlay interface was created to solve the problem of embedding
102       video streams in an application window. The application provides an
103       X-window to the element implementing this interface to draw on, and
104       the element will then use this X-window to draw on rather than creating
105       a new toplevel window. This is useful to embed video in video players.
106     </para>
107     <para>
108       This interface is implemented by, amongst others, the Video4linux and
109       Video4linux2 elements and by ximagesink, xvimagesink and sdlvideosink.
110     </para>
111   </sect1>
112 </chapter>