diff options
author | Andy Wingo <wingo@pobox.com> | 2005-08-23 13:53:17 +0000 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2005-08-23 13:53:17 +0000 |
commit | b976e88c29914b3d35b3e02612b22741998934d8 (patch) | |
tree | 8fc8e4e1241cfaf3631be3f9b5cc7fdbf787b633 /sys/oss/gstossmixerelement.c | |
parent | 007a0868a3d0e174a518fadbfd613bd233c8ae71 (diff) |
sys/oss/gstossmixerelement.*: Added mixer element like alsamixer.
Original commit message from CVS:
2005-08-23 Andy Wingo <wingo@pobox.com>
* sys/oss/gstossmixerelement.h:
* sys/oss/gstossmixerelement.c: Added mixer element like
alsamixer.
* sys/oss/Makefile.am:
* sys/oss/gstossaudio.c: Register the ossmixer element.
Diffstat (limited to 'sys/oss/gstossmixerelement.c')
-rw-r--r-- | sys/oss/gstossmixerelement.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/sys/oss/gstossmixerelement.c b/sys/oss/gstossmixerelement.c new file mode 100644 index 00000000..28232d66 --- /dev/null +++ b/sys/oss/gstossmixerelement.c @@ -0,0 +1,92 @@ +/* OSS mixer interface element. + * Copyright (C) 2005 Andrew Vander Wingo <wingo@pobox.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "gstossmixerelement.h" + + +static GstElementDetails gst_oss_mixer_element_details = +GST_ELEMENT_DETAILS ("OSS Mixer", + "Generic/Audio", + "Control sound input and output levels with OSS", + "Andrew Vander Wingo <wingo@pobox.com>"); + + +GST_BOILERPLATE_WITH_INTERFACE (GstOssMixerElement, gst_oss_mixer_element, + GstElement, GST_TYPE_ELEMENT, GstMixer, GST_TYPE_MIXER, + gst_oss_mixer_element); + +GST_IMPLEMENT_OSS_MIXER_METHODS (GstOssMixerElement, gst_oss_mixer_element); + +static GstElementStateReturn gst_oss_mixer_element_change_state (GstElement * + element); + +static void +gst_oss_mixer_element_base_init (gpointer klass) +{ + gst_element_class_set_details (GST_ELEMENT_CLASS (klass), + &gst_oss_mixer_element_details); +} + +static void +gst_oss_mixer_element_class_init (GstOssMixerElementClass * klass) +{ + GstElementClass *element_class; + + element_class = (GstElementClass *) klass; + + element_class->change_state = gst_oss_mixer_element_change_state; +} + +static void +gst_oss_mixer_element_init (GstOssMixerElement * this) +{ + this->mixer = NULL; +} + +static GstElementStateReturn +gst_oss_mixer_element_change_state (GstElement * element) +{ + GstOssMixerElement *this = GST_OSS_MIXER_ELEMENT (element); + + switch (GST_STATE_TRANSITION (element)) { + case GST_STATE_NULL_TO_READY: + if (!this->mixer) { + this->mixer = gst_ossmixer_new ("/dev/mixer", GST_OSS_MIXER_ALL); + } + break; + case GST_STATE_READY_TO_NULL: + if (this->mixer) { + gst_ossmixer_free (this->mixer); + this->mixer = NULL; + } + break; + default: + break; + } + + if (GST_ELEMENT_CLASS (parent_class)->change_state) + return GST_ELEMENT_CLASS (parent_class)->change_state (element); + + return GST_STATE_SUCCESS; +} |