Macro qtTrIdx() replaced by tr() and QT_TRANSLATE_NOOP()
[mafwsubrenderer] / gst-plugins-base-subtitles0.10 / ext / alsa / gstalsamixer.h
1 /* ALSA mixer interface implementation.
2  * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the Free
16  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18
19
20 #ifndef __GST_ALSA_MIXER_H__
21 #define __GST_ALSA_MIXER_H__
22
23
24 #include "gstalsa.h"
25
26 #include <gst/interfaces/mixer.h>
27 #include "gstalsamixeroptions.h"
28 #include "gstalsamixertrack.h"
29
30
31 G_BEGIN_DECLS
32
33 /* This does not get you what you think it does, use obj->mixer   */
34 /* #define GST_ALSA_MIXER(obj)             ((GstAlsaMixer*)(obj)) */
35
36 typedef struct _GstAlsaMixer GstAlsaMixer;
37
38 typedef enum {
39   GST_ALSA_MIXER_CAPTURE = 1<<0,
40   GST_ALSA_MIXER_PLAYBACK = 1<<1,
41   GST_ALSA_MIXER_ALL = GST_ALSA_MIXER_CAPTURE | GST_ALSA_MIXER_PLAYBACK
42 } GstAlsaMixerDirection;
43
44 /**
45  * GstAlsaMixer:
46  *
47  * Opaque data structure
48  */
49 struct _GstAlsaMixer
50 {
51   GList *               tracklist;      /* list of available tracks */
52
53   snd_mixer_t *         handle;
54
55   GstTask *             task;
56   GStaticRecMutex *     task_mutex;
57   GStaticRecMutex *     rec_mutex;
58
59   int                   pfd[2];
60
61   GstMixer *            interface;
62   gchar *               device;
63   gchar *               cardname;
64
65   GstAlsaMixerDirection dir;
66 };
67
68
69 GstAlsaMixer*   gst_alsa_mixer_new              (const gchar *device,
70                                                  GstAlsaMixerDirection dir);
71 void            gst_alsa_mixer_free             (GstAlsaMixer *mixer);
72
73 const GList*    gst_alsa_mixer_list_tracks      (GstAlsaMixer * mixer);
74 void            gst_alsa_mixer_set_volume       (GstAlsaMixer * mixer,
75                                                  GstMixerTrack * track,
76                                                  gint * volumes);
77 void            gst_alsa_mixer_get_volume       (GstAlsaMixer * mixer,
78                                                  GstMixerTrack * track,
79                                                  gint * volumes);
80 void            gst_alsa_mixer_set_record       (GstAlsaMixer * mixer,
81                                                  GstMixerTrack * track,
82                                                  gboolean record);
83 void            gst_alsa_mixer_set_mute         (GstAlsaMixer * mixer,
84                                                  GstMixerTrack * track,
85                                                  gboolean mute);
86 void            gst_alsa_mixer_set_option       (GstAlsaMixer * mixer,
87                                                  GstMixerOptions * opts,
88                                                  gchar * value);
89 const gchar*    gst_alsa_mixer_get_option       (GstAlsaMixer * mixer,
90                                                  GstMixerOptions * opts);
91 void            _gst_alsa_mixer_set_interface   (GstAlsaMixer * mixer,
92                                                  GstMixer * interface);
93 GstMixerFlags   gst_alsa_mixer_get_mixer_flags  (GstAlsaMixer *mixer);
94
95 #define GST_IMPLEMENT_ALSA_MIXER_METHODS(Type, interface_as_function)           \
96 static gboolean                                                                 \
97 interface_as_function ## _supported (Type *this, GType iface_type)              \
98 {                                                                               \
99   g_assert (iface_type == GST_TYPE_MIXER);                                      \
100                                                                                 \
101   return (this->mixer != NULL);                                                 \
102 }                                                                               \
103                                                                                 \
104 static const GList*                                                             \
105 interface_as_function ## _list_tracks (GstMixer * mixer)                        \
106 {                                                                               \
107   Type *this = (Type*) mixer;                                                   \
108                                                                                 \
109   g_return_val_if_fail (this != NULL, NULL);                                    \
110   g_return_val_if_fail (this->mixer != NULL, NULL);                             \
111                                                                                 \
112   return gst_alsa_mixer_list_tracks (this->mixer);                              \
113 }                                                                               \
114                                                                                 \
115 static void                                                                     \
116 interface_as_function ## _set_volume (GstMixer * mixer, GstMixerTrack * track,  \
117     gint * volumes)                                                             \
118 {                                                                               \
119   Type *this = (Type*) mixer;                                                   \
120                                                                                 \
121   g_return_if_fail (this != NULL);                                              \
122   g_return_if_fail (this->mixer != NULL);                                       \
123                                                                                 \
124   gst_alsa_mixer_set_volume (this->mixer, track, volumes);                      \
125 }                                                                               \
126                                                                                 \
127 static void                                                                     \
128 interface_as_function ## _get_volume (GstMixer * mixer, GstMixerTrack * track,  \
129     gint * volumes)                                                             \
130 {                                                                               \
131   Type *this = (Type*) mixer;                                                   \
132                                                                                 \
133   g_return_if_fail (this != NULL);                                              \
134   g_return_if_fail (this->mixer != NULL);                                       \
135                                                                                 \
136   gst_alsa_mixer_get_volume (this->mixer, track, volumes);                      \
137 }                                                                               \
138                                                                                 \
139 static void                                                                     \
140 interface_as_function ## _set_record (GstMixer * mixer, GstMixerTrack * track,  \
141     gboolean record)                                                            \
142 {                                                                               \
143   Type *this = (Type*) mixer;                                                   \
144                                                                                 \
145   g_return_if_fail (this != NULL);                                              \
146   g_return_if_fail (this->mixer != NULL);                                       \
147                                                                                 \
148   gst_alsa_mixer_set_record (this->mixer, track, record);                       \
149 }                                                                               \
150                                                                                 \
151 static void                                                                     \
152 interface_as_function ## _set_mute (GstMixer * mixer, GstMixerTrack * track,    \
153     gboolean mute)                                                              \
154 {                                                                               \
155   Type *this = (Type*) mixer;                                                   \
156                                                                                 \
157   g_return_if_fail (this != NULL);                                              \
158   g_return_if_fail (this->mixer != NULL);                                       \
159                                                                                 \
160   gst_alsa_mixer_set_mute (this->mixer, track, mute);                           \
161 }                                                                               \
162                                                                                 \
163 static void                                                                     \
164 interface_as_function ## _set_option (GstMixer * mixer, GstMixerOptions * opts, \
165     gchar * value)                                                              \
166 {                                                                               \
167   Type *this = (Type*) mixer;                                                   \
168                                                                                 \
169   g_return_if_fail (this != NULL);                                              \
170   g_return_if_fail (this->mixer != NULL);                                       \
171                                                                                 \
172   gst_alsa_mixer_set_option (this->mixer, opts, value);                         \
173 }                                                                               \
174                                                                                 \
175 static const gchar*                                                             \
176 interface_as_function ## _get_option (GstMixer * mixer, GstMixerOptions * opts) \
177 {                                                                               \
178   Type *this = (Type*) mixer;                                                   \
179                                                                                 \
180   g_return_val_if_fail (this != NULL, NULL);                                    \
181   g_return_val_if_fail (this->mixer != NULL, NULL);                             \
182                                                                                 \
183   return gst_alsa_mixer_get_option (this->mixer, opts);                         \
184 }                                                                               \
185                                                                                 \
186 static GstMixerFlags                                                            \
187 interface_as_function ## _get_mixer_flags (GstMixer * mixer)                    \
188 {                                                                               \
189   Type *this = (Type*) mixer;                                                   \
190                                                                                 \
191   g_return_val_if_fail (this != NULL, GST_MIXER_FLAG_NONE);                     \
192   g_return_val_if_fail (this->mixer != NULL, GST_MIXER_FLAG_NONE);              \
193                                                                                 \
194   return gst_alsa_mixer_get_mixer_flags (this->mixer);                          \
195 }                                                                               \
196                                                                                 \
197 static void                                                                     \
198 interface_as_function ## _interface_init (GstMixerClass * klass)                \
199 {                                                                               \
200   GST_MIXER_TYPE (klass) = GST_MIXER_HARDWARE;                                  \
201                                                                                 \
202   /* set up the interface hooks */                                              \
203   klass->list_tracks = interface_as_function ## _list_tracks;                   \
204   klass->set_volume = interface_as_function ## _set_volume;                     \
205   klass->get_volume = interface_as_function ## _get_volume;                     \
206   klass->set_mute = interface_as_function ## _set_mute;                         \
207   klass->set_record = interface_as_function ## _set_record;                     \
208   klass->set_option = interface_as_function ## _set_option;                     \
209   klass->get_option = interface_as_function ## _get_option;                     \
210   klass->get_mixer_flags = interface_as_function ## _get_mixer_flags;           \
211 }
212
213
214 G_END_DECLS
215
216
217 #endif /* __GST_ALSA_MIXER_H__ */