role-ducking: Fix improper unducking behavior in case of operating globally

Fix improper unducking behavior when using this module with "global=1" argument.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93994

Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
This commit is contained in:
Sangchul Lee 2016-02-11 23:11:21 +09:00 committed by Arun Raghavan
parent 3977a906e2
commit d049c2941e

View file

@ -96,6 +96,22 @@ static bool sink_has_trigger_streams(struct userdata *u, pa_sink *s, pa_sink_inp
return false; return false;
} }
static bool sinks_have_trigger_streams(struct userdata *u, pa_sink *s, pa_sink_input *ignore) {
bool ret = false;
pa_assert(u);
if (u->global) {
uint32_t idx;
PA_IDXSET_FOREACH(s, u->core->sinks, idx)
if ((ret = sink_has_trigger_streams(u, s, ignore)))
break;
} else
ret = sink_has_trigger_streams(u, s, ignore);
return ret;
}
static void apply_ducking_to_sink(struct userdata *u, pa_sink *s, pa_sink_input *ignore, bool duck) { static void apply_ducking_to_sink(struct userdata *u, pa_sink *s, pa_sink_input *ignore, bool duck) {
pa_sink_input *j; pa_sink_input *j;
uint32_t idx, role_idx; uint32_t idx, role_idx;
@ -163,7 +179,7 @@ static pa_hook_result_t process(struct userdata *u, pa_sink_input *i, bool duck)
if (!i->sink) if (!i->sink)
return PA_HOOK_OK; return PA_HOOK_OK;
should_duck = sink_has_trigger_streams(u, i->sink, duck ? NULL : i); should_duck = sinks_have_trigger_streams(u, i->sink, duck ? NULL : i);
apply_ducking(u, i->sink, duck ? NULL : i, should_duck); apply_ducking(u, i->sink, duck ? NULL : i, should_duck);
return PA_HOOK_OK; return PA_HOOK_OK;