mirror of
https://gitlab.freedesktop.org/pipewire/pipewire
synced 2024-10-04 15:10:20 +00:00
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:
parent
af6638251d
commit
67aafec8ab
|
@ -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
|
||||
|
|
|
@ -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,...) \
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue