From 45412740b8db48722234412dc0f58284d033866e Mon Sep 17 00:00:00 2001 From: Marc-Andre Lureau Date: Tue, 7 Oct 2008 01:37:38 +0300 Subject: volume hooks Signed-off-by: Lennart Poettering --- src/pulsecore/sink.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/pulsecore/sink.c') diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index e04fc08a..d20a49d7 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -843,13 +843,21 @@ pa_usec_t pa_sink_get_latency(pa_sink *s) { /* Called from main thread */ void pa_sink_set_volume(pa_sink *s, const pa_cvolume *volume) { pa_bool_t changed; + pa_sink_set_volume_data data; pa_sink_assert_ref(s); pa_assert(PA_SINK_IS_LINKED(s->state)); pa_assert(volume); - changed = !pa_cvolume_equal(volume, &s->volume); - s->volume = *volume; + data.sink = s; + data.volume = *volume; + + changed = !pa_cvolume_equal(&data.volume, &s->volume); + + if (changed && pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_SET_VOLUME], &data) < 0) + return; + + s->volume = data.volume; if (s->set_volume && s->set_volume(s) < 0) s->set_volume = NULL; -- cgit From 46f73fb9531772e89ef7706578ba3ed2bde6c563 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 7 Oct 2008 22:47:01 +0200 Subject: additional validity checks --- src/pulsecore/sink.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/pulsecore/sink.c') diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index d20a49d7..7e920490 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -848,6 +848,8 @@ void pa_sink_set_volume(pa_sink *s, const pa_cvolume *volume) { pa_sink_assert_ref(s); pa_assert(PA_SINK_IS_LINKED(s->state)); pa_assert(volume); + pa_assert(pa_cvolume_valid(volume)); + pa_assert(pa_cvolume_compatible(volume, &s->sample_spec)); data.sink = s; data.volume = *volume; -- cgit From 68cc2996cc1e0bfe53d35eafdd26ce4572a10ce9 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 7 Oct 2008 22:47:32 +0200 Subject: after calling PA_CORE_HOOK_SINK_SET_VOLUME hook, check again whether the volume changed --- src/pulsecore/sink.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/pulsecore/sink.c') diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index 7e920490..d8d1f792 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -856,8 +856,12 @@ void pa_sink_set_volume(pa_sink *s, const pa_cvolume *volume) { changed = !pa_cvolume_equal(&data.volume, &s->volume); - if (changed && pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_SET_VOLUME], &data) < 0) - return; + if (changed) { + if (pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_SET_VOLUME], &data) < 0) + return; + + changed = !pa_cvolume_equal(&data.volume, &s->volume); + } s->volume = data.volume; -- cgit