Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Julian Bouzas
WirePlumber
Commits
eda8507e
Commit
eda8507e
authored
Dec 13, 2019
by
Julian Bouzas
Browse files
config-policy: use the default session endpoint if target-endpoint is not defined
parent
5348239c
Changes
3
Hide whitespace changes
Inline
Side-by-side
modules/module-config-policy/config-policy.c
View file @
eda8507e
...
...
@@ -279,8 +279,9 @@ static WpBaseEndpoint *
wp_config_policy_find_endpoint
(
WpPolicy
*
policy
,
GVariant
*
props
,
guint32
*
stream_id
)
{
g_autoptr
(
WpCore
)
core
=
NULL
;
g_autoptr
(
WpPolicyManager
)
pmgr
=
NULL
;
g_autoptr
(
WpCore
)
core
=
wp_policy_get_core
(
policy
);
g_autoptr
(
WpPolicyManager
)
pmgr
=
wp_policy_manager_get_instance
(
core
);
g_autoptr
(
WpSession
)
session
=
wp_policy_manager_get_session
(
pmgr
);
const
struct
WpParserEndpointLinkData
*
data
=
NULL
;
g_autoptr
(
GPtrArray
)
endpoints
=
NULL
;
guint
i
;
...
...
@@ -294,22 +295,58 @@ wp_config_policy_find_endpoint (WpPolicy *policy, GVariant *props,
if
(
!
data
)
return
NULL
;
/* Get all the endpoints matching the media class */
core
=
wp_policy_get_core
(
policy
);
pmgr
=
wp_policy_manager_get_instance
(
core
);
endpoints
=
wp_policy_manager_list_endpoints
(
pmgr
,
data
->
te
.
endpoint_data
.
media_class
);
if
(
!
endpoints
)
return
NULL
;
/* If target-endpoint data was defined in the configuration file, find the
* matching endpoint based on target-endpoint data */
if
(
data
->
has_te
)
{
/* Get all the endpoints matching the media class */
endpoints
=
wp_policy_manager_list_endpoints
(
pmgr
,
data
->
te
.
endpoint_data
.
media_class
);
if
(
!
endpoints
)
return
NULL
;
/* Get the first endpoint that matches target data */
for
(
i
=
0
;
i
<
endpoints
->
len
;
i
++
)
{
target
=
g_ptr_array_index
(
endpoints
,
i
);
if
(
wp_parser_endpoint_link_matches_endpoint_data
(
target
,
&
data
->
te
.
endpoint_data
))
break
;
}
}
/* Get the first endpoint that matches target data */
for
(
i
=
0
;
i
<
endpoints
->
len
;
i
++
)
{
target
=
g_ptr_array_index
(
endpoints
,
i
);
if
(
wp_parser_endpoint_link_matches_endpoint_data
(
target
,
&
data
->
te
.
endpoint_data
))
break
;
/* Otherwise, use the default session endpoint if the session is valid */
else
if
(
session
)
{
/* Get the default type */
WpDefaultEndpointType
type
;
switch
(
data
->
me
.
endpoint_data
.
direction
)
{
case
PW_DIRECTION_INPUT
:
type
=
WP_DEFAULT_ENDPOINT_TYPE_AUDIO_SOURCE
;
break
;
case
PW_DIRECTION_OUTPUT
:
type
=
WP_DEFAULT_ENDPOINT_TYPE_AUDIO_SINK
;
break
;
default:
g_warn_if_reached
();
return
NULL
;
}
/* Get all the endpoints */
endpoints
=
wp_policy_manager_list_endpoints
(
pmgr
,
NULL
);
if
(
!
endpoints
)
return
NULL
;
/* Find the default session endpoint */
for
(
i
=
0
;
i
<
endpoints
->
len
;
i
++
)
{
target
=
g_ptr_array_index
(
endpoints
,
i
);
guint
def_id
=
wp_session_get_default_endpoint
(
session
,
type
);
if
(
def_id
==
wp_base_endpoint_get_global_id
(
target
))
break
;
}
}
/* If no target data has been defined and session is not valid, return null */
else
return
NULL
;
/* If target did not match any data, return NULL */
if
(
i
>=
endpoints
->
len
)
return
NULL
;
...
...
modules/module-config-policy/parser-endpoint-link.c
View file @
eda8507e
...
...
@@ -199,27 +199,29 @@ wp_parser_endpoint_link_data_new (const gchar *location)
/* Get the match endpoint properties (Optional) */
res
->
me
.
endpoint_data
.
props
=
parse_properties
(
me
,
"properties"
);
/* Get the target-endpoint table */
/* Get the target-endpoint table (Optional) */
res
->
has_te
=
FALSE
;
te
=
wp_toml_table_get_table
(
table
,
"target-endpoint"
);
if
(
!
te
)
goto
error
;
if
(
te
)
{
res
->
has_te
=
TRUE
;
/* Get the name from the match endpoint table (Optional) */
res
->
te
.
endpoint_data
.
name
=
wp_toml_table_get_string
(
te
,
"name"
);
/* Get the name from the match endpoint table (Optional) */
res
->
te
.
endpoint_data
.
name
=
wp_toml_table_get_string
(
te
,
"name"
);
/* Get the media class from the match endpoint table (Optional) */
res
->
te
.
endpoint_data
.
media_class
=
wp_toml_table_get_string
(
te
,
"media_class"
);
/* Get the media class from the match endpoint table (Optional) */
res
->
te
.
endpoint_data
.
media_class
=
wp_toml_table_get_string
(
te
,
"media_class"
);
/* Set the direction to the match endpoint's reverse one */
res
->
te
.
endpoint_data
.
direction
=
pw_direction_reverse
(
res
->
me
.
endpoint_data
.
direction
);
/* Set the direction to the match endpoint's reverse one */
res
->
te
.
endpoint_data
.
direction
=
pw_direction_reverse
(
res
->
me
.
endpoint_data
.
direction
);
/* Get the target endpoint properties (Optional) */
res
->
te
.
endpoint_data
.
props
=
parse_properties
(
te
,
"properties"
);
/* Get the target endpoint properties (Optional) */
res
->
te
.
endpoint_data
.
props
=
parse_properties
(
te
,
"properties"
);
/* Get the target endpoint stream */
res
->
te
.
stream
=
wp_toml_table_get_string
(
te
,
"stream"
);
/* Get the target endpoint stream */
res
->
te
.
stream
=
wp_toml_table_get_string
(
te
,
"stream"
);
}
/* Get the target-endpoint table */
el
=
wp_toml_table_get_table
(
table
,
"endpoint-link"
);
...
...
modules/module-config-policy/parser-endpoint-link.h
View file @
eda8507e
...
...
@@ -27,6 +27,7 @@ struct WpParserEndpointLinkData {
guint
priority
;
struct
WpParserEndpointLinkEndpointData
endpoint_data
;
}
me
;
gboolean
has_te
;
struct
TargetEndpoint
{
struct
WpParserEndpointLinkEndpointData
endpoint_data
;
char
*
stream
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment