source: roaraudio/plugins/gstreamer0.10/roarmixer.h @ 5961:06e7fd9e4c25

Last change on this file since 5961:06e7fd9e4c25 was 5961:06e7fd9e4c25, checked in by phi, 10 years ago

Updates of copyright and license headers

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