diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pulsecore/sink.c | 3 | ||||
-rw-r--r-- | src/pulsecore/source.c | 3 |
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' |