mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04: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
					
				
					 3 changed files with 28 additions and 4 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Wim Taymans
						Wim Taymans