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
*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) {
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")) {
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);
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) {
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) {
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) {
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) {
return -1;
-
}
void pa__done(pa_module *m) {