source: roaraudio/plugins/gstreamer0.10/roarmixer.h @ 2073:9032ae5f36c7

Last change on this file since 2073:9032ae5f36c7 was 2073:9032ae5f36c7, checked in by phi, 15 years ago

copyed a lot code from the oss mixer

File size: 10.7 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
48typedef struct _GstRoarMixerElement GstRoarMixerElement;
49typedef struct _GstRoarMixerElementClass GstRoarMixerElementClass;
50typedef struct _GstRoarMixer GstRoarMixer;
51
52struct _GstRoarMixerElement {
53  GstElement            parent;
54
55  GstRoarMixer           *mixer;
56};
57
58struct _GstRoarMixerElementClass {
59  GstElementClass       parent;
60};
61
62
63GType           gst_roar_mixer_element_get_type          (void);
64
65typedef enum {
66  GST_ROAR_MIXER_CAPTURE = 1<<0,
67  GST_ROAR_MIXER_PLAYBACK = 1<<1,
68  GST_ROAR_MIXER_ALL = GST_ROAR_MIXER_CAPTURE | GST_ROAR_MIXER_PLAYBACK
69} GstRoarMixerDirection;
70
71
72#define GST_ROAR_MIXER(obj)              ((GstRoarMixer*)(obj))
73
74#define GST_TYPE_ROARMIXER \
75  (gst_roarmixer_get_type())
76
77struct _GstRoarMixer {
78  GList *               tracklist;      /* list of available tracks */
79
80  struct roar_connection con;
81  int       fd;
82  gchar    *host;
83
84  gchar *               device;
85  gchar *               cardname;
86  GstRoarMixerDirection dir;
87};
88
89typedef struct _GstRoarMixerTrack {
90  GstMixerTrack parent;
91
92  struct roar_mixer_settings mixer;
93  gint          channels;
94  gchar       * name;
95  gint          stream_id;
96} GstRoarMixerTrack;
97
98typedef struct _GstRoarMixerTrackClass {
99  GstMixerTrackClass parent;
100} GstRoarMixerTrackClass;
101
102GType gst_roarmixer_get_type(void);
103gboolean gst_roarmixer_factory_init (GstPlugin *plugin);
104
105GstRoarMixer*    gst_roarmixer_new                (const gchar *device,
106                                                 GstRoarMixerDirection dir);
107void            gst_roarmixer_free               (GstRoarMixer *mixer);
108
109const GList*    gst_roarmixer_list_tracks        (GstRoarMixer * mixer);
110void            gst_roarmixer_set_volume         (GstRoarMixer * mixer,
111                                                 GstMixerTrack * track,
112                                                 gint * volumes);
113void            gst_roarmixer_get_volume         (GstRoarMixer * mixer,
114                                                 GstMixerTrack * track,
115                                                 gint * volumes);
116void            gst_roarmixer_set_record         (GstRoarMixer * mixer,
117                                                 GstMixerTrack * track,
118                                                 gboolean record);
119void            gst_roarmixer_set_mute           (GstRoarMixer * mixer,
120                                                 GstMixerTrack * track,
121                                                 gboolean mute);
122
123#define GST_IMPLEMENT_ROAR_MIXER_METHODS(Type, interface_as_function)            \
124static gboolean                                                                 \
125interface_as_function ## _supported (Type *this, GType iface_type)              \
126{                                                                               \
127  g_assert (iface_type == GST_TYPE_MIXER);                                      \
128                                                                                \
129  return (this->mixer != NULL);                                                 \
130}                                                                               \
131                                                                                \
132static const GList*                                                             \
133interface_as_function ## _list_tracks (GstMixer * mixer)                        \
134{                                                                               \
135  Type *this = (Type*) mixer;                                                   \
136                                                                                \
137  g_return_val_if_fail (this != NULL, NULL);                                    \
138  g_return_val_if_fail (this->mixer != NULL, NULL);                             \
139                                                                                \
140  return gst_roarmixer_list_tracks (this->mixer);                                \
141}                                                                               \
142                                                                                \
143static void                                                                     \
144interface_as_function ## _set_volume (GstMixer * mixer, GstMixerTrack * track,  \
145    gint * volumes)                                                             \
146{                                                                               \
147  Type *this = (Type*) mixer;                                                   \
148                                                                                \
149  g_return_if_fail (this != NULL);                                              \
150  g_return_if_fail (this->mixer != NULL);                                       \
151                                                                                \
152  gst_roarmixer_set_volume (this->mixer, track, volumes);                        \
153}                                                                               \
154                                                                                \
155static void                                                                     \
156interface_as_function ## _get_volume (GstMixer * mixer, GstMixerTrack * track,  \
157    gint * volumes)                                                             \
158{                                                                               \
159  Type *this = (Type*) mixer;                                                   \
160                                                                                \
161  g_return_if_fail (this != NULL);                                              \
162  g_return_if_fail (this->mixer != NULL);                                       \
163                                                                                \
164  gst_roarmixer_get_volume (this->mixer, track, volumes);                        \
165}                                                                               \
166                                                                                \
167static void                                                                     \
168interface_as_function ## _set_record (GstMixer * mixer, GstMixerTrack * track,  \
169    gboolean record)                                                            \
170{                                                                               \
171  Type *this = (Type*) mixer;                                                   \
172                                                                                \
173  g_return_if_fail (this != NULL);                                              \
174  g_return_if_fail (this->mixer != NULL);                                       \
175                                                                                \
176  gst_roarmixer_set_record (this->mixer, track, record);                         \
177}                                                                               \
178                                                                                \
179static void                                                                     \
180interface_as_function ## _set_mute (GstMixer * mixer, GstMixerTrack * track,    \
181    gboolean mute)                                                              \
182{                                                                               \
183  Type *this = (Type*) mixer;                                                   \
184                                                                                \
185  g_return_if_fail (this != NULL);                                              \
186  g_return_if_fail (this->mixer != NULL);                                       \
187                                                                                \
188  gst_roarmixer_set_mute (this->mixer, track, mute);                             \
189}                                                                               \
190                                                                                \
191static void                                                                     \
192interface_as_function ## _interface_init (GstMixerClass * klass)                \
193{                                                                               \
194  GST_MIXER_TYPE (klass) = GST_MIXER_HARDWARE;                                  \
195                                                                                \
196  /* set up the interface hooks */                                              \
197  klass->list_tracks = interface_as_function ## _list_tracks;                   \
198  klass->set_volume = interface_as_function ## _set_volume;                     \
199  klass->get_volume = interface_as_function ## _get_volume;                     \
200  klass->set_mute = interface_as_function ## _set_mute;                         \
201  klass->set_record = interface_as_function ## _set_record;                     \
202}
203
204
205G_END_DECLS
206
207#endif /* __GST_ROARMIXER_H__ */
Note: See TracBrowser for help on using the repository browser.