[pulseaudio-discuss] [PATCH 5/5] alsa-sink: Don't assume we were able to enable hw-volume or sync-volume (v1.1)

oku at iki.fi oku at iki.fi
Thu Jan 13 06:44:45 PST 2011


From: Jyri Sarha <jyri.sarha at nokia.com>

This patch also disables mixer callback code if we do not have neither
HW-volume or HW-mute.
---
 src/modules/alsa/alsa-sink.c |   42 +++++++++++++++++++++---------------------
 1 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index a8ba363..f861904 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1672,8 +1672,6 @@ fail:
 }
 
 static int setup_mixer(struct userdata *u, pa_bool_t ignore_dB, pa_bool_t sync_volume) {
-    int (*mixer_callback)(snd_mixer_elem_t *, unsigned int);
-
     pa_assert(u);
 
     if (!u->mixer_handle)
@@ -1762,29 +1760,31 @@ static int setup_mixer(struct userdata *u, pa_bool_t ignore_dB, pa_bool_t sync_v
         pa_log_info("Using hardware mute control.");
     }
 
-    if (sync_volume) {
-        u->mixer_pd = pa_alsa_mixer_pdata_new();
-        mixer_callback = io_mixer_callback;
-
-        if (pa_alsa_set_mixer_rtpoll(u->mixer_pd, u->mixer_handle, u->rtpoll) < 0) {
-            pa_log("Failed to initialize file descriptor monitoring");
-            return -1;
-        }
+    if (u->sink->flags & (PA_SINK_HW_VOLUME_CTRL|PA_SINK_HW_MUTE_CTRL)) {
+        int (*mixer_callback)(snd_mixer_elem_t *, unsigned int);
+        if (u->sink->flags & PA_SINK_SYNC_VOLUME) {
+            u->mixer_pd = pa_alsa_mixer_pdata_new();
+            mixer_callback = io_mixer_callback;
 
-    } else {
-        u->mixer_fdl = pa_alsa_fdlist_new();
-        mixer_callback = ctl_mixer_callback;
+            if (pa_alsa_set_mixer_rtpoll(u->mixer_pd, u->mixer_handle, u->rtpoll) < 0) {
+                pa_log("Failed to initialize file descriptor monitoring");
+                return -1;
+            }
+        } else {
+            u->mixer_fdl = pa_alsa_fdlist_new();
+            mixer_callback = ctl_mixer_callback;
 
-        if (pa_alsa_fdlist_set_mixer(u->mixer_fdl, u->mixer_handle, u->core->mainloop) < 0) {
-            pa_log("Failed to initialize file descriptor monitoring");
-            return -1;
+            if (pa_alsa_fdlist_set_mixer(u->mixer_fdl, u->mixer_handle, u->core->mainloop) < 0) {
+                pa_log("Failed to initialize file descriptor monitoring");
+                return -1;
+            }
         }
-    }
 
-    if (u->mixer_path_set)
-        pa_alsa_path_set_set_callback(u->mixer_path_set, u->mixer_handle, mixer_callback, u);
-    else
-        pa_alsa_path_set_callback(u->mixer_path, u->mixer_handle, mixer_callback, u);
+        if (u->mixer_path_set)
+            pa_alsa_path_set_set_callback(u->mixer_path_set, u->mixer_handle, mixer_callback, u);
+        else
+            pa_alsa_path_set_callback(u->mixer_path, u->mixer_handle, mixer_callback, u);
+    }
 
     return 0;
 }
-- 
1.7.1




More information about the pulseaudio-discuss mailing list