mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-04-09 08:21:08 -04:00
port: improve parsing of passive modes
Make a function to parse the passive mode and use that in ports and nodes. Improve the node passive mode parsing a little. Also make Duplex nodes follow-suspend.
This commit is contained in:
parent
446e36807f
commit
49073cf527
4 changed files with 28 additions and 32 deletions
|
|
@ -1251,36 +1251,26 @@ static void check_properties(struct pw_impl_node *node)
|
|||
|
||||
if ((str = pw_properties_get(node->properties, PW_KEY_NODE_PASSIVE)) == NULL) {
|
||||
if ((str = pw_properties_get(node->properties, PW_KEY_MEDIA_CLASS)) != NULL &&
|
||||
(strstr(str, "/Sink") != NULL || strstr(str, "/Source") != NULL))
|
||||
(strstr(str, "/Duplex") || strstr(str, "/Sink") || strstr(str, "/Source")))
|
||||
str = "follow-suspend";
|
||||
else
|
||||
str = "false";
|
||||
}
|
||||
while ((s = pw_split_walk(str, ",\0", &len, &state))) {
|
||||
char v[16] = { 0 };
|
||||
char v[32] = { 0 };
|
||||
snprintf(v, sizeof(v), "%.*s", (int)len, s);
|
||||
|
||||
if (spa_streq(v, "out"))
|
||||
node->passive_mode[SPA_DIRECTION_OUTPUT] = PASSIVE_MODE_TRUE;
|
||||
else if (spa_streq(v, "out-follow"))
|
||||
node->passive_mode[SPA_DIRECTION_OUTPUT] = PASSIVE_MODE_FOLLOW;
|
||||
else if (spa_streq(v, "in-follow"))
|
||||
node->passive_mode[SPA_DIRECTION_INPUT] = PASSIVE_MODE_FOLLOW;
|
||||
else if (spa_streq(v, "in"))
|
||||
node->passive_mode[SPA_DIRECTION_INPUT] = PASSIVE_MODE_TRUE;
|
||||
else if (spa_streq(v, "follow-suspend")) {
|
||||
node->passive_mode[SPA_DIRECTION_INPUT] = PASSIVE_MODE_FOLLOW_SUSPEND;
|
||||
node->passive_mode[SPA_DIRECTION_OUTPUT] = PASSIVE_MODE_FOLLOW_SUSPEND;
|
||||
}
|
||||
else if (spa_streq(v, "follow")) {
|
||||
node->passive_mode[SPA_DIRECTION_INPUT] = PASSIVE_MODE_FOLLOW;
|
||||
node->passive_mode[SPA_DIRECTION_OUTPUT] = PASSIVE_MODE_FOLLOW;
|
||||
}
|
||||
else {
|
||||
node->passive_mode[SPA_DIRECTION_OUTPUT] =
|
||||
node->passive_mode[SPA_DIRECTION_INPUT] =
|
||||
spa_atob(v) ? PASSIVE_MODE_TRUE : PASSIVE_MODE_FALSE;
|
||||
}
|
||||
else if (spa_strstartswith(v, "out-"))
|
||||
node->passive_mode[SPA_DIRECTION_OUTPUT] = passive_mode_from_string(v+4);
|
||||
else if (spa_strstartswith(v, "in-"))
|
||||
node->passive_mode[SPA_DIRECTION_INPUT] = passive_mode_from_string(v+3);
|
||||
else
|
||||
node->passive_mode[SPA_DIRECTION_INPUT] =
|
||||
node->passive_mode[SPA_DIRECTION_OUTPUT] = passive_mode_from_string(v);
|
||||
}
|
||||
|
||||
node->want_driver = pw_properties_get_bool(node->properties, PW_KEY_NODE_WANT_DRIVER, false);
|
||||
|
|
|
|||
|
|
@ -541,12 +541,7 @@ static int check_properties(struct pw_impl_port *port)
|
|||
/* inherit passive state from parent node */
|
||||
port->passive_mode = node->passive_mode[port->direction];
|
||||
} else {
|
||||
if (spa_streq(str, "follow")) {
|
||||
port->passive_mode = PASSIVE_MODE_FOLLOW;
|
||||
} else {
|
||||
port->passive_mode = spa_atob(str) ?
|
||||
PASSIVE_MODE_TRUE : PASSIVE_MODE_FALSE;
|
||||
}
|
||||
port->passive_mode = passive_mode_from_string(str);
|
||||
}
|
||||
|
||||
if (media_class != NULL &&
|
||||
|
|
|
|||
|
|
@ -1000,9 +1000,17 @@ static inline const char* passive_mode_to_string(uint32_t passive_mode)
|
|||
return "follow";
|
||||
case PASSIVE_MODE_FOLLOW_SUSPEND:
|
||||
return "follow";
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
static inline uint32_t passive_mode_from_string(const char *str)
|
||||
{
|
||||
if (spa_streq(str, "follow"))
|
||||
return PASSIVE_MODE_FOLLOW;
|
||||
else if (spa_streq(str, "follow-suspend"))
|
||||
return PASSIVE_MODE_FOLLOW_SUSPEND;
|
||||
return spa_atob(str);
|
||||
}
|
||||
|
||||
struct pw_control_link {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue