summaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorArun Raghavan <arun.raghavan@collabora.co.uk>2011-04-22 19:57:29 +0530
committerColin Guthrie <colin@mageia.org>2011-04-23 18:23:38 +0100
commitfd14a9af359657c5c3b9bd8b031c4b7cacd6e357 (patch)
treede21a19662fd88f281dd3ab3b5d6ce3f2728a3e3 /src/modules
parent8460466f8645c3b5596652c566f3624260e4d437 (diff)
filter-heuristics: Match roles correctly
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/module-filter-heuristics.c25
1 files changed, 23 insertions, 2 deletions
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")) {