mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	pcm: ioplug: Provide avail helper function for plugins
This function can be called without calling snd_pcm_avail_update(). The call to snd_pcm_avail_update() can take some time. Therefore some developers would not like to call it from a real-time context (e.g. from JACK client context). Signed-off-by: Timo Wischer <twischer@de.adit-jv.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									9bb985c382
								
							
						
					
					
						commit
						2972f2f966
					
				
					 2 changed files with 21 additions and 2 deletions
				
			
		| 
						 | 
					@ -235,6 +235,9 @@ int snd_pcm_ioplug_set_param_list(snd_pcm_ioplug_t *io, int type, unsigned int n
 | 
				
			||||||
int snd_pcm_ioplug_set_state(snd_pcm_ioplug_t *ioplug, snd_pcm_state_t state);
 | 
					int snd_pcm_ioplug_set_state(snd_pcm_ioplug_t *ioplug, snd_pcm_state_t state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* calucalte the available frames */
 | 
					/* calucalte the available frames */
 | 
				
			||||||
 | 
					snd_pcm_uframes_t snd_pcm_ioplug_avail(const snd_pcm_ioplug_t * const ioplug,
 | 
				
			||||||
 | 
									       const snd_pcm_uframes_t hw_ptr,
 | 
				
			||||||
 | 
									       const snd_pcm_uframes_t appl_ptr);
 | 
				
			||||||
snd_pcm_uframes_t snd_pcm_ioplug_hw_avail(const snd_pcm_ioplug_t * const ioplug,
 | 
					snd_pcm_uframes_t snd_pcm_ioplug_hw_avail(const snd_pcm_ioplug_t * const ioplug,
 | 
				
			||||||
					  const snd_pcm_uframes_t hw_ptr,
 | 
										  const snd_pcm_uframes_t hw_ptr,
 | 
				
			||||||
					  const snd_pcm_uframes_t appl_ptr);
 | 
										  const snd_pcm_uframes_t appl_ptr);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1215,6 +1215,21 @@ int snd_pcm_ioplug_set_state(snd_pcm_ioplug_t *ioplug, snd_pcm_state_t state)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \brief Get the available frames. This function can be used to calculate the
 | 
				
			||||||
 | 
					 * the available frames before calling #snd_pcm_avail_update()
 | 
				
			||||||
 | 
					 * \param ioplug the ioplug handle
 | 
				
			||||||
 | 
					 * \param hw_ptr hardware pointer in frames
 | 
				
			||||||
 | 
					 * \param appl_ptr application pointer in frames
 | 
				
			||||||
 | 
					 * \return available frames for the application
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					snd_pcm_uframes_t snd_pcm_ioplug_avail(const snd_pcm_ioplug_t * const ioplug,
 | 
				
			||||||
 | 
									       const snd_pcm_uframes_t hw_ptr,
 | 
				
			||||||
 | 
									       const snd_pcm_uframes_t appl_ptr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return __snd_pcm_avail(ioplug->pcm, hw_ptr, appl_ptr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * \brief Get the available frames. This function can be used to calculate the
 | 
					 * \brief Get the available frames. This function can be used to calculate the
 | 
				
			||||||
 * the available frames before calling #snd_pcm_avail_update()
 | 
					 * the available frames before calling #snd_pcm_avail_update()
 | 
				
			||||||
| 
						 | 
					@ -1230,8 +1245,9 @@ snd_pcm_uframes_t snd_pcm_ioplug_hw_avail(const snd_pcm_ioplug_t * const ioplug,
 | 
				
			||||||
	/* available data/space which can be transferred by the user
 | 
						/* available data/space which can be transferred by the user
 | 
				
			||||||
	 * application
 | 
						 * application
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	const snd_pcm_uframes_t user_avail = __snd_pcm_avail(ioplug->pcm,
 | 
						const snd_pcm_uframes_t user_avail = snd_pcm_ioplug_avail(ioplug,
 | 
				
			||||||
							     hw_ptr, appl_ptr);
 | 
													  hw_ptr,
 | 
				
			||||||
 | 
													  appl_ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (user_avail > ioplug->pcm->buffer_size) {
 | 
						if (user_avail > ioplug->pcm->buffer_size) {
 | 
				
			||||||
		/* there was an Xrun */
 | 
							/* there was an Xrun */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue