diff --git a/src/modules/module-session-manager/client-endpoint.c b/src/modules/module-session-manager/client-endpoint.c index 0e501c9fd..5dac315e7 100644 --- a/src/modules/module-session-manager/client-endpoint.c +++ b/src/modules/module-session-manager/client-endpoint.c @@ -83,6 +83,8 @@ static int client_endpoint_stream_update(void *object, PW_KEY_FACTORY_ID, PW_KEY_CLIENT_ID, PW_KEY_ENDPOINT_ID, + PW_KEY_MEDIA_CLASS, + PW_KEY_PRIORITY_SESSION, NULL }; @@ -93,7 +95,10 @@ static int client_endpoint_stream_update(void *object, props = pw_properties_new(NULL, NULL); if (!props) goto no_mem; - pw_properties_copy_keys (endpoint->props, props, keys); + + pw_properties_update_keys(props, &endpoint->props->dict, keys); + if (info && info->props) + pw_properties_update_keys(props, info->props, keys); if (endpoint_stream_init(stream, stream_id, endpoint->info.id, this, core, props) < 0) diff --git a/src/modules/module-session-manager/client-session.c b/src/modules/module-session-manager/client-session.c index 9b20d8335..eb959861b 100644 --- a/src/modules/module-session-manager/client-session.c +++ b/src/modules/module-session-manager/client-session.c @@ -93,7 +93,7 @@ static int client_session_link_update(void *object, props = pw_properties_new(NULL, NULL); if (!props) goto no_mem; - pw_properties_copy_keys (session->props, props, keys); + pw_properties_update_keys(props, &session->props->dict, keys); if (endpoint_link_init(link, link_id, session->info.id, this, core, props) < 0) diff --git a/src/modules/module-session-manager/endpoint.c b/src/modules/module-session-manager/endpoint.c index 8f53429d0..c41a13b62 100644 --- a/src/modules/module-session-manager/endpoint.c +++ b/src/modules/module-session-manager/endpoint.c @@ -287,6 +287,7 @@ int endpoint_init(struct endpoint *this, PW_KEY_FACTORY_ID, PW_KEY_CLIENT_ID, PW_KEY_DEVICE_ID, + PW_KEY_MEDIA_CLASS, NULL }; @@ -299,7 +300,7 @@ int endpoint_init(struct endpoint *this, if (!properties) goto no_mem; - pw_properties_copy_keys(this->props, properties, keys); + pw_properties_update_keys(properties, &this->props->dict, keys); this->global = pw_global_new (core, PW_TYPE_INTERFACE_Endpoint, diff --git a/src/modules/module-session-manager/session.c b/src/modules/module-session-manager/session.c index 226eba4e7..d64739d84 100644 --- a/src/modules/module-session-manager/session.c +++ b/src/modules/module-session-manager/session.c @@ -298,7 +298,7 @@ int session_init(struct session *this, if (!properties) goto no_mem; - pw_properties_copy_keys(this->props, properties, keys); + pw_properties_update_keys(properties, &this->props->dict, keys); this->global = pw_global_new (core, PW_TYPE_INTERFACE_Session, diff --git a/src/pipewire/client.c b/src/pipewire/client.c index 149132f84..6f58d938a 100644 --- a/src/pipewire/client.c +++ b/src/pipewire/client.c @@ -394,7 +394,7 @@ int pw_client_register(struct pw_client *client, if (properties == NULL) return -errno; - pw_properties_copy_keys(client->properties, properties, keys); + pw_properties_update_keys(properties, &client->properties->dict, keys); client->global = pw_global_new(core, PW_TYPE_INTERFACE_Client, diff --git a/src/pipewire/device.c b/src/pipewire/device.c index 82c8f6a98..0199fa354 100644 --- a/src/pipewire/device.c +++ b/src/pipewire/device.c @@ -426,7 +426,7 @@ int pw_device_register(struct pw_device *device, if (properties == NULL) return -errno; - pw_properties_copy_keys(device->properties, properties, keys); + pw_properties_update_keys(properties, &device->properties->dict, keys); device->global = pw_global_new(core, PW_TYPE_INTERFACE_Device, diff --git a/src/pipewire/factory.c b/src/pipewire/factory.c index 08d76c0da..971d43489 100644 --- a/src/pipewire/factory.c +++ b/src/pipewire/factory.c @@ -209,7 +209,7 @@ int pw_factory_register(struct pw_factory *factory, if (properties == NULL) return -errno; - pw_properties_copy_keys(factory->properties, properties, keys); + pw_properties_update_keys(properties, &factory->properties->dict, keys); pw_properties_set(properties, PW_KEY_FACTORY_NAME, factory->info.name); pw_properties_setf(properties, PW_KEY_FACTORY_TYPE_NAME, "%s", diff --git a/src/pipewire/link.c b/src/pipewire/link.c index d16e1c91f..c51e75dcc 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -1227,7 +1227,7 @@ int pw_link_register(struct pw_link *link, link->info.input_node_id = input_node->global->id; link->info.input_port_id = link->input->global->id; - pw_properties_copy_keys(link->properties, properties, keys); + pw_properties_update_keys(properties, &link->properties->dict, keys); pw_properties_setf(properties, PW_KEY_LINK_OUTPUT_PORT, "%d", link->info.output_port_id); pw_properties_setf(properties, PW_KEY_LINK_INPUT_PORT, "%d", link->info.input_port_id); diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 5755af286..873b10c57 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -592,7 +592,7 @@ int pw_node_register(struct pw_node *this, if (properties == NULL) return -errno; - pw_properties_copy_keys(this->properties, properties, keys); + pw_properties_update_keys(properties, &this->properties->dict, keys); this->global = pw_global_new(core, PW_TYPE_INTERFACE_Node, diff --git a/src/pipewire/port.c b/src/pipewire/port.c index b1dc6e473..0c41a1363 100644 --- a/src/pipewire/port.c +++ b/src/pipewire/port.c @@ -801,7 +801,7 @@ int pw_port_register(struct pw_port *port, return -errno; pw_properties_setf(properties, PW_KEY_NODE_ID, "%d", node->global->id); - pw_properties_copy_keys(port->properties, properties, keys); + pw_properties_update_keys(properties, &port->properties->dict, keys); port->global = pw_global_new(node->core, PW_TYPE_INTERFACE_Port, diff --git a/src/pipewire/properties.c b/src/pipewire/properties.c index 5ccb31c1f..c2119cae9 100644 --- a/src/pipewire/properties.c +++ b/src/pipewire/properties.c @@ -212,15 +212,15 @@ struct pw_properties *pw_properties_copy(const struct pw_properties *properties) * \memberof pw_properties */ SPA_EXPORT -int pw_properties_copy_keys(const struct pw_properties *src, - struct pw_properties *dst, const char *keys[]) +int pw_properties_update_keys(struct pw_properties *props, + const struct spa_dict *dict, const char *keys[]) { int i, changed = 0; const char *str; for (i = 0; keys[i]; i++) { - if ((str = pw_properties_get(src, keys[i])) != NULL) - changed += pw_properties_set(dst, keys[i], str); + if ((str = spa_dict_lookup(dict, keys[i])) != NULL) + changed += pw_properties_set(props, keys[i], str); } return changed; } diff --git a/src/pipewire/properties.h b/src/pipewire/properties.h index 4d5ce0260..c87e818b3 100644 --- a/src/pipewire/properties.h +++ b/src/pipewire/properties.h @@ -57,11 +57,10 @@ pw_properties_new_string(const char *args); struct pw_properties * pw_properties_copy(const struct pw_properties *properties); -int pw_properties_copy_keys(const struct pw_properties *src, - struct pw_properties *dst, const char *keys[]); +int pw_properties_update_keys(struct pw_properties *props, + const struct spa_dict *dict, const char *keys[]); -int -pw_properties_update(struct pw_properties *oldprops, +int pw_properties_update(struct pw_properties *oldprops, const struct spa_dict *dict); void pw_properties_clear(struct pw_properties *properties);