filter-apply: Look for filter parameters also in device properties
authorSebastian Krzyszkowiak <dos@dosowisko.net>
Thu, 29 Oct 2020 01:11:22 +0000 (02:11 +0100)
committerPulseAudio Marge Bot <pulseaudio-maintainers@lists.freedesktop.org>
Mon, 14 Dec 2020 21:01:16 +0000 (21:01 +0000)
Some filters take parameters that effectively describe the hardware
they're being applied to (like echo-cancel allowing to specify the
mic array parameters for better noise filtering). This allows system
integrators to set default parameters for such modules per-device,
which will get used when the stream doesn't specify their own.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/400>

src/modules/module-filter-apply.c

index c9f3f39..1c12782 100644 (file)
@@ -146,15 +146,20 @@ static const char* get_filter_name(pa_object *o, bool is_sink_input) {
 static const char* get_filter_parameters(pa_object *o, const char *want, bool is_sink_input) {
     const char *parameters;
     char *prop_parameters;
-    pa_proplist *pl;
+    pa_proplist *pl, *device_pl;
 
-    if (is_sink_input)
+    if (is_sink_input) {
         pl = PA_SINK_INPUT(o)->proplist;
-    else
+        device_pl = PA_SINK_INPUT(o)->sink->proplist;
+    } else {
         pl = PA_SOURCE_OUTPUT(o)->proplist;
+        device_pl = PA_SOURCE_OUTPUT(o)->source->proplist;
+    }
 
     prop_parameters = pa_sprintf_malloc(PA_PROP_FILTER_APPLY_PARAMETERS, want);
     parameters = pa_proplist_gets(pl, prop_parameters);
+    if (!parameters)
+        parameters = pa_proplist_gets(device_pl, prop_parameters);
     pa_xfree(prop_parameters);
 
     return parameters;