[alsa-devel] How does ALSA detect underrun in OSS emulation?
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).
More information about the Alsa-devel