mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	audioconvert: copy follower port flags
Copy the follower port flags to the adapter ports. This is mostly interesting to mark the ports of a device as physical and terminal.
This commit is contained in:
		
							parent
							
								
									ab94a71e3c
								
							
						
					
					
						commit
						5c180a57a5
					
				
					 1 changed files with 16 additions and 3 deletions
				
			
		| 
						 | 
					@ -48,14 +48,14 @@ struct impl {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct spa_node *follower;
 | 
						struct spa_node *follower;
 | 
				
			||||||
	struct spa_hook follower_listener;
 | 
						struct spa_hook follower_listener;
 | 
				
			||||||
	uint32_t follower_flags;
 | 
						uint64_t follower_flags;
 | 
				
			||||||
	struct spa_audio_info follower_current_format;
 | 
						struct spa_audio_info follower_current_format;
 | 
				
			||||||
	struct spa_audio_info default_format;
 | 
						struct spa_audio_info default_format;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct spa_handle *hnd_convert;
 | 
						struct spa_handle *hnd_convert;
 | 
				
			||||||
	struct spa_node *convert;
 | 
						struct spa_node *convert;
 | 
				
			||||||
	struct spa_hook convert_listener;
 | 
						struct spa_hook convert_listener;
 | 
				
			||||||
	uint32_t convert_flags;
 | 
						uint64_t convert_flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uint32_t n_buffers;
 | 
						uint32_t n_buffers;
 | 
				
			||||||
	struct spa_buffer **buffers;
 | 
						struct spa_buffer **buffers;
 | 
				
			||||||
| 
						 | 
					@ -78,6 +78,7 @@ struct impl {
 | 
				
			||||||
	struct spa_param_info params[N_NODE_PARAMS];
 | 
						struct spa_param_info params[N_NODE_PARAMS];
 | 
				
			||||||
	uint32_t convert_params_flags[N_NODE_PARAMS];
 | 
						uint32_t convert_params_flags[N_NODE_PARAMS];
 | 
				
			||||||
	uint32_t follower_params_flags[N_NODE_PARAMS];
 | 
						uint32_t follower_params_flags[N_NODE_PARAMS];
 | 
				
			||||||
 | 
						uint64_t follower_port_flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct spa_hook_list hooks;
 | 
						struct spa_hook_list hooks;
 | 
				
			||||||
	struct spa_callbacks callbacks;
 | 
						struct spa_callbacks callbacks;
 | 
				
			||||||
| 
						 | 
					@ -352,7 +353,7 @@ static int negotiate_buffers(struct impl *this)
 | 
				
			||||||
	uint32_t i, size, buffers, blocks, align, flags, stride = 0;
 | 
						uint32_t i, size, buffers, blocks, align, flags, stride = 0;
 | 
				
			||||||
	uint32_t *aligns;
 | 
						uint32_t *aligns;
 | 
				
			||||||
	struct spa_data *datas;
 | 
						struct spa_data *datas;
 | 
				
			||||||
	uint32_t follower_flags, conv_flags;
 | 
						uint64_t follower_flags, conv_flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_log_debug(this->log, "%p: n_buffers:%d", this, this->n_buffers);
 | 
						spa_log_debug(this->log, "%p: n_buffers:%d", this, this->n_buffers);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -932,12 +933,19 @@ static void convert_port_info(void *data,
 | 
				
			||||||
		const struct spa_port_info *info)
 | 
							const struct spa_port_info *info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct impl *this = data;
 | 
						struct impl *this = data;
 | 
				
			||||||
 | 
						struct spa_port_info pi;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (direction != this->direction) {
 | 
						if (direction != this->direction) {
 | 
				
			||||||
 | 
							/* skip the converter output port into the follower */
 | 
				
			||||||
		if (port_id == 0)
 | 
							if (port_id == 0)
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 | 
								/* the monitor ports are exposed */
 | 
				
			||||||
			port_id--;
 | 
								port_id--;
 | 
				
			||||||
 | 
						} else if (info) {
 | 
				
			||||||
 | 
							pi = *info;
 | 
				
			||||||
 | 
							pi.flags = this->follower_port_flags;
 | 
				
			||||||
 | 
							info = π
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_log_debug(this->log, "%p: port info %d:%d", this,
 | 
						spa_log_debug(this->log, "%p: port info %d:%d", this,
 | 
				
			||||||
| 
						 | 
					@ -1086,6 +1094,11 @@ static void follower_port_info(void *data,
 | 
				
			||||||
	      return;
 | 
						      return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this->follower_port_flags = info->flags &
 | 
				
			||||||
 | 
							(SPA_PORT_FLAG_LIVE |
 | 
				
			||||||
 | 
							 SPA_PORT_FLAG_PHYSICAL |
 | 
				
			||||||
 | 
							 SPA_PORT_FLAG_TERMINAL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_log_debug(this->log, "%p: follower port info %s %p %08"PRIx64, this,
 | 
						spa_log_debug(this->log, "%p: follower port info %s %p %08"PRIx64, this,
 | 
				
			||||||
			this->direction == SPA_DIRECTION_INPUT ?
 | 
								this->direction == SPA_DIRECTION_INPUT ?
 | 
				
			||||||
				"Input" : "Output", info, info->change_mask);
 | 
									"Input" : "Output", info, info->change_mask);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue