From a998038ee26f86054d0e314fcfe589169ce97ea7 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 20 Mar 2009 13:50:26 +0100 Subject: introduce pa_sink_input_get_relative_volume() --- src/pulsecore/sink-input.c | 22 ++++++++++++++++++++++ src/pulsecore/sink-input.h | 1 + 2 files changed, 23 insertions(+) (limited to 'src/pulsecore') diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index 53e727bb..ae2c6f54 100644 --- a/src/pulsecore/sink-input.c +++ b/src/pulsecore/sink-input.c @@ -923,6 +923,28 @@ const pa_cvolume *pa_sink_input_get_volume(pa_sink_input *i) { return &i->virtual_volume; } +/* Called from main context */ +pa_cvolume *pa_sink_input_get_relative_volume(pa_sink_input *i, pa_cvolume *v) { + pa_sink_input_assert_ref(i); + pa_assert(v); + pa_assert(PA_SINK_INPUT_IS_LINKED(i->state)); + + *v = i->virtual_volume; + + /* This always returns a relative volume, even in flat volume mode */ + + if (i->sink->flags & PA_SINK_FLAT_VOLUME) { + pa_cvolume sv; + + sv = *pa_sink_get_volume(i->sink, FALSE); + + pa_sw_cvolume_divide(v, v, + pa_cvolume_remap(&sv, &i->sink->channel_map, &i->channel_map)); + } + + return v; +} + /* Called from main context */ void pa_sink_input_set_mute(pa_sink_input *i, pa_bool_t mute, pa_bool_t save) { pa_assert(i); diff --git a/src/pulsecore/sink-input.h b/src/pulsecore/sink-input.h index e3801687..0bcb9d56 100644 --- a/src/pulsecore/sink-input.h +++ b/src/pulsecore/sink-input.h @@ -302,6 +302,7 @@ pa_usec_t pa_sink_input_get_latency(pa_sink_input *i, pa_usec_t *sink_latency); void pa_sink_input_set_volume(pa_sink_input *i, const pa_cvolume *volume, pa_bool_t save); const pa_cvolume *pa_sink_input_get_volume(pa_sink_input *i); +pa_cvolume *pa_sink_input_get_relative_volume(pa_sink_input *i, pa_cvolume *v); void pa_sink_input_set_mute(pa_sink_input *i, pa_bool_t mute, pa_bool_t save); pa_bool_t pa_sink_input_get_mute(pa_sink_input *i); void pa_sink_input_update_proplist(pa_sink_input *i, pa_update_mode_t mode, pa_proplist *p); -- cgit