mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	audiomixer: support offset and clamp size
This commit is contained in:
		
							parent
							
								
									f6938d8364
								
							
						
					
					
						commit
						71f3c759f4
					
				
					 1 changed files with 12 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -755,6 +755,8 @@ static int impl_node_process(void *object)
 | 
			
		|||
		struct port *inport = GET_IN_PORT(this, i);
 | 
			
		||||
		struct spa_io_buffers *inio = NULL;
 | 
			
		||||
		struct buffer *inb;
 | 
			
		||||
		struct spa_data *bd;
 | 
			
		||||
		uint32_t size, offs;
 | 
			
		||||
 | 
			
		||||
		if (SPA_UNLIKELY(!PORT_VALID(inport) ||
 | 
			
		||||
		    (inio = inport->io) == NULL ||
 | 
			
		||||
| 
						 | 
				
			
			@ -770,12 +772,17 @@ static int impl_node_process(void *object)
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		inb = &inport->buffers[inio->buffer_id];
 | 
			
		||||
		maxsize = SPA_MIN(inb->buffer->datas[0].chunk->size, maxsize);
 | 
			
		||||
		bd = &inb->buffer->datas[0];
 | 
			
		||||
 | 
			
		||||
		spa_log_trace_fp(this->log, "%p: mix input %d %p->%p %d %d %d", this,
 | 
			
		||||
				i, inio, outio, inio->status, inio->buffer_id, maxsize);
 | 
			
		||||
		offs = SPA_MIN(bd->chunk->offset, bd->maxsize);
 | 
			
		||||
		size = SPA_MIN(bd->maxsize - offs, bd->chunk->size);
 | 
			
		||||
		maxsize = SPA_MIN(size, maxsize);
 | 
			
		||||
 | 
			
		||||
		datas[n_buffers] = inb->buffer->datas[0].data;
 | 
			
		||||
		spa_log_trace_fp(this->log, "%p: mix input %d %p->%p %d %d %d:%d", this,
 | 
			
		||||
				i, inio, outio, inio->status, inio->buffer_id,
 | 
			
		||||
				offs, size);
 | 
			
		||||
 | 
			
		||||
		datas[n_buffers] = SPA_PTROFF(bd->data, offs, void);
 | 
			
		||||
		buffers[n_buffers++] = inb;
 | 
			
		||||
		inio->status = SPA_STATUS_NEED_DATA;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -788,8 +795,7 @@ static int impl_node_process(void *object)
 | 
			
		|||
 | 
			
		||||
	if (n_buffers == 1) {
 | 
			
		||||
		*outb->buffer = *buffers[0]->buffer;
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	} else {
 | 
			
		||||
		struct spa_data *d = outb->buf.datas;
 | 
			
		||||
 | 
			
		||||
		*outb->buffer = outb->buf;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue