]> code.delx.au - pulseaudio/blobdiff - src/modules/module-filter-heuristics.c
modules: Fix resource leak in device-restore
[pulseaudio] / src / modules / module-filter-heuristics.c
index 222787fc9c704a827654b84ad91482ec2318e900..885b02ee2aafe56598ab5e72478ea0b38de800b7 100644 (file)
@@ -40,7 +40,7 @@
 PA_MODULE_AUTHOR("Colin Guthrie");
 PA_MODULE_DESCRIPTION("Detect when various filters are desirable");
 PA_MODULE_VERSION(PACKAGE_VERSION);
-PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_LOAD_ONCE(true);
 
 static const char* const valid_modargs[] = {
     NULL
@@ -55,29 +55,8 @@ 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, *stream_role;
+static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_input) {
+    const char *want;
     pa_proplist *pl, *parent_pl;
 
     if (is_sink_input) {
@@ -92,15 +71,8 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, pa_bool_t is_s
     if (!pa_proplist_gets(pl, PA_PROP_FILTER_HEURISTICS) && pa_proplist_gets(pl, PA_PROP_FILTER_APPLY))
         return PA_HOOK_OK;
 
-    want = pa_proplist_gets(pl, PA_PROP_FILTER_WANT);
-    if (!want) {
-        /* This is a phone stream, maybe we want echo cancellation */
-        if ((stream_role = pa_proplist_gets(pl, PA_PROP_MEDIA_ROLE)) && pa_streq(stream_role, "phone"))
-            want = "echo-cancel";
-    }
-
     /* On phone sinks, make sure we're not applying echo cancellation */
-    if (role_match(parent_pl, "phone")) {
+    if (pa_str_in_list_spaces(pa_proplist_gets(parent_pl, PA_PROP_DEVICE_INTENDED_ROLES), "phone")) {
         const char *apply = pa_proplist_gets(pl, PA_PROP_FILTER_APPLY);
 
         if (apply && pa_streq(apply, "echo-cancel")) {
@@ -111,6 +83,8 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, pa_bool_t is_s
         return PA_HOOK_OK;
     }
 
+    want = pa_proplist_gets(pl, PA_PROP_FILTER_WANT);
+
     if (want) {
         /* There's a filter that we want, ask module-filter-apply to apply it, and remember that we're managing filter.apply */
         pa_proplist_sets(pl, PA_PROP_FILTER_APPLY, want);
@@ -125,7 +99,7 @@ static pa_hook_result_t sink_input_put_cb(pa_core *core, pa_sink_input *i, struc
     pa_sink_input_assert_ref(i);
     pa_assert(u);
 
-    return process(u, PA_OBJECT(i), TRUE);
+    return process(u, PA_OBJECT(i), true);
 }
 
 static pa_hook_result_t sink_input_move_finish_cb(pa_core *core, pa_sink_input *i, struct userdata *u) {
@@ -137,7 +111,7 @@ static pa_hook_result_t sink_input_move_finish_cb(pa_core *core, pa_sink_input *
     if (pa_proplist_gets(i->proplist, PA_PROP_FILTER_APPLY_MOVING))
         return PA_HOOK_OK;
 
-    return process(u, PA_OBJECT(i), TRUE);
+    return process(u, PA_OBJECT(i), true);
 }
 
 static pa_hook_result_t source_output_put_cb(pa_core *core, pa_source_output *i, struct userdata *u) {
@@ -145,7 +119,7 @@ static pa_hook_result_t source_output_put_cb(pa_core *core, pa_source_output *i,
     pa_source_output_assert_ref(i);
     pa_assert(u);
 
-    return process(u, PA_OBJECT(i), FALSE);
+    return process(u, PA_OBJECT(i), false);
 }
 
 static pa_hook_result_t source_output_move_finish_cb(pa_core *core, pa_source_output *i, struct userdata *u) {
@@ -157,7 +131,7 @@ static pa_hook_result_t source_output_move_finish_cb(pa_core *core, pa_source_ou
     if (pa_proplist_gets(i->proplist, PA_PROP_FILTER_APPLY_MOVING))
         return PA_HOOK_OK;
 
-    return process(u, PA_OBJECT(i), FALSE);
+    return process(u, PA_OBJECT(i), false);
 }
 
 int pa__init(pa_module *m) {
@@ -192,7 +166,6 @@ fail:
 
     return -1;
 
-
 }
 
 void pa__done(pa_module *m) {