mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	impl-port: only go through mixer for IO
Since we don't follow updates of the params on the mixer but only on the port, we might get out of sync and fail to negotiate. Going through the mixers for everything needs some more work. Fixes #3971
This commit is contained in:
		
							parent
							
								
									ac95f796bf
								
							
						
					
					
						commit
						8dce124720
					
				
					 3 changed files with 70 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -315,11 +315,25 @@ static int add_port_update(struct node_data *data, struct pw_impl_port *port, ui
 | 
			
		|||
				continue;
 | 
			
		||||
 | 
			
		||||
			for (idx = 0;;) {
 | 
			
		||||
				struct spa_node *qnode;
 | 
			
		||||
				uint32_t qport;
 | 
			
		||||
 | 
			
		||||
				spa_pod_dynamic_builder_init(&b, buf, sizeof(buf), 4096);
 | 
			
		||||
 | 
			
		||||
				res = spa_node_port_enum_params_sync(port->mix,
 | 
			
		||||
						port->direction, SPA_ID_INVALID,
 | 
			
		||||
				switch (id) {
 | 
			
		||||
				case SPA_PARAM_IO:
 | 
			
		||||
					qnode = port->mix;
 | 
			
		||||
					qport = SPA_ID_INVALID;
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					qnode = port->node->node;
 | 
			
		||||
					qport = port->port_id;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				res = spa_node_port_enum_params_sync(qnode,
 | 
			
		||||
						port->direction, qport,
 | 
			
		||||
						id, &idx, NULL, ¶m, &b.b);
 | 
			
		||||
 | 
			
		||||
				if (res == 1) {
 | 
			
		||||
					void *p;
 | 
			
		||||
					p = pw_reallocarray(params, n_params + 1, sizeof(struct spa_pod*));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue