ext/alsa/: Add switches (simple boolean on/off).
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>
Sun, 29 Aug 2004 19:37:38 +0000 (19:37 +0000)
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>
Sun, 29 Aug 2004 19:37:38 +0000 (19:37 +0000)
Original commit message from CVS:
* ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
* ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
Add switches (simple boolean on/off).

ChangeLog
ext/alsa/gstalsamixer.c
ext/alsa/gstalsamixertrack.c

index 154f687..9927e73 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-29  Ronald S. Bultje  <Ronald S. Bultje <rbultje@ronald.bitfreak.net>>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+         Add switches (simple boolean on/off).
+
 2004-08-27  David Schleef  <ds@schleef.org>
 
        * sys/glsink/glimagesink.c: (gst_glimagesink_ximage_put),
index d8867d6..fb664d5 100644 (file)
@@ -266,6 +266,7 @@ gst_alsa_mixer_build_list (GstAlsaMixer * mixer)
   for (i = 0; i < count; i++) {
     gint channels = 0;
     gint flags = GST_MIXER_TRACK_OUTPUT;
+    gboolean got_it = FALSE;
 
     if (snd_mixer_selem_has_capture_switch (element)) {
       if (dir != GST_PAD_SRC && dir != GST_PAD_UNKNOWN)
@@ -279,13 +280,10 @@ gst_alsa_mixer_build_list (GstAlsaMixer * mixer)
     if (snd_mixer_selem_has_capture_volume (element)) {
       while (snd_mixer_selem_has_capture_channel (element, channels))
         channels++;
-      if (first) {
-        first = FALSE;
-        flags |= GST_MIXER_TRACK_MASTER;
-      }
       track = gst_alsa_mixer_track_new (element, i, channels,
           flags, GST_ALSA_MIXER_TRACK_CAPTURE);
       mixer->tracklist = g_list_append (mixer->tracklist, track);
+      got_it = TRUE;
     }
 
     if (snd_mixer_selem_has_playback_volume (element)) {
@@ -298,11 +296,23 @@ gst_alsa_mixer_build_list (GstAlsaMixer * mixer)
       track = gst_alsa_mixer_track_new (element, i, channels,
           flags, GST_ALSA_MIXER_TRACK_PLAYBACK);
       mixer->tracklist = g_list_append (mixer->tracklist, track);
+      got_it = TRUE;
     }
 
     if (snd_mixer_selem_is_enumerated (element)) {
       opts = gst_alsa_mixer_options_new (element, i);
       mixer->tracklist = g_list_append (mixer->tracklist, opts);
+      got_it = TRUE;
+    }
+
+    if (!got_it) {
+      if (flags == GST_MIXER_TRACK_OUTPUT &&
+          snd_mixer_selem_has_playback_switch (element)) {
+        /* simple mute switch */
+        track = gst_alsa_mixer_track_new (element, i, 0,
+            flags, GST_ALSA_MIXER_TRACK_PLAYBACK);
+        mixer->tracklist = g_list_append (mixer->tracklist, track);
+      }
     }
 
     element = snd_mixer_elem_next (element);
index c6a8f14..7db0501 100644 (file)
@@ -86,10 +86,12 @@ gst_alsa_mixer_track_new (snd_mixer_elem_t * element,
   alsa_track->track_num = track_num;
 
   /* set volume information */
-  if (alsa_flags & GST_ALSA_MIXER_TRACK_PLAYBACK) {
-    snd_mixer_selem_get_playback_volume_range (element, &min, &max);
-  } else if (alsa_flags & GST_ALSA_MIXER_TRACK_CAPTURE) {
-    snd_mixer_selem_get_capture_volume_range (element, &min, &max);
+  if (channels) {
+    if (alsa_flags & GST_ALSA_MIXER_TRACK_PLAYBACK) {
+      snd_mixer_selem_get_playback_volume_range (element, &min, &max);
+    } else if (alsa_flags & GST_ALSA_MIXER_TRACK_CAPTURE) {
+      snd_mixer_selem_get_capture_volume_range (element, &min, &max);
+    }
   }
   track->min_volume = (gint) min;
   track->max_volume = (gint) max;