]> code.delx.au - pulseaudio/blobdiff - src/modules/alsa/alsa-source.c
alsa-mixer: select nearest alsa volume step in sync-volume mode
[pulseaudio] / src / modules / alsa / alsa-source.c
index adec8f646a31e7431cdb1b2431784de13a3c61bd..fb96ed01bcc1aaf8ecead6e86341248bd495c457 100644 (file)
@@ -1129,7 +1129,7 @@ static void source_set_volume_cb(pa_source *s) {
     struct userdata *u = s->userdata;
     pa_cvolume r;
     char vol_str_pcnt[PA_CVOLUME_SNPRINT_MAX];
-    pa_bool_t write_to_hw = (s->flags & PA_SOURCE_SYNC_VOLUME) ? FALSE : TRUE;
+    pa_bool_t sync_volume = !!(s->flags & PA_SOURCE_SYNC_VOLUME);
 
     pa_assert(u);
     pa_assert(u->mixer_path);
@@ -1138,7 +1138,7 @@ static void source_set_volume_cb(pa_source *s) {
     /* Shift up by the base volume */
     pa_sw_cvolume_divide_scalar(&r, &s->real_volume, s->base_volume);
 
-    if (pa_alsa_path_set_volume(u->mixer_path, u->mixer_handle, &s->channel_map, &r, write_to_hw) < 0)
+    if (pa_alsa_path_set_volume(u->mixer_path, u->mixer_handle, &s->channel_map, &r, sync_volume, !sync_volume) < 0)
         return;
 
     /* Shift down by the base volume, so that 0dB becomes maximum volume */
@@ -1195,7 +1195,7 @@ static void source_write_volume_cb(pa_source *s) {
     /* Shift up by the base volume */
     pa_sw_cvolume_divide_scalar(&hw_vol, &hw_vol, s->base_volume);
 
-    if (pa_alsa_path_set_volume(u->mixer_path, u->mixer_handle, &s->channel_map, &hw_vol, TRUE) < 0)
+    if (pa_alsa_path_set_volume(u->mixer_path, u->mixer_handle, &s->channel_map, &hw_vol, TRUE, TRUE) < 0)
         pa_log_error("Writing HW volume failed");
     else {
         pa_cvolume tmp_vol;