[pulseaudio-commits] [SCM] PulseAudio Sound Server branch, master, updated. v0.9.13-167-gc245050

Lennart Poettering gitmailer-noreply at 0pointer.de
Wed Jan 7 16:15:48 PST 2009


This is an automated email from the git hooks/post-receive script. It was
generated because of a push to the "PulseAudio Sound Server" repository.

The master branch has been updated
      from  81cd21969ade4d8f14dd0e4c99ec9a2857a15b79 (commit)

- Log -----------------------------------------------------------------
c245050... Prefer mixer controls with volumes over switches
e67bc1d... -Wconvert is pain, let's drop it again
-----------------------------------------------------------------------

Summary of changes:
 configure.ac                     |    2 +-
 src/modules/alsa-util.c          |   80 ++++++++++++++++++++++++++++++++++----
 src/modules/alsa-util.h          |    2 +-
 src/modules/module-alsa-sink.c   |    2 +-
 src/modules/module-alsa-source.c |    2 +-
 5 files changed, 76 insertions(+), 12 deletions(-)

-----------------------------------------------------------------------

commit e67bc1d752f768efb556b57aff8be4e1d82b173b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Jan 8 01:00:39 2009 +0100

    -Wconvert is pain, let's drop it again
    
    Fascist compiler options are sometimes nice, but this one is a real
    Ober-Nazi. Let's get rid of it.

diff --git a/configure.ac b/configure.ac
index b36fec3..82f9205 100644
--- a/configure.ac
+++ b/configure.ac
@@ -95,7 +95,7 @@ if test "x$M4" = xno ; then
 fi
 
 dnl Compiler flags
-DESIRED_FLAGS="-Wall -W -Wextra -pedantic -pipe -Wno-long-long -Wvla -Wno-overlength-strings -Wconversion -Wundef -Wformat -Wlogical-op -Wpacked -Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-unused-parameter -ffast-math"
+DESIRED_FLAGS="-Wall -W -Wextra -pedantic -pipe -Wno-long-long -Wvla -Wno-overlength-strings -Wundef -Wformat -Wlogical-op -Wpacked -Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-unused-parameter -ffast-math"
 
 for flag in $DESIRED_FLAGS ; do
   CC_CHECK_CFLAGS([$flag], [CFLAGS="$CFLAGS $flag"])

commit c2450501af82d1c9d1994e4f4ce80d506d3c90ae
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Jan 8 01:03:42 2009 +0100

    Prefer mixer controls with volumes over switches
    
    When we look for a mixer control prefer controls that have both volume
    and a mute switch over those that have only a volume switch over those
    that only have a mute switch.
    
    Originally pointed out by Adel Gadllah.

diff --git a/src/modules/alsa-util.c b/src/modules/alsa-util.c
index 75b84c4..ff3af19 100644
--- a/src/modules/alsa-util.c
+++ b/src/modules/alsa-util.c
@@ -760,8 +760,32 @@ int pa_alsa_prepare_mixer(snd_mixer_t *mixer, const char *dev) {
     return 0;
 }
 
-snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const char *fallback) {
-    snd_mixer_elem_t *elem;
+static pa_bool_t elem_has_volume(snd_mixer_elem_t *elem, pa_bool_t playback) {
+    pa_assert(elem);
+
+    if (playback && snd_mixer_selem_has_playback_volume(elem))
+        return TRUE;
+
+    if (!playback && snd_mixer_selem_has_capture_volume(elem))
+        return TRUE;
+
+    return FALSE;
+}
+
+static pa_bool_t elem_has_switch(snd_mixer_elem_t *elem, pa_bool_t playback) {
+    pa_assert(elem);
+
+    if (playback && snd_mixer_selem_has_playback_switch(elem))
+        return TRUE;
+
+    if (!playback && snd_mixer_selem_has_capture_switch(elem))
+        return TRUE;
+
+    return FALSE;
+}
+
+snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const char *fallback, pa_bool_t playback) {
+    snd_mixer_elem_t *elem = NULL, *fallback_elem = NULL;
     snd_mixer_selem_id_t *sid = NULL;
 
     snd_mixer_selem_id_alloca(&sid);
@@ -771,17 +795,57 @@ snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const
 
     snd_mixer_selem_id_set_name(sid, name);
 
-    if (!(elem = snd_mixer_find_selem(mixer, sid))) {
-        pa_log_info("Cannot find mixer control \"%s\".", snd_mixer_selem_id_get_name(sid));
+    if ((elem = snd_mixer_find_selem(mixer, sid))) {
+
+        if (elem_has_volume(elem, playback) &&
+            elem_has_switch(elem, playback))
+            goto success;
+
+        if (!elem_has_volume(elem, playback) &&
+            !elem_has_switch(elem, playback))
+            elem = NULL;
+    }
+
+    pa_log_info("Cannot find mixer control \"%s\" or mixer control is no combination of switch/volume.", snd_mixer_selem_id_get_name(sid));
+
+    if (fallback) {
+        snd_mixer_selem_id_set_name(sid, fallback);
+
+        if ((fallback_elem = snd_mixer_find_selem(mixer, sid))) {
+
+            if (elem_has_volume(fallback_elem, playback) &&
+                elem_has_switch(fallback_elem, playback)) {
+                elem = fallback_elem;
+                goto success;
+            }
+
+            if (!elem_has_volume(fallback_elem, playback) &&
+                !elem_has_switch(fallback_elem, playback))
+                fallback_elem = NULL;
+        }
+
+        pa_log_warn("Cannot find fallback mixer control \"%s\" or mixer control is no combination of switch/volume.", snd_mixer_selem_id_get_name(sid));
+    }
+
+    if (elem && fallback_elem) {
 
-        if (fallback) {
-            snd_mixer_selem_id_set_name(sid, fallback);
+        /* Hmm, so we have both elements, but neither has both mute
+         * and volume. Let's prefer the one with the volume */
 
-            if (!(elem = snd_mixer_find_selem(mixer, sid)))
-                pa_log_warn("Cannot find fallback mixer control \"%s\".", snd_mixer_selem_id_get_name(sid));
+        if (elem_has_volume(elem, playback))
+            goto success;
+
+        if (elem_has_volume(fallback_elem, playback)) {
+            elem = fallback_elem;
+            goto success;
         }
     }
 
+    if (!elem && fallback_elem)
+        elem = fallback_elem;
+
+success:
+
     if (elem)
         pa_log_info("Using mixer control \"%s\".", snd_mixer_selem_id_get_name(sid));
 
diff --git a/src/modules/alsa-util.h b/src/modules/alsa-util.h
index aaa01c7..95bb983 100644
--- a/src/modules/alsa-util.h
+++ b/src/modules/alsa-util.h
@@ -52,7 +52,7 @@ int pa_alsa_set_hw_params(
 int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min);
 
 int pa_alsa_prepare_mixer(snd_mixer_t *mixer, const char *dev);
-snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const char *fallback);
+snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const char *fallback, pa_bool_t playback);
 
 snd_pcm_t *pa_alsa_open_by_device_id(
         const char *dev_id,
diff --git a/src/modules/module-alsa-sink.c b/src/modules/module-alsa-sink.c
index 6dea172..95a8c97 100644
--- a/src/modules/module-alsa-sink.c
+++ b/src/modules/module-alsa-sink.c
@@ -1409,7 +1409,7 @@ int pa__init(pa_module*m) {
         }
 
         if (found)
-            if (!(u->mixer_elem = pa_alsa_find_elem(u->mixer_handle, "Master", "PCM")))
+            if (!(u->mixer_elem = pa_alsa_find_elem(u->mixer_handle, "Master", "PCM", TRUE)))
                 found = FALSE;
 
         if (!found) {
diff --git a/src/modules/module-alsa-source.c b/src/modules/module-alsa-source.c
index f796ef1..b6c6ed1 100644
--- a/src/modules/module-alsa-source.c
+++ b/src/modules/module-alsa-source.c
@@ -1236,7 +1236,7 @@ int pa__init(pa_module*m) {
         }
 
         if (found)
-            if (!(u->mixer_elem = pa_alsa_find_elem(u->mixer_handle, "Capture", "Mic")))
+            if (!(u->mixer_elem = pa_alsa_find_elem(u->mixer_handle, "Capture", "Mic", FALSE)))
                 found = FALSE;
 
         if (!found) {

-- 
hooks/post-receive
PulseAudio Sound Server



More information about the pulseaudio-commits mailing list