Changeset 2073:9032ae5f36c7 in roaraudio for plugins/gstreamer0.10/roarmixer.c
- Timestamp:
- 07/19/09 04:01:35 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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) {
Note: See TracChangeset
for help on using the changeset viewer.