3 Mar
2008
3 Mar
'08
8:42 p.m.
Can someone explain to me this snippet from snd_pcm_update_hw_ptr_post():
if (avail >= runtime->stop_threshold) { if (substream->runtime->status->state == SNDRV_PCM_STATE_DRAINING) snd_pcm_drain_done(substream); else xrun(substream); return -EPIPE; }
During playback, avail = snd_pcm_playback_avail(). Does this mean that avail is number of frames available in the playback DMA buffer for new data?
If so, why is avail >= runtime->stop_threshold considered an underrun condition? Does ALSA try to keep the amount of available data to a minimum?
If so, how can I adjust runtime->stop_threshold? I'd like to see what happens if I make stop_threshold equal to the size of my DMA buffer.
--
Timur Tabi
Linux kernel developer at Freescale