[alsa-devel] Too many snd_pcm_mmap_readi calls

Clemens Ladisch clemens at ladisch.de
Wed May 7 11:01:56 CEST 2014

Jan Homann wrote:
> while(1) {
>     sleep(1);
>     snd_pcm_wait( pcm_handle, REC_BUFFER_ELEMENT_SIZE_MS + 10);
>     snd_pcm_mmap_begin(pcm_handle, &my_areas, &offset, &frames);
>     snd_pcm_avail_update ( pcm_handle );
>     snd_pcm_mmap_readi( pcm_handle, network_data.data_UC, ALSA_READ_FRAMES);
>     snd_pcm_mmap_commit(pcm_handle, offset, frames);
> }

The sleep will result in an overrun, which will throw off the timing
of all following calls.

You are not checking the return value of any of these functions.

Why are you calling snd_pcm_avail_update?  And why are you doing this
_after_ calling mmap_begin?

You are ignoring the number of frames returned by mmap_begin.  This
value could be smaller or larger than ALSA_READ_FRAMES.

Why are you using mmap in the first place, when you don't even try to
access the buffer directly?


More information about the Alsa-devel mailing list