]> code.delx.au - pulseaudio/blobdiff - src/modules/alsa/alsa-sink.c
sink, source: Assign to s->muted from only one place
[pulseaudio] / src / modules / alsa / alsa-sink.c
index e10e14e12ae6ae820db8b1ca9b78b736f9617d14..daa9061336a7997ffff388c605887925bce71e43 100644 (file)
@@ -1395,18 +1395,17 @@ static void sink_write_volume_cb(pa_sink *s) {
     }
 }
 
-static void sink_get_mute_cb(pa_sink *s) {
+static int sink_get_mute_cb(pa_sink *s, bool *mute) {
     struct userdata *u = s->userdata;
-    bool b;
 
     pa_assert(u);
     pa_assert(u->mixer_path);
     pa_assert(u->mixer_handle);
 
-    if (pa_alsa_path_get_mute(u->mixer_path, u->mixer_handle, &b) < 0)
-        return;
+    if (pa_alsa_path_get_mute(u->mixer_path, u->mixer_handle, mute) < 0)
+        return -1;
 
-    s->muted = b;
+    return 0;
 }
 
 static void sink_set_mute_cb(pa_sink *s) {
@@ -1534,17 +1533,10 @@ static void sink_update_requested_latency_cb(pa_sink *s) {
 
 static pa_idxset* sink_get_formats(pa_sink *s) {
     struct userdata *u = s->userdata;
-    pa_idxset *ret = pa_idxset_new(NULL, NULL);
-    pa_format_info *f;
-    uint32_t idx;
 
     pa_assert(u);
 
-    PA_IDXSET_FOREACH(f, u->formats, idx) {
-        pa_idxset_put(ret, pa_format_info_copy(f), NULL);
-    }
-
-    return ret;
+    return pa_idxset_copy(u->formats, (pa_copy_func_t) pa_format_info_copy);
 }
 
 static bool sink_set_formats(pa_sink *s, pa_idxset *formats) {
@@ -2285,7 +2277,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
             pa_proplist_sets(data.proplist, key, pa_proplist_gets(mapping->proplist, key));
     }
 
-    pa_alsa_init_description(data.proplist);
+    pa_alsa_init_description(data.proplist, card);
 
     if (u->control_device)
         pa_alsa_init_proplist_ctl(data.proplist, u->control_device);
@@ -2397,8 +2389,12 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
         if (u->sink->set_mute)
             u->sink->set_mute(u->sink);
     } else {
-        if (u->sink->get_mute)
-            u->sink->get_mute(u->sink);
+        if (u->sink->get_mute) {
+            bool mute;
+
+            if (u->sink->get_mute(u->sink, &mute) >= 0)
+                pa_sink_set_mute(u->sink, mute, false);
+        }
     }
 
     if ((data.volume_is_set || data.muted_is_set) && u->sink->write_volume)