mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	media-session: add method to remove links
This commit is contained in:
		
							parent
							
								
									035fb26d71
								
							
						
					
					
						commit
						2d5a404244
					
				
					 2 changed files with 35 additions and 0 deletions
				
			
		| 
						 | 
					@ -1581,6 +1581,39 @@ int sm_media_session_create_links(struct sm_media_session *sess,
 | 
				
			||||||
	return res;
 | 
						return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int sm_media_session_remove_links(struct sm_media_session *sess,
 | 
				
			||||||
 | 
							const struct spa_dict *dict)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct impl *impl = SPA_CONTAINER_OF(sess, struct impl, this);
 | 
				
			||||||
 | 
						struct sm_object *obj;
 | 
				
			||||||
 | 
						struct sm_node *outnode = NULL, *innode = NULL;
 | 
				
			||||||
 | 
						const char *str;
 | 
				
			||||||
 | 
						struct link *l, *t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* find output node */
 | 
				
			||||||
 | 
						if ((str = spa_dict_lookup(dict, PW_KEY_LINK_OUTPUT_NODE)) != NULL &&
 | 
				
			||||||
 | 
						    (obj = find_object(impl, atoi(str))) != NULL &&
 | 
				
			||||||
 | 
						    strcmp(obj->type, PW_TYPE_INTERFACE_Node) == 0) {
 | 
				
			||||||
 | 
							outnode = (struct sm_node*)obj;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* find input node */
 | 
				
			||||||
 | 
						if ((str = spa_dict_lookup(dict, PW_KEY_LINK_INPUT_NODE)) != NULL &&
 | 
				
			||||||
 | 
						    (obj = find_object(impl, atoi(str))) != NULL &&
 | 
				
			||||||
 | 
						    strcmp(obj->type, PW_TYPE_INTERFACE_Node) == 0) {
 | 
				
			||||||
 | 
							innode = (struct sm_node*)obj;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (innode == NULL || outnode == NULL)
 | 
				
			||||||
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						spa_list_for_each_safe(l, t, &impl->link_list, link) {
 | 
				
			||||||
 | 
							if (l->output_node == outnode->obj.id && l->input_node == innode->obj.id) {
 | 
				
			||||||
 | 
								pw_proxy_destroy(l->proxy);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void monitor_core_done(void *data, uint32_t id, int seq)
 | 
					static void monitor_core_done(void *data, uint32_t id, int seq)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct impl *impl = data;
 | 
						struct impl *impl = data;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -271,6 +271,8 @@ struct sm_node *sm_media_session_create_node(struct sm_media_session *sess,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sm_media_session_create_links(struct sm_media_session *sess,
 | 
					int sm_media_session_create_links(struct sm_media_session *sess,
 | 
				
			||||||
		const struct spa_dict *dict);
 | 
							const struct spa_dict *dict);
 | 
				
			||||||
 | 
					int sm_media_session_remove_links(struct sm_media_session *sess,
 | 
				
			||||||
 | 
							const struct spa_dict *dict);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue