else
pl = PA_SOURCE_OUTPUT(o)->proplist;
- /* If the stream doesn't what any filter, then let it be. */
+ /* If the stream doesn't want any filter, then let it be. */
if ((apply = pa_proplist_gets(pl, PA_PROP_FILTER_APPLY)) && !pa_streq(apply, "")) {
const char* suppress = pa_proplist_gets(pl, PA_PROP_FILTER_SUPPRESS);
pa_sink *sink = NULL;
pa_source *source = NULL;
pa_module *module = NULL;
+ char *module_name = NULL;
+ struct filter *fltr = NULL, *filter = NULL;
pa_proplist *pl;
if (is_sink_input) {
/* If there is no sink/source yet, we can't do much */
if ((is_sink_input && !sink) || (!is_sink_input && !source))
- return PA_HOOK_OK;
+ goto done;
/* If the stream doesn't want any filter, then let it be. */
if ((want = get_filter_name(o, is_sink_input))) {
- char *module_name;
- struct filter *fltr, *filter;
-
/* We need to ensure the SI is playing on a sink of this type
* attached to the sink it's "officially" playing on */
if (!module)
- return PA_HOOK_OK;
+ goto done;
module_name = pa_sprintf_malloc("module-%s", want);
if (pa_streq(module->name, module_name)) {
pa_log_debug("Stream appears to be playing on an appropriate sink already. Ignoring.");
- pa_xfree(module_name);
- return PA_HOOK_OK;
+ goto done;
}
/* If the stream originally did not have the filter.apply property set and is
if (should_group_filter(fltr) && !find_paired_master(u, fltr, o, is_sink_input)) {
pa_log_debug("Want group filtering but don't have enough streams.");
- pa_xfree(module_name);
- filter_free(fltr);
- return PA_HOOK_OK;
+ goto done;
}
if (!(filter = pa_hashmap_get(u->filters, fltr))) {
pa_xfree(args);
}
- filter_free(fltr);
-
if (!filter) {
pa_log("Unable to load %s", module_name);
- pa_xfree(module_name);
- return PA_HOOK_OK;
+ goto done;
}
- pa_xfree(module_name);
/* We can move the stream now as we know the destination. If this
* isn't true, we will do it later when the sink appears. */
done_something = true;
}
} else {
- struct filter *filter = NULL;
-
/* The filter.apply property is not set. If the stream is nevertheless using a
* filter sink/source, it either has been moved to the filter manually or the
* user just removed the filter.apply property. */
if (done_something)
trigger_housekeeping(u);
+ pa_xfree(module_name);
+ filter_free(fltr);
+
return PA_HOOK_OK;
}