source: roaraudio/plugins/gstreamer0.10/roarmixer.h @ 2076:13dee50aead2

Last change on this file since 2076:13dee50aead2 was 2076:13dee50aead2, checked in by phi, 15 years ago

got the gnome mixer to display a dummy slider :)

File size: 11.5 KB
Line 
1//roarmixer.h:
2/* GStreamer
3 * Copyright (C) <2005> Arwed v. Merkatz <v.merkatz@gmx.net>
4 * Copyright (C) <2008> Philipp 'ph3-der-loewe' Schafft
5 * Copyright (C) <2009> Philipp 'ph3-der-loewe' Schafft
6 *                            <lion@lion.leolix.org>
7 *
8 * roarmixer.h: an RoarAudio audio mixer
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Library General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 * Library General Public License for more details.
19 *
20 * You should have received a copy of the GNU Library General Public
21 * License along with this library; if not, write to the
22 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 * Boston, MA 02111-1307, USA.
24 */
25
26
27#ifndef __GST_ROARMIXER_H__
28#define __GST_ROARMIXER_H__
29
30#include <gst/gst.h>
31#include <gst/interfaces/mixer.h>
32#include <roaraudio.h>
33
34#define VERSION "0.0.1"
35#define PACKAGE "gst-plugins"
36#define GST_PACKAGE_ORIGIN "Unknown package origin"
37#define GST_PACKAGE_NAME "GStreamer Plug-ins source release"
38
39G_BEGIN_DECLS
40
41#define GST_ROAR_MIXER_ELEMENT(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ROAR_MIXER_ELEMENT,GstRoarMixerElement))
42#define GST_ROAR_MIXER_ELEMENT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ROAR_MIXER_ELEMENT,GstRoarMixerElementClass))
43#define GST_IS_ROAR_MIXER_ELEMENT(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ROAR_MIXER_ELEMENT))
44#define GST_IS_ROAR_MIXER_ELEMENT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ROAR_MIXER_ELEMENT))
45#define GST_TYPE_ROAR_MIXER_ELEMENT              (gst_roar_mixer_element_get_type())
46
47#define GST_TYPE_ROARMIXER_TRACK \
48  (gst_roarmixer_track_get_type ())
49#define GST_ROARMIXER_TRACK(obj) \
50  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_ROARMIXER_TRACK, \
51                               GstRoarMixerTrack))
52#define GST_ROARMIXER_TRACK_CLASS(klass) \
53  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_ROARMIXER_TRACK, \
54                            GstRoarMixerTrackClass))
55#define GST_IS_ROARMIXER_TRACK(obj) \
56  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_ROARMIXER_TRACK))
57#define GST_IS_ROARMIXER_TRACK_CLASS(klass) \
58  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_ROARMIXER_TRACK))
59
60
61typedef struct _GstRoarMixerElement GstRoarMixerElement;
62typedef struct _GstRoarMixerElementClass GstRoarMixerElementClass;
63typedef struct _GstRoarMixer GstRoarMixer;
64
65struct _GstRoarMixerElement {
66  GstElement            parent;
67
68  GstRoarMixer           *mixer;
69};
70
71struct _GstRoarMixerElementClass {
72  GstElementClass       parent;
73};
74
75
76GType           gst_roar_mixer_element_get_type          (void);
77
78typedef enum {
79  GST_ROAR_MIXER_CAPTURE = 1<<0,
80  GST_ROAR_MIXER_PLAYBACK = 1<<1,
81  GST_ROAR_MIXER_ALL = GST_ROAR_MIXER_CAPTURE | GST_ROAR_MIXER_PLAYBACK
82} GstRoarMixerDirection;
83
84
85#define GST_ROAR_MIXER(obj)              ((GstRoarMixer*)(obj))
86
87struct _GstRoarMixer {
88  GList *               tracklist;      /* list of available tracks */
89
90  struct roar_connection con;
91  int       fd;
92  gchar    *host;
93
94  gchar *               device;
95  gchar *               cardname;
96  GstRoarMixerDirection dir;
97};
98
99typedef struct _GstRoarMixerTrack {
100  GstMixerTrack parent;
101
102  struct roar_mixer_settings mixer;
103  gint          channels;
104  gchar       * name;
105  gint          stream_id;
106} GstRoarMixerTrack;
107
108typedef struct _GstRoarMixerTrackClass {
109  GstMixerTrackClass parent;
110} GstRoarMixerTrackClass;
111
112GType gst_roarmixer_get_type(void);
113gboolean gst_roarmixer_factory_init (GstPlugin *plugin);
114
115GstRoarMixer*    gst_roarmixer_new                (const gchar *device,
116                                                 GstRoarMixerDirection dir);
117void            gst_roarmixer_free               (GstRoarMixer *mixer);
118void            gst_roarmixer_updatestreamlist   (GstRoarMixer *mixer);
119
120const GList*    gst_roarmixer_list_tracks        (GstRoarMixer * mixer);
121void            gst_roarmixer_set_volume         (GstRoarMixer * mixer,
122                                                 GstMixerTrack * track,
123                                                 gint * volumes);
124void            gst_roarmixer_get_volume         (GstRoarMixer * mixer,
125                                                 GstMixerTrack * track,
126                                                 gint * volumes);
127void            gst_roarmixer_set_record         (GstRoarMixer * mixer,
128                                                 GstMixerTrack * track,
129                                                 gboolean record);
130void            gst_roarmixer_set_mute           (GstRoarMixer * mixer,
131                                                 GstMixerTrack * track,
132                                                 gboolean mute);
133
134GType           gst_roarmixer_track_get_type     (void);
135GstMixerTrack *
136gst_roarmixer_track_new (GstRoarMixer * mixer,
137    gint stream_id, gint max_chans, gint flags);
138
139#define GST_IMPLEMENT_ROAR_MIXER_METHODS(Type, interface_as_function)            \
140static gboolean                                                                 \
141interface_as_function ## _supported (Type *this, GType iface_type)              \
142{                                                                               \
143  g_assert (iface_type == GST_TYPE_MIXER);                                      \
144                                                                                \
145  return (this->mixer != NULL);                                                 \
146}                                                                               \
147                                                                                \
148static const GList*                                                             \
149interface_as_function ## _list_tracks (GstMixer * mixer)                        \
150{                                                                               \
151  Type *this = (Type*) mixer;                                                   \
152                                                                                \
153  g_return_val_if_fail (this != NULL, NULL);                                    \
154  g_return_val_if_fail (this->mixer != NULL, NULL);                             \
155                                                                                \
156  return gst_roarmixer_list_tracks (this->mixer);                                \
157}                                                                               \
158                                                                                \
159static void                                                                     \
160interface_as_function ## _set_volume (GstMixer * mixer, GstMixerTrack * track,  \
161    gint * volumes)                                                             \
162{                                                                               \
163  Type *this = (Type*) mixer;                                                   \
164                                                                                \
165  g_return_if_fail (this != NULL);                                              \
166  g_return_if_fail (this->mixer != NULL);                                       \
167                                                                                \
168  gst_roarmixer_set_volume (this->mixer, track, volumes);                        \
169}                                                                               \
170                                                                                \
171static void                                                                     \
172interface_as_function ## _get_volume (GstMixer * mixer, GstMixerTrack * track,  \
173    gint * volumes)                                                             \
174{                                                                               \
175  Type *this = (Type*) mixer;                                                   \
176                                                                                \
177  g_return_if_fail (this != NULL);                                              \
178  g_return_if_fail (this->mixer != NULL);                                       \
179                                                                                \
180  gst_roarmixer_get_volume (this->mixer, track, volumes);                        \
181}                                                                               \
182                                                                                \
183static void                                                                     \
184interface_as_function ## _set_record (GstMixer * mixer, GstMixerTrack * track,  \
185    gboolean record)                                                            \
186{                                                                               \
187  Type *this = (Type*) mixer;                                                   \
188                                                                                \
189  g_return_if_fail (this != NULL);                                              \
190  g_return_if_fail (this->mixer != NULL);                                       \
191                                                                                \
192  gst_roarmixer_set_record (this->mixer, track, record);                         \
193}                                                                               \
194                                                                                \
195static void                                                                     \
196interface_as_function ## _set_mute (GstMixer * mixer, GstMixerTrack * track,    \
197    gboolean mute)                                                              \
198{                                                                               \
199  Type *this = (Type*) mixer;                                                   \
200                                                                                \
201  g_return_if_fail (this != NULL);                                              \
202  g_return_if_fail (this->mixer != NULL);                                       \
203                                                                                \
204  gst_roarmixer_set_mute (this->mixer, track, mute);                             \
205}                                                                               \
206                                                                                \
207static void                                                                     \
208interface_as_function ## _interface_init (GstMixerClass * klass)                \
209{                                                                               \
210  GST_MIXER_TYPE (klass) = GST_MIXER_HARDWARE;                                  \
211                                                                                \
212  /* set up the interface hooks */                                              \
213  klass->list_tracks = interface_as_function ## _list_tracks;                   \
214  klass->set_volume = interface_as_function ## _set_volume;                     \
215  klass->get_volume = interface_as_function ## _get_volume;                     \
216  klass->set_mute = interface_as_function ## _set_mute;                         \
217  klass->set_record = interface_as_function ## _set_record;                     \
218}
219
220
221G_END_DECLS
222
223#endif /* __GST_ROARMIXER_H__ */
Note: See TracBrowser for help on using the repository browser.