return ret;
}
-static bool check_role_to_skip(pa_stream_manager *m, process_command_type_t command, const char *role) {
- bool ret = true;
+static bool is_invalid_role(pa_stream_manager *m, const char *role) {
stream_info *s = NULL;
pa_assert(m);
pa_assert(m->stream_infos);
pa_assert(role);
- if ((s = pa_hashmap_get(m->stream_infos, role)))
- ret = false;
- if (s && pa_safe_streq(role, STREAM_ROLE_LOOPBACK_MIRRORING) &&
- (command == PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_STARTED ||
- command == PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_ENDED))
- ret = true;
-
- pa_log_debug("role is [%s], skip(%d)", role, ret);
+ if (!(s = pa_hashmap_get(m->stream_infos, role))) {
+ pa_log_warn("invalid role[%s], skip it", role);
+ return true;
+ }
- return ret;
+ return false;
}
-static bool check_route_type_to_skip(process_command_type_t command, const char *route_type_str) {
- bool ret = false;
- stream_route_type_t route_type;
+static bool is_invalid_route_type(const char *route_type_str, stream_route_type_t *route_type) {
+ int32_t _route_type;
pa_assert(route_type_str);
- if (!pa_atoi(route_type_str, (int32_t*)&route_type)) {
- if ((route_type == STREAM_ROUTE_TYPE_MANUAL_EXT) &&
- (command > PROCESS_COMMAND_PREPARE && command < PROCESS_COMMAND_UPDATE_VOLUME))
- ret = true; /* this route route is for external device, need to skip */
- } else {
+ if (pa_atoi(route_type_str, &_route_type)) {
pa_log_error("could not convert route_type_str(%s) to int", route_type_str);
- ret = true;
+ return true;
}
- pa_log_debug("command is [%s], skip(%d) for route_type(%d)", process_command_type_str[command], ret, route_type);
- return ret;
+ if (route_type)
+ *route_type = (stream_route_type_t)_route_type;
+
+ return false;
}
static bool check_name_is_vstream(void *stream, stream_type_t type, bool is_new_data) {
pa_log_warn("role is null, set default to [%s]", role);
} else {
/* skip roles */
- if (check_role_to_skip(m, PROCESS_COMMAND_PREPARE, role))
+ if (is_invalid_role(m, role))
return PROCESS_STREAM_RESULT_SKIP;
/* load forwarding device */
/* skip route types */
if ((route_type_str = pa_proplist_gets(GET_STREAM_NEW_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE_ROUTE_TYPE))) {
- if (check_route_type_to_skip(PROCESS_COMMAND_PREPARE, route_type_str))
+ if (is_invalid_route_type(route_type_str, NULL))
return PROCESS_STREAM_RESULT_SKIP;
}
stream_type_t type, bool is_new_data) {
const char *role = NULL;
const char *route_type_str = NULL;
+ stream_route_type_t route_type;
const char *preferred_device_role;
bool need_update = false;
}
/* skip roles */
- if (check_role_to_skip(m, PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_STARTED, role))
+ if (is_invalid_role(m, role))
+ return PROCESS_STREAM_RESULT_SKIP;
+ if (pa_safe_streq(role, STREAM_ROLE_LOOPBACK_MIRRORING)) {
+ pa_log_debug("role is [%s], skip it", role);
return PROCESS_STREAM_RESULT_SKIP;
+ }
/* skip route types */
- if (check_route_type_to_skip(PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_STARTED, route_type_str))
+ if (is_invalid_route_type(route_type_str, &route_type))
+ return PROCESS_STREAM_RESULT_SKIP;
+ if (route_type == STREAM_ROUTE_TYPE_MANUAL_EXT)
return PROCESS_STREAM_RESULT_SKIP;
if (!is_new_data) {
update_forwarding_device(m, false);
/* skip roles */
- if (check_role_to_skip(m, PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_ENDED, role))
+ if (is_invalid_role(m, role))
+ return PROCESS_STREAM_RESULT_SKIP;
+ if (pa_safe_streq(role, STREAM_ROLE_LOOPBACK_MIRRORING)) {
+ pa_log_debug("role is [%s], skip it", role);
return PROCESS_STREAM_RESULT_SKIP;
+ }
/* skip route types */
if ((route_type_str = pa_proplist_gets(GET_STREAM_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE_ROUTE_TYPE))) {
- if (check_route_type_to_skip(PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_ENDED, route_type_str))
+ stream_route_type_t route_type;
+ if (is_invalid_route_type(route_type_str, &route_type))
+ return PROCESS_STREAM_RESULT_SKIP;
+ if (route_type == STREAM_ROUTE_TYPE_MANUAL_EXT)
return PROCESS_STREAM_RESULT_SKIP;
}
}
/* skip roles */
- if (check_role_to_skip(m, PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_FOCUS_CHANGED, role))
+ if (is_invalid_role(m, role))
return PROCESS_STREAM_RESULT_SKIP;
/* skip route types */
if ((route_type_str = pa_proplist_gets(GET_STREAM_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE_ROUTE_TYPE))) {
- if (check_route_type_to_skip(PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_FOCUS_CHANGED, route_type_str))
+ stream_route_type_t route_type;
+ if (is_invalid_route_type(route_type_str, &route_type))
+ return PROCESS_STREAM_RESULT_SKIP;
+ if (route_type == STREAM_ROUTE_TYPE_MANUAL_EXT)
return PROCESS_STREAM_RESULT_SKIP;
}
}
/* skip roles */
- if (check_role_to_skip(m, command, role))
+ if (is_invalid_role(m, role))
return PROCESS_STREAM_RESULT_SKIP;
/* skip route types */
if ((route_type_str = pa_proplist_gets(GET_STREAM_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE_ROUTE_TYPE))) {
- if (check_route_type_to_skip(command, route_type_str))
+ if (is_invalid_route_type(route_type_str, NULL))
return PROCESS_STREAM_RESULT_SKIP;
}