ext/alsa/gstalsamixer.c: Also consider "speaker" as a name for master volume. If...
authorStefan Kost <ensonic@users.sourceforge.net>
Tue, 24 Jun 2008 16:15:26 +0000 (16:15 +0000)
committerStefan Kost <ensonic@users.sourceforge.net>
Tue, 24 Jun 2008 16:15:26 +0000 (16:15 +0000)
Original commit message from CVS:
* ext/alsa/gstalsamixer.c:
Also consider "speaker" as a name for master volume. If that doesn't
help look for the first non-mono volume control that also has a
playback switch.

ChangeLog
ext/alsa/gstalsamixer.c

index fd44d1b..dfaad8c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-06-24  Stefan Kost  <ensonic@users.sf.net>
 
+       * ext/alsa/gstalsamixer.c:
+         Also consider "speaker" as a name for master volume. If that doesn't
+         help look for the first non-mono volume control that also has a
+         playback switch.
+
+2008-06-24  Stefan Kost  <ensonic@users.sf.net>
+
        * ChangeLog:
          Forgot to save the ChangeLog :/
 
index 44d78bb..96a6da0 100644 (file)
@@ -165,7 +165,29 @@ gst_alsa_mixer_find_master_mixer (GstAlsaMixer * mixer, snd_mixer_t * handle)
     element = snd_mixer_elem_next (element);
   }
 
-  /* If not, check if we have a playback mixer with both volume and switch */
+  /* If not, check if we have a playback mixer labelled as 'Speaker' */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        strcmp (snd_mixer_selem_get_name (element), "Speaker") == 0) {
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, check if we have a playback mixer with both volume and switch that
+   * is not mono */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        snd_mixer_selem_has_playback_switch (element) &&
+        !snd_mixer_selem_is_playback_mono (element)) {
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, check if we have any playback mixer with both volume and switch */
   element = snd_mixer_first_elem (handle);
   for (i = 0; i < count; i++) {
     if (snd_mixer_selem_has_playback_volume (element) &&