[alsa-devel] How does ALSA detect underrun in OSS emulation?

Takashi Iwai tiwai at suse.de
Mon Feb 25 16:45:50 CET 2008


At Mon, 25 Feb 2008 09:38:38 -0600,
Timur Tabi wrote:
> 
> Takashi Iwai wrote:
> 
> > It's just as same as on ALSA native API, checks the validity of the
> > current position reported by pointer callback in
> > snd_pcm_period_elapsed().
> 
> Are you talking about this code in snd_pcm_update_hw_ptr_pos?
> 
> 	pos = substream->ops->pointer(substream);
> 	if (pos == SNDRV_PCM_POS_XRUN)
> 		return pos; /* XRUN */

This is one part that ALSA detects XRUN.

> 
> What if my 'pointer' function never returns SNDRV_PCM_POS_XRUN?  How else can I 
> get an underrun detected?

Another part is in snd_pcm_update_hw_ptr_post().  It checks whether
the updated empty space (snd_pcm_playback_avail()) is bigger than
stop_threshold (usually equal with the buffer size).


Takashi


More information about the Alsa-devel mailing list