node: add option to not register a node

This commit is contained in:
Wim Taymans 2018-04-13 20:05:46 +02:00
parent fa07400c2e
commit efa35c2911
6 changed files with 23 additions and 8 deletions

View file

@ -1298,7 +1298,8 @@ static const struct pw_resource_events resource_events = {
* \memberof pw_client_node
*/
struct pw_client_node *pw_client_node_new(struct pw_resource *resource,
struct pw_properties *properties)
struct pw_properties *properties,
bool do_register)
{
struct impl *impl;
struct pw_client_node *this;
@ -1335,7 +1336,8 @@ struct pw_client_node *pw_client_node_new(struct pw_resource *resource,
pw_resource_get_client(this->resource),
NULL,
name,
PW_SPA_NODE_FLAG_ASYNC,
PW_SPA_NODE_FLAG_ASYNC |
(do_register ? 0 : PW_SPA_NODE_FLAG_NO_REGISTER),
&impl->node.node,
NULL,
properties, 0);

View file

@ -39,7 +39,8 @@ struct pw_client_node {
struct pw_client_node *
pw_client_node_new(struct pw_resource *resource,
struct pw_properties *properties);
struct pw_properties *properties,
bool do_register);
void
pw_client_node_destroy(struct pw_client_node *node);

View file

@ -75,10 +75,16 @@ static void pw_spa_node_destroy(void *data)
static void complete_init(struct impl *impl)
{
struct pw_node *this = impl->this;
if (impl->flags & PW_SPA_NODE_FLAG_DISABLE)
if (SPA_FLAG_CHECK(impl->flags, PW_SPA_NODE_FLAG_DISABLE))
pw_node_set_enabled(this, false);
if (!SPA_FLAG_CHECK(impl->flags, PW_SPA_NODE_FLAG_NO_REGISTER))
pw_node_register(this, impl->owner, impl->parent, NULL);
if (impl->flags & PW_SPA_NODE_FLAG_ACTIVATE)
else
pw_node_initialized(this);
if (SPA_FLAG_CHECK(impl->flags, PW_SPA_NODE_FLAG_ACTIVATE))
pw_node_set_active(this, true);
}

View file

@ -34,6 +34,7 @@ enum pw_spa_node_flags {
PW_SPA_NODE_FLAG_ASYNC = (1 << 0),
PW_SPA_NODE_FLAG_DISABLE = (1 << 1),
PW_SPA_NODE_FLAG_ACTIVATE = (1 << 2),
PW_SPA_NODE_FLAG_NO_REGISTER = (1 << 3),
};
struct pw_node *

View file

@ -383,10 +383,13 @@ int pw_node_register(struct pw_node *this,
pw_port_register(port, owner, this->global,
pw_properties_copy(port->properties));
return pw_node_initialized(this);
}
int pw_node_initialized(struct pw_node *this)
{
spa_hook_list_call(&this->listener_list, struct pw_node_events, initialized);
pw_node_update_state(this, PW_NODE_STATE_SUSPENDED, NULL);
return 0;
}

View file

@ -599,6 +599,8 @@ void pw_node_update_state(struct pw_node *node, enum pw_node_state state, char *
int pw_node_update_ports(struct pw_node *node);
int pw_node_initialized(struct pw_node *node);
/** Activate a link \memberof pw_link
* Starts the negotiation of formats and buffers on \a link and then
* starts data streaming */