The reference ratio should always be kept up-to-date. If the reference ratio is not updated when the input volume changes, the stale reference ratio ends up being used as the new input volume when the input is moved. --- src/pulsecore/sink-input.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index 6131bd3..db52692 100644 --- a/src/pulsecore/sink-input.c +++ b/src/pulsecore/sink-input.c @@ -1267,6 +1267,7 @@ void pa_sink_input_set_volume(pa_sink_input *i, const pa_cvolume *volume, pa_boo /* OK, we are in normal volume mode. The volume only affects * ourselves */ set_real_ratio(i, volume); + i->reference_ratio = i->volume; /* Copy the new soft_volume to the thread_info struct */ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0); -- 1.7.10.4