[pulseaudio-commits] src/modules

Colin Guthrie colin at kemper.freedesktop.org
Thu Feb 2 05:45:42 PST 2012


 src/modules/alsa/alsa-mixer.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

New commits:
commit 91b25005978d343a989c9485e226dc9a18a2fb28
Author: David Henningsson <david.henningsson at canonical.com>
Date:   Thu Feb 2 12:46:54 2012 +0100

    alsa-mixer: Take override-maps into account in subset elimination
    
    The practical problem is that some users were left with only one
    "LFE on Mono" port, as analog-output was considered a subset of
    analog-output-lfe-on-mono. Which was not what they wanted.
    
    BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=40910
    BugLink: https://bugs.launchpad.net/bugs/922656
    Signed-off-by: David Henningsson <david.henningsson at canonical.com>

diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index 2aa708d..9bf8069 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -3014,6 +3014,19 @@ static pa_bool_t element_is_subset(pa_alsa_element *a, pa_alsa_element *b, snd_m
             if (a_limit > b->volume_limit)
                 return FALSE;
         }
+
+        if (a->volume_use == PA_ALSA_VOLUME_MERGE) {
+            int s;
+            /* If override-maps are different, they're not subsets */
+            if (a->n_channels != b->n_channels)
+                return FALSE;
+            for (s = 0; s < SND_MIXER_SCHN_LAST; s++)
+                if (a->masks[s][a->n_channels-1] != b->masks[s][b->n_channels-1]) {
+                    pa_log_debug("Element %s is not a subset - mask a: 0x%lx, mask b: 0x%lx, at channel %d",
+                        a->alsa_name, a->masks[s][a->n_channels-1], b->masks[s][b->n_channels-1], s);
+                    return FALSE;
+               }
+        }
     }
 
     if (a->switch_use != PA_ALSA_SWITCH_IGNORE) {



More information about the pulseaudio-commits mailing list