summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pulsecore/sink.c3
-rw-r--r--src/pulsecore/source.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 0350284a..a29d61db 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1863,6 +1863,9 @@ void pa_sink_set_volume(
/* Let's 'push' the reference volume if necessary */
pa_cvolume_merge(&new_reference_volume, &s->reference_volume, &root_sink->real_volume);
+ /* If the sink and it's root don't have the same number of channels, we need to remap */
+ if (s != root_sink && !pa_channel_map_equal(&s->channel_map, &root_sink->channel_map))
+ pa_cvolume_remap(&new_reference_volume, &s->channel_map, &root_sink->channel_map);
update_reference_volume(root_sink, &new_reference_volume, &root_sink->channel_map, save);
/* Now that the reference volume is updated, we can update the streams'
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 84c8edca..5f57265c 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -1439,6 +1439,9 @@ void pa_source_set_volume(
/* Let's 'push' the reference volume if necessary */
pa_cvolume_merge(&new_reference_volume, &s->reference_volume, &root_source->real_volume);
+ /* If the source and it's root don't have the same number of channels, we need to remap */
+ if (s != root_source && !pa_channel_map_equal(&s->channel_map, &root_source->channel_map))
+ pa_cvolume_remap(&new_reference_volume, &s->channel_map, &root_source->channel_map);
update_reference_volume(root_source, &new_reference_volume, &root_source->channel_map, save);
/* Now that the reference volume is updated, we can update the streams'