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 fd44d1b0db053f33085964ff733c25319b8883e0..dfaad8cb9f8d03b5ddae55407ecb2b14e5b68e8b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+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:
index 44d78bb6756b926a041724ea55fadc040ee2415e..96a6da014a7328217193067fd7701f9d10a10c18 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) &&