for (i = PA_SINK_INPUT(pa_idxset_first(s->inputs, &idx)); i; i = PA_SINK_INPUT(pa_idxset_next(s->inputs, &idx))) {
pa_cvolume remapped_new_volume;
+ /* This basically calculates i->soft_volume := i->virtual_volume / new_volume * i->volume_factor */
+
remapped_new_volume = *new_volume;
pa_cvolume_remap(&remapped_new_volume, &s->channel_map, &i->channel_map);
pa_sw_cvolume_divide(&i->soft_volume, &i->virtual_volume, &remapped_new_volume);
/* We don't issue PA_SINK_INPUT_MESSAGE_SET_VOLUME because
* we want the update to have atomically with the sink
* volume update, hence we do it within the
- * pa_sink_set_flat_volume() call below*/
+ * pa_sink_set_flat_volume() call below */
}
}
pa_cvolume remapped_old_volume, remapped_new_volume, fixed_volume;
unsigned c;
+ /* This basically calculates i->virtual_volume := i->virtual_volume * s->virtual_volume / old_volume */
+
remapped_new_volume = s->virtual_volume;
pa_cvolume_remap(&remapped_new_volume, &s->channel_map, &i->channel_map);
for (c = 0; c < i->sample_spec.channels; c++)
if (remapped_old_volume.values[c] == PA_VOLUME_MUTED)
- fixed_volume.values[c] = PA_VOLUME_MUTED;
+ fixed_volume.values[c] = remapped_new_volume.values[c];
else
fixed_volume.values[c] = (pa_volume_t)
((uint64_t) i->virtual_volume.values[c] *