diff options
author | Lennart Poettering <lennart@poettering.net> | 2008-10-08 00:15:18 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2008-10-08 00:15:18 +0200 |
commit | 2dfc2654832e5124f263bc7ee2718ff6913e6d46 (patch) | |
tree | 1d7fcb4696fe9cc8c6e971b1fb489b94980c5e6b /src/pulsecore/sink.c | |
parent | 5925d44013e2d559d1755176af0e26f69fc46458 (diff) | |
parent | 37b8c45e2b4d996b328a4fc74f491498abbc9348 (diff) |
Merge branch 'flatvol'
Diffstat (limited to 'src/pulsecore/sink.c')
-rw-r--r-- | src/pulsecore/sink.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index e04fc08a..d8d1f792 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -843,13 +843,27 @@ 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); + pa_assert(pa_cvolume_valid(volume)); + pa_assert(pa_cvolume_compatible(volume, &s->sample_spec)); - 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) { + 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; if (s->set_volume && s->set_volume(s) < 0) s->set_volume = NULL; |