diff --git a/spa/include/spa/node/node.h b/spa/include/spa/node/node.h index 44e45da83..629b249c9 100644 --- a/spa/include/spa/node/node.h +++ b/spa/include/spa/node/node.h @@ -30,7 +30,7 @@ extern "C" { #define SPA_TYPE_INTERFACE_Node SPA_TYPE_INFO_INTERFACE_BASE "Node" -#define SPA_VERSION_NODE 0 +#define SPA_VERSION_NODE 1 struct spa_node { struct spa_interface iface; }; /** @@ -126,7 +126,8 @@ struct spa_result_node_params { #define SPA_NODE_EVENT_PORT_INFO 1 #define SPA_NODE_EVENT_RESULT 2 #define SPA_NODE_EVENT_EVENT 3 -#define SPA_NODE_EVENT_NUM 4 +#define SPA_NODE_EVENT_PEER_ENUM_PARAM 4 +#define SPA_NODE_EVENT_NUM 5 /** events from the spa_node. * @@ -135,7 +136,7 @@ struct spa_result_node_params { * spa_node_add_listener(). */ struct spa_node_events { -#define SPA_VERSION_NODE_EVENTS 0 +#define SPA_VERSION_NODE_EVENTS 1 uint32_t version; /**< version of this structure */ /** Emitted when info changes */ @@ -173,6 +174,21 @@ struct spa_node_events { * on \a node. */ void (*event) (void *data, const struct spa_event *event); + + /** + * \param data the data when registering the listener + * + * Register the given events and data as a listener to the + * peer of the given port and enumerate the params. + * + * since 1:1 + */ + void (*peer_enum_params) (void *data, int seq, + enum spa_direction direction, uint32_t port_id, + uint32_t id, uint32_t start, uint32_t max, + const struct spa_pod *filter, + const struct spa_node_events *events, void *events_data, + int *res); }; #define SPA_NODE_CALLBACK_READY 0 diff --git a/spa/include/spa/node/utils.h b/spa/include/spa/node/utils.h index 01d249ab9..e482ca4f6 100644 --- a/spa/include/spa/node/utils.h +++ b/spa/include/spa/node/utils.h @@ -113,6 +113,7 @@ static inline int spa_node_port_enum_params_sync(struct spa_node *node, #define spa_node_emit_port_info(hooks,...) spa_node_emit(hooks,port_info, 0, __VA_ARGS__) #define spa_node_emit_result(hooks,...) spa_node_emit(hooks,result, 0, __VA_ARGS__) #define spa_node_emit_event(hooks,...) spa_node_emit(hooks,event, 0, __VA_ARGS__) +#define spa_node_emit_peer_enum_params(hooks,...) spa_node_emit(hooks,peer_enum_params,1, __VA_ARGS__) #define spa_node_call(callbacks,method,version,...) \ diff --git a/test/test-spa-node.c b/test/test-spa-node.c index 64ecedf16..72ffe64da 100644 --- a/test/test-spa-node.c +++ b/test/test-spa-node.c @@ -125,6 +125,12 @@ PWTEST(node_node_abi) void (*result) (void *data, int seq, int res, uint32_t type, const void *result); void (*event) (void *data, const struct spa_event *event); + void (*peer_enum_params) (void *data, int seq, + enum spa_direction direction, uint32_t port_id, + uint32_t id, uint32_t start, uint32_t max, + const struct spa_pod *filter, + const struct spa_node_events *events, void *events_data, + int *res); } events = { SPA_VERSION_NODE_EVENTS, }; struct { uint32_t version; @@ -188,7 +194,8 @@ PWTEST(node_node_abi) TEST_FUNC(e, events, port_info, SPA_NODE_EVENT_PORT_INFO); TEST_FUNC(e, events, result, SPA_NODE_EVENT_RESULT); TEST_FUNC(e, events, event, SPA_NODE_EVENT_EVENT); - pwtest_int_eq(SPA_NODE_EVENT_NUM, 4); + TEST_FUNC(e, events, peer_enum_params, SPA_NODE_EVENT_PEER_ENUM_PARAM); + pwtest_int_eq(SPA_NODE_EVENT_NUM, 5); pwtest_int_eq(sizeof(e), sizeof(events)); TEST_FUNC(c, callbacks, version, 0);