mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	channelmix: try to handle 1 channel as MONO/FC
This commit is contained in:
		
							parent
							
								
									6f16d6ff8e
								
							
						
					
					
						commit
						954c96632c
					
				
					 2 changed files with 10 additions and 5 deletions
				
			
		| 
						 | 
					@ -168,14 +168,19 @@ static int make_matrix(struct channelmix *mix)
 | 
				
			||||||
	float llev = 0.5f;
 | 
						float llev = 0.5f;
 | 
				
			||||||
	float max = 0.0f;
 | 
						float max = 0.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						spa_log_debug(mix->log, "src-mask:%08"PRIx64" dst-mask:%08"PRIx64,
 | 
				
			||||||
 | 
								src_mask, dst_mask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((src_mask & _MASK(MONO)) ==  _MASK(MONO))
 | 
				
			||||||
 | 
							src_mask = _MASK(FC);
 | 
				
			||||||
 | 
						if ((dst_mask & _MASK(MONO)) ==  _MASK(MONO))
 | 
				
			||||||
 | 
							dst_mask = _MASK(FC);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < NUM_CHAN; i++) {
 | 
						for (i = 0; i < NUM_CHAN; i++) {
 | 
				
			||||||
		if (src_mask & dst_mask & (1ULL << (i + 2)))
 | 
							if (src_mask & dst_mask & (1ULL << (i + 2)))
 | 
				
			||||||
			matrix[i][i]= 1.0f;
 | 
								matrix[i][i]= 1.0f;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((dst_mask & _MASK(MONO)) ==  _MASK(MONO))
 | 
					 | 
				
			||||||
		dst_mask = _MASK(FC);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	unassigned = src_mask & ~dst_mask;
 | 
						unassigned = src_mask & ~dst_mask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_log_debug(mix->log, "unassigned %08" PRIx64, unassigned);
 | 
						spa_log_debug(mix->log, "unassigned %08" PRIx64, unassigned);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -211,9 +211,9 @@ static int setup_convert(struct impl *this,
 | 
				
			||||||
	for (i = 0, dst_mask = 0; i < dst_chan; i++)
 | 
						for (i = 0, dst_mask = 0; i < dst_chan; i++)
 | 
				
			||||||
		dst_mask |= 1UL << dst_info->info.raw.position[i];
 | 
							dst_mask |= 1UL << dst_info->info.raw.position[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (src_mask & 1)
 | 
						if (src_mask & 1 || src_chan == 1)
 | 
				
			||||||
		src_mask = default_mask(src_chan);
 | 
							src_mask = default_mask(src_chan);
 | 
				
			||||||
	if (dst_mask & 1)
 | 
						if (dst_mask & 1 || dst_chan == 1)
 | 
				
			||||||
		dst_mask = default_mask(dst_chan);
 | 
							dst_mask = default_mask(dst_chan);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_log_info(this->log, NAME " %p: %s/%d@%d->%s/%d@%d %08"PRIx64":%08"PRIx64, this,
 | 
						spa_log_info(this->log, NAME " %p: %s/%d@%d->%s/%d@%d %08"PRIx64":%08"PRIx64, this,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue