Changeset 2073:9032ae5f36c7 in roaraudio for plugins/gstreamer0.10
- Timestamp:
- 07/19/09 04:01:35 (15 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- plugins/gstreamer0.10
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/gstreamer0.10/gstroar.c
r1600 r2073 26 26 #endif 27 27 #include "roarsink.h" 28 #include "roarmixer.h" 28 29 29 30 //#include "gst/gst-i18n-plugin.h" … … 33 34 { 34 35 if (!gst_roarsink_factory_init (plugin)) 36 return FALSE; 37 if (!gst_roarmixer_factory_init (plugin)) 35 38 return FALSE; 36 39 -
plugins/gstreamer0.10/roarmixer.c
r2072 r2073 27 27 #include "roarmixer.h" 28 28 29 GST_DEBUG_CATEGORY_EXTERN (roar_debug); 30 #define GST_CAT_DEFAULT roar_debug 31 32 enum 33 { 34 PROP_DEVICE_NAME = 1 35 }; 36 37 38 static const GstElementDetails gst_roar_mixer_element_details = 39 GST_ELEMENT_DETAILS ("RoarAudio Mixer", 40 "Generic/Audio", 41 "Control sound input and output levels with RoarAudio", 42 "Philipp 'ph3-der-loewe' Schafft <lion@lion.leolix.org>"); 43 44 GST_BOILERPLATE_WITH_INTERFACE (GstRoarMixerElement, gst_roar_mixer_element, 45 GstElement, GST_TYPE_ELEMENT, GstMixer, GST_TYPE_MIXER, 46 gst_roar_mixer_element); 47 48 GST_IMPLEMENT_ROAR_MIXER_METHODS (GstRoarMixerElement, gst_roar_mixer_element); 49 50 static GstStateChangeReturn gst_roar_mixer_element_change_state (GstElement * 51 element, GstStateChange transition); 52 53 static void gst_roar_mixer_element_get_property (GObject * object, 54 guint prop_id, GValue * value, GParamSpec * pspec); 55 56 static void 57 gst_roar_mixer_element_base_init (gpointer klass) 58 { 59 gst_element_class_set_details (GST_ELEMENT_CLASS (klass), 60 &gst_roar_mixer_element_details); 61 } 62 63 static void 64 gst_roar_mixer_element_class_init (GstRoarMixerElementClass * klass) 65 { 66 GstElementClass *element_class; 67 GObjectClass *gobject_class; 68 69 element_class = (GstElementClass *) klass; 70 gobject_class = (GObjectClass *) klass; 71 72 gobject_class->get_property = gst_roar_mixer_element_get_property; 73 74 g_object_class_install_property (gobject_class, PROP_DEVICE_NAME, 75 g_param_spec_string ("device-name", "Device name", 76 "Human-readable name of the sound device", "", G_PARAM_READABLE)); 77 78 element_class->change_state = 79 GST_DEBUG_FUNCPTR (gst_roar_mixer_element_change_state); 80 } 81 82 static void 83 gst_roar_mixer_element_init (GstRoarMixerElement * this, 84 GstRoarMixerElementClass * g_class) 85 { 86 this->mixer = NULL; 87 } 88 89 static void 90 gst_roar_mixer_element_get_property (GObject * object, guint prop_id, 91 GValue * value, GParamSpec * pspec) 92 { 93 GstRoarMixerElement *this = GST_ROAR_MIXER_ELEMENT (object); 94 95 switch (prop_id) { 96 case PROP_DEVICE_NAME: 97 if (this->mixer) { 98 g_value_set_string (value, this->mixer->cardname); 99 } else { 100 g_value_set_string (value, NULL); 101 } 102 break; 103 default: 104 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); 105 break; 106 } 107 } 108 109 static GstStateChangeReturn 110 gst_roar_mixer_element_change_state (GstElement * element, 111 GstStateChange transition) 112 { 113 GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; 114 GstRoarMixerElement *this = GST_ROAR_MIXER_ELEMENT (element); 115 116 switch (transition) { 117 case GST_STATE_CHANGE_NULL_TO_READY: 118 if (!this->mixer) { 119 this->mixer = gst_roarmixer_new ("/dev/mixer", GST_ROAR_MIXER_ALL); 120 } 121 break; 122 break; 123 default: 124 break; 125 } 126 127 ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); 128 if (ret == GST_STATE_CHANGE_FAILURE) 129 return ret; 130 131 switch (transition) { 132 case GST_STATE_CHANGE_READY_TO_NULL: 133 if (this->mixer) { 134 gst_roarmixer_free (this->mixer); 135 this->mixer = NULL; 136 } 137 break; 138 default: 139 break; 140 } 141 142 return ret; 143 } 144 145 146 gboolean gst_roarmixer_factory_init (GstPlugin * plugin) { 147 if (!gst_element_register(plugin, "roarmixer", GST_RANK_MARGINAL, 148 GST_TYPE_ROARMIXER)) 149 return FALSE; 150 151 return TRUE; 152 } 153 29 154 GstRoarMixer* gst_roarmixer_new (const gchar *device, 30 155 GstRoarMixerDirection dir) { -
plugins/gstreamer0.10/roarmixer.h
r2072 r2073 39 39 G_BEGIN_DECLS 40 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 48 typedef struct _GstRoarMixerElement GstRoarMixerElement; 49 typedef struct _GstRoarMixerElementClass GstRoarMixerElementClass; 50 typedef struct _GstRoarMixer GstRoarMixer; 51 52 struct _GstRoarMixerElement { 53 GstElement parent; 54 55 GstRoarMixer *mixer; 56 }; 57 58 struct _GstRoarMixerElementClass { 59 GstElementClass parent; 60 }; 61 62 63 GType gst_roar_mixer_element_get_type (void); 64 41 65 typedef enum { 42 66 GST_ROAR_MIXER_CAPTURE = 1<<0, … … 45 69 } GstRoarMixerDirection; 46 70 47 typedef struct _GstRoarMixer GstRoarMixer;48 71 49 72 #define GST_ROAR_MIXER(obj) ((GstRoarMixer*)(obj)) 73 74 #define GST_TYPE_ROARMIXER \ 75 (gst_roarmixer_get_type()) 50 76 51 77 struct _GstRoarMixer { … … 74 100 } GstRoarMixerTrackClass; 75 101 102 GType gst_roarmixer_get_type(void); 103 gboolean gst_roarmixer_factory_init (GstPlugin *plugin); 76 104 77 105 GstRoarMixer* gst_roarmixer_new (const gchar *device, … … 93 121 gboolean mute); 94 122 123 #define GST_IMPLEMENT_ROAR_MIXER_METHODS(Type, interface_as_function) \ 124 static gboolean \ 125 interface_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 \ 132 static const GList* \ 133 interface_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 \ 143 static void \ 144 interface_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 \ 155 static void \ 156 interface_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 \ 167 static void \ 168 interface_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 \ 179 static void \ 180 interface_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 \ 191 static void \ 192 interface_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 95 205 G_END_DECLS 96 206
Note: See TracChangeset
for help on using the changeset viewer.