]> code.delx.au - pulseaudio/commitdiff
filter-heuristics: Only apply AEC if we're not already on a phone sink
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Wed, 20 Apr 2011 12:15:26 +0000 (17:45 +0530)
committerColin Guthrie <colin@mageia.org>
Sat, 23 Apr 2011 17:23:38 +0000 (18:23 +0100)
This makes sure that we don't apply AEC on sinks that are already
connected to a "phone" device, the assumptiong being that anything
marked as such either doesn't have need it, or handles it itself.

src/modules/module-filter-heuristics.c

index bd8a60032ef769a7aa8329f9efd95be96e18d2dd..a385ff2467084bc05db83e9cdf710ace2a053007 100644 (file)
@@ -50,7 +50,7 @@ struct userdata {
 };
 
 static pa_hook_result_t sink_input_put_cb(pa_core *core, pa_sink_input *i, struct userdata *u) {
-    const char *role;
+    const char *sink_role, *si_role;
 
     pa_core_assert_ref(core);
     pa_sink_input_assert_ref(i);
@@ -60,7 +60,10 @@ static pa_hook_result_t sink_input_put_cb(pa_core *core, pa_sink_input *i, struc
     if (pa_proplist_gets(i->proplist, PA_PROP_FILTER_WANT))
         return PA_HOOK_OK;
 
-    if ((role = pa_proplist_gets(i->proplist, PA_PROP_MEDIA_ROLE)) && pa_streq(role, "phone"))
+    if ((sink_role = pa_proplist_gets(i->sink->proplist, PA_PROP_DEVICE_INTENDED_ROLES)) && strstr(sink_role, "phone"))
+        return PA_HOOK_OK;
+
+    if ((si_role = pa_proplist_gets(i->proplist, PA_PROP_MEDIA_ROLE)) && pa_streq(si_role, "phone"))
         pa_proplist_sets(i->proplist, PA_PROP_FILTER_WANT, "echo-cancel");
 
     return PA_HOOK_OK;