From fd14a9af359657c5c3b9bd8b031c4b7cacd6e357 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Fri, 22 Apr 2011 19:57:29 +0530 Subject: filter-heuristics: Match roles correctly --- src/modules/module-filter-heuristics.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/modules/module-filter-heuristics.c b/src/modules/module-filter-heuristics.c index 4fba2913..1285c46e 100644 --- a/src/modules/module-filter-heuristics.c +++ b/src/modules/module-filter-heuristics.c @@ -54,8 +54,29 @@ struct userdata { *source_output_move_finish_slot; }; +static pa_bool_t role_match(pa_proplist *proplist, const char *role) { + const char *ir; + char *r; + const char *state = NULL; + + if (!(ir = pa_proplist_gets(proplist, PA_PROP_DEVICE_INTENDED_ROLES))) + return FALSE; + + while ((r = pa_split_spaces(ir, &state))) { + + if (pa_streq(role, r)) { + pa_xfree(r); + return TRUE; + } + + pa_xfree(r); + } + + return FALSE; +} + static pa_hook_result_t process(struct userdata *u, pa_object *o, pa_bool_t is_sink_input) { - const char *want, *int_role, *stream_role; + const char *want, *stream_role; pa_proplist *pl, *parent_pl; if (is_sink_input) { @@ -78,7 +99,7 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, pa_bool_t is_s } /* On phone sinks, make sure we're not applying echo cancellation */ - if ((int_role = pa_proplist_gets(parent_pl, PA_PROP_DEVICE_INTENDED_ROLES)) && strstr(int_role, "phone")) { + if (role_match(parent_pl, "phone")) { const char *apply = pa_proplist_gets(pl, PA_PROP_FILTER_APPLY); if (apply && pa_streq(apply, "echo-cancel")) { -- cgit