mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	stream: improve async handling
We can remove most of the special async handling in adapter, filter and stream because this is now handled in the core. Add a node.data-loop property to assign the node to a named data-loop. Assign the non-rt stream and filter to the main loop. This means that the node fd will be added to the main-loop and will be woken up directly without having to wake up the RT thread and invoke the process callback in the main-loop first. Because non-RT implies async, we can do all of this like we do our rt processing because the output will only be used in the next cycle.
This commit is contained in:
		
							parent
							
								
									34be6c76a6
								
							
						
					
					
						commit
						e1e0a886d5
					
				
					 8 changed files with 57 additions and 99 deletions
				
			
		| 
						 | 
				
			
			@ -1664,11 +1664,7 @@ static int impl_node_process(void *object)
 | 
			
		|||
				break;
 | 
			
		||||
 | 
			
		||||
			done = (status & (SPA_STATUS_HAVE_DATA | SPA_STATUS_DRAINED));
 | 
			
		||||
 | 
			
		||||
			/* when not async, we can return the data when we are done.
 | 
			
		||||
			 * In async mode we might first need to wake up the follower
 | 
			
		||||
			 * to asynchronously provide more data for the next round. */
 | 
			
		||||
			if (!this->async && done)
 | 
			
		||||
			if (done)
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			if (status & SPA_STATUS_NEED_DATA) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1684,10 +1680,6 @@ static int impl_node_process(void *object)
 | 
			
		|||
				if ((fstatus & (SPA_STATUS_HAVE_DATA | SPA_STATUS_DRAINED)) == 0)
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			/* converter produced something or is drained and we
 | 
			
		||||
			 * scheduled the follower above, we can stop now*/
 | 
			
		||||
			if (done)
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		if (!done)
 | 
			
		||||
			spa_node_call_xrun(&this->callbacks, 0, 0, NULL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue