Skip to content
Snippets Groups Projects
Commit 133469d5 authored by George Kiagiadakis's avatar George Kiagiadakis
Browse files

config-policy: fix stream priority logic when the stream name comes from media.role

the _can_link function was previously assuming that the target
stream is always specified in the configuration file
parent dcecc217
No related branches found
No related tags found
No related merge requests found
......@@ -80,8 +80,8 @@ on_endpoint_link_created (GObject *initable, GAsyncResult *res, gpointer p)
}
static gboolean
wp_config_policy_can_link_stream (WpConfigPolicy *self, WpEndpoint *ep,
const struct WpParserEndpointLinkData *data)
wp_config_policy_can_link_stream (WpConfigPolicy *self, WpEndpoint *target,
const struct WpParserEndpointLinkData *data, guint32 stream_id)
{
g_autoptr (WpConfigParser) parser = NULL;
const struct WpParserStreamsData *streams_data = NULL;
......@@ -91,30 +91,37 @@ wp_config_policy_can_link_stream (WpConfigPolicy *self, WpEndpoint *ep,
return TRUE;
/* If the endpoint is not linked, we can link */
if (!wp_endpoint_is_linked (ep))
if (!wp_endpoint_is_linked (target))
return TRUE;
/* Get the linked stream */
gboolean is_capture = wp_endpoint_get_direction (ep) == PW_DIRECTION_INPUT;
GPtrArray *links = wp_endpoint_get_links (ep);
gboolean is_capture = wp_endpoint_get_direction (target) == PW_DIRECTION_INPUT;
GPtrArray *links = wp_endpoint_get_links (target);
WpEndpointLink *l = g_ptr_array_index (links, 0);
guint32 linked_stream = is_capture ?
wp_endpoint_link_get_sink_stream (l) :
wp_endpoint_link_get_source_stream (l);
/* Check if linked stream is the same as ep stream. Last one wins */
if (data->te.stream &&
linked_stream == wp_endpoint_find_stream (ep, data->te.stream))
/* Check if linked stream is the same as target stream. Last one wins */
if (linked_stream == stream_id)
return TRUE;
/* Get the linked stream name */
g_autoptr (GVariant) s = wp_endpoint_get_stream (ep, linked_stream);
g_autoptr (GVariant) s = wp_endpoint_get_stream (target, linked_stream);
if (!s)
return TRUE;
const gchar *linked_stream_name;
if (!g_variant_lookup (s, "name", "&s", &linked_stream_name))
return TRUE;
/* Get the target stream name */
g_autoptr (GVariant) ts = wp_endpoint_get_stream (target, stream_id);
if (!ts)
return TRUE;
const gchar *target_stream_name;
if (!g_variant_lookup (ts, "name", "&s", &target_stream_name))
return TRUE;
/* Get the linked and ep streams data */
parser = wp_configuration_get_parser (self->config,
WP_PARSER_STREAMS_EXTENSION);
......@@ -124,7 +131,11 @@ wp_config_policy_can_link_stream (WpConfigPolicy *self, WpEndpoint *ep,
const struct WpParserStreamsStreamData *linked_stream_data =
wp_parser_streams_find_stream (streams_data, linked_stream_name);
const struct WpParserStreamsStreamData *ep_stream_data =
wp_parser_streams_find_stream (streams_data, data->te.stream);
wp_parser_streams_find_stream (streams_data, target_stream_name);
g_debug ("Trying to link to '%s' (%d); target is linked on '%s' (%d)",
target_stream_name, ep_stream_data ? ep_stream_data->priority : -1,
linked_stream_name, linked_stream_data ? linked_stream_data->priority : -1);
/* Return false if linked stream has higher priority than ep stream */
if (linked_stream_data && ep_stream_data) {
......@@ -245,10 +256,10 @@ wp_config_policy_handle_endpoint (WpPolicy *policy, WpEndpoint *ep)
}
/* Don't link if the target is linked with a higher priority stream */
can_link = wp_config_policy_can_link_stream (self, target, data);
can_link = wp_config_policy_can_link_stream (self, target, data, stream_id);
g_debug ("Trying to handle endpoint: %s, can_link:%d",
wp_endpoint_get_name (ep), can_link);
g_debug ("Trying to handle endpoint: %s, role:%s, can_link:%d",
wp_endpoint_get_name (ep), role, can_link);
/* Link the endpoint with its target */
return can_link && wp_config_policy_link_endpoint_with_target (self, ep,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment