Ignore:
Timestamp:
07/19/09 04:01:35 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

copyed a lot code from the oss mixer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • plugins/gstreamer0.10/roarmixer.c

    r2072 r2073  
    2727#include "roarmixer.h" 
    2828 
     29GST_DEBUG_CATEGORY_EXTERN (roar_debug); 
     30#define GST_CAT_DEFAULT roar_debug 
     31 
     32enum 
     33{ 
     34  PROP_DEVICE_NAME = 1 
     35}; 
     36 
     37 
     38static const GstElementDetails gst_roar_mixer_element_details = 
     39GST_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 
     44GST_BOILERPLATE_WITH_INTERFACE (GstRoarMixerElement, gst_roar_mixer_element, 
     45    GstElement, GST_TYPE_ELEMENT, GstMixer, GST_TYPE_MIXER, 
     46    gst_roar_mixer_element); 
     47 
     48GST_IMPLEMENT_ROAR_MIXER_METHODS (GstRoarMixerElement, gst_roar_mixer_element); 
     49 
     50static GstStateChangeReturn gst_roar_mixer_element_change_state (GstElement * 
     51    element, GstStateChange transition); 
     52 
     53static void gst_roar_mixer_element_get_property (GObject * object, 
     54    guint prop_id, GValue * value, GParamSpec * pspec); 
     55 
     56static void 
     57gst_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 
     63static void 
     64gst_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 
     82static void 
     83gst_roar_mixer_element_init (GstRoarMixerElement * this, 
     84    GstRoarMixerElementClass * g_class) 
     85{ 
     86  this->mixer = NULL; 
     87} 
     88 
     89static void 
     90gst_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 
     109static GstStateChangeReturn 
     110gst_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 
     146gboolean 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 
    29154GstRoarMixer*    gst_roarmixer_new                (const gchar *device, 
    30155                                                 GstRoarMixerDirection dir) { 
Note: See TracChangeset for help on using the changeset viewer.