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> |
---|