mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04:00 
			
		
		
		
	node: remove node state
Remove the node state. The state of the node is based on the state of the ports, which can be derived directly from calling the port methods. Track this state in the Port instead. Add a mixer module that puts a mixer in from of audio sinks. This allows multiple clients to play on one sink (still has some bugs). do some fixes in the mixer and the scheduler to make this work.
This commit is contained in:
		
							parent
							
								
									28389e05f3
								
							
						
					
					
						commit
						d3682067fa
					
				
					 30 changed files with 618 additions and 509 deletions
				
			
		|  | @ -332,18 +332,16 @@ pull_frames_queue (SpaALSAState *state, | |||
|                    snd_pcm_uframes_t frames) | ||||
| { | ||||
|   snd_pcm_uframes_t total_frames = 0, to_write = frames; | ||||
|   SpaPortIO *io = state->io; | ||||
| 
 | ||||
|   if (spa_list_is_empty (&state->ready)) { | ||||
|     SpaEvent event = SPA_EVENT_INIT (state->type.event_node.NeedInput); | ||||
|     SpaPortIO *io; | ||||
| 
 | ||||
|     if ((io = state->io)) { | ||||
|       io->flags = SPA_PORT_IO_FLAG_RANGE; | ||||
|       io->status = SPA_RESULT_OK; | ||||
|       io->range.offset = state->sample_count * state->frame_size; | ||||
|       io->range.min_size = state->threshold * state->frame_size; | ||||
|       io->range.max_size = frames * state->frame_size; | ||||
|     } | ||||
|     io->flags = SPA_PORT_IO_FLAG_RANGE; | ||||
|     io->status = SPA_RESULT_OK; | ||||
|     io->range.offset = state->sample_count * state->frame_size; | ||||
|     io->range.min_size = state->threshold * state->frame_size; | ||||
|     io->range.max_size = frames * state->frame_size; | ||||
|     state->event_cb (&state->node, &event, state->user_data); | ||||
|   } | ||||
|   while (!spa_list_is_empty (&state->ready) && to_write > 0) { | ||||
|  | @ -375,7 +373,6 @@ pull_frames_queue (SpaALSAState *state, | |||
| 
 | ||||
|       spa_log_trace (state->log, "alsa-util %p: reuse buffer %u", state, b->outbuf->id); | ||||
|       state->event_cb (&state->node, (SpaEvent *)&rb, state->user_data); | ||||
| 
 | ||||
|       state->ready_offset = 0; | ||||
|     } | ||||
|     total_frames += n_frames; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Wim Taymans
						Wim Taymans