mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pulse-server: convert channel_map channels
channel_map contains pulseaudio channel names, convert them to pipewire channel ids and then into pipewire channel names for the null sink.
This commit is contained in:
		
							parent
							
								
									1e89e7559b
								
							
						
					
					
						commit
						157d6de607
					
				
					 2 changed files with 24 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -376,6 +376,19 @@ static inline void channel_map_to_positions(const struct channel_map *map, uint3
 | 
			
		|||
		pos[i] = map->map[i];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void channel_map_parse(const char *str, struct channel_map *map)
 | 
			
		||||
{
 | 
			
		||||
	const char *p = str;
 | 
			
		||||
	size_t len;
 | 
			
		||||
 | 
			
		||||
	while (*p && map->channels < SPA_AUDIO_MAX_CHANNELS) {
 | 
			
		||||
		if ((len = strcspn(p, ",")) == 0)
 | 
			
		||||
			break;
 | 
			
		||||
		map->map[map->channels++] = channel_paname2id(p, len);
 | 
			
		||||
		p += len + strspn(p+len, ",");
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline bool channel_map_valid(const struct channel_map *map)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t i;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,7 +180,17 @@ static int load_module(struct client *client, const char *name, const char *argu
 | 
			
		|||
			pw_properties_set(props, "rate", NULL);
 | 
			
		||||
		}
 | 
			
		||||
		if ((str = pw_properties_get(props, "channel_map")) != NULL) {
 | 
			
		||||
			pw_properties_set(props, "audio.position", str);
 | 
			
		||||
			struct channel_map map = CHANNEL_MAP_INIT;
 | 
			
		||||
			uint32_t i;
 | 
			
		||||
			char *s, *p;
 | 
			
		||||
 | 
			
		||||
			channel_map_parse(str, &map);
 | 
			
		||||
			p = s = alloca(map.channels * 6);
 | 
			
		||||
 | 
			
		||||
			for (i = 0; i < map.channels; i++)
 | 
			
		||||
				p += snprintf(p, 6, "%s%s", i == 0 ? "" : ",",
 | 
			
		||||
						channel_id2name(map.map[i]));
 | 
			
		||||
			pw_properties_set(props, "audio.position", s);
 | 
			
		||||
			pw_properties_set(props, "channel_map", NULL);
 | 
			
		||||
		}
 | 
			
		||||
		if ((str = pw_properties_get(props, "device.description")) != NULL) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue