25 Feb
2008
25 Feb
'08
4:45 p.m.
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