At Wed, 13 Jun 2007 18:23:38 +0200, Joachim Förster wrote:
Hi ALSA devs,
I have a quick question regarding the filling of the usual ring buffer in RAM (used by sound controllers via DMA), just to be really sure:
Is it true, that ALSA always writes (via mmap'ing) _whole_ periods?
The whole buffer is, of course, used. Otherwise you'll get obvious noises :)
But if you're asking about the timinig, then no. How much data is written at which timing isn't strictly defined in mmap mode. The PCM core just checks the available size at each snd_pcm_period_elapsed(), and reports XRUN if needed. That's all.
I took snd-dummy and modified it to use "ack()" method and tried to confirm, if the above is true _without_ memory mapping (classical read/write). It seem's to be true, ALSA is "filling up" the last (not always complete) period - e.g. if the played wav file is not a multiple of periodsize in length. But well, with mmap, I cannot see the copying action (done by ALSA library, right?) ... so, thus my question ;-) .
Right, copy / ack aren't involved with mmap mode...
Takashi