mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
policy-node: add default video source metadata
This commit is contained in:
parent
9e8851e0ae
commit
a2de3b0873
1 changed files with 18 additions and 5 deletions
|
|
@ -63,6 +63,7 @@ struct impl {
|
|||
|
||||
uint32_t default_audio_sink;
|
||||
uint32_t default_audio_source;
|
||||
uint32_t default_video_source;
|
||||
};
|
||||
|
||||
struct node {
|
||||
|
|
@ -349,6 +350,8 @@ static void session_remove(void *data, struct sm_object *object)
|
|||
impl->default_audio_sink = SPA_ID_INVALID;
|
||||
if (impl->default_audio_source == object->id)
|
||||
impl->default_audio_source = SPA_ID_INVALID;
|
||||
if (impl->default_video_source == object->id)
|
||||
impl->default_video_source = SPA_ID_INVALID;
|
||||
}
|
||||
|
||||
sm_media_session_schedule_rescan(impl->session);
|
||||
|
|
@ -393,12 +396,17 @@ static int find_node(void *data, struct node *node)
|
|||
plugged = node->plugged;
|
||||
priority = node->priority;
|
||||
|
||||
if (node->media && strcmp(node->media, "Audio") == 0) {
|
||||
if (node->media) {
|
||||
bool is_default = false;
|
||||
if (strcmp(node->media, "Audio") == 0) {
|
||||
if (node->direction == PW_DIRECTION_INPUT)
|
||||
is_default = impl->default_audio_sink == node->id;
|
||||
else if (node->direction == PW_DIRECTION_OUTPUT)
|
||||
is_default = impl->default_audio_source == node->id;
|
||||
} else if (strcmp(node->media, "Video") == 0) {
|
||||
if (node->direction == PW_DIRECTION_OUTPUT)
|
||||
is_default = impl->default_video_source == node->id;
|
||||
}
|
||||
if (is_default)
|
||||
priority += 1000;
|
||||
}
|
||||
|
|
@ -762,6 +770,10 @@ static int metadata_property(void *object, uint32_t subject,
|
|||
if (impl->default_audio_source != SPA_ID_INVALID && value)
|
||||
move_node(impl, impl->default_audio_source, atoi(value));
|
||||
impl->default_audio_source = value ? (uint32_t)atoi(value) : SPA_ID_INVALID;
|
||||
} else if (strcmp(key, "default.video.source") == 0) {
|
||||
if (impl->default_video_source != SPA_ID_INVALID && value)
|
||||
move_node(impl, impl->default_video_source, atoi(value));
|
||||
impl->default_video_source = value ? (uint32_t)atoi(value) : SPA_ID_INVALID;
|
||||
}
|
||||
} else {
|
||||
struct node *src_node, *dst_node = NULL;
|
||||
|
|
@ -797,6 +809,7 @@ int sm_policy_node_start(struct sm_media_session *session)
|
|||
impl->sample_rate = 48000;
|
||||
impl->default_audio_sink = SPA_ID_INVALID;
|
||||
impl->default_audio_source = SPA_ID_INVALID;
|
||||
impl->default_video_source = SPA_ID_INVALID;
|
||||
|
||||
spa_list_init(&impl->node_list);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue