node: add an event to enumerate the peer port params

This can be used by nodes to filter or proxy the peer params.

Add test for new peer_enum_params event
This commit is contained in:
Wim Taymans 2024-04-11 17:19:12 +02:00
parent af6638251d
commit 67aafec8ab
3 changed files with 28 additions and 4 deletions

View file

@ -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

View file

@ -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,...) \

View file

@ -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);