[alsa-devel] standard read/write vs event waiting routines (poll) in ALSA

Jaroslav Kysela perex at perex.cz
Wed Jul 31 19:03:30 CEST 2019


Dne 31. 07. 19 v 18:05 Diego Buffa napsal(a):
> Hi all,
> I am trying to learn more about ALSA, I always used example found in the
> howtos but now I would go further.
> 
> I went though ALSA documentation (
> https://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html) and in the
> specific the transfer methods.
> Basically I don't understand the advantages of using poll instead of
> traditional blocking read/write.
> 
> Generally I know that using poll I can multiplex I/O on several files, but
> in ALSA I cannot create the poll descriptor array as I want, as I must use
> snd_pcm_poll_descriptors() which requires that the poll descriptor array
> should have the size returned by snd_pcm_poll_descriptors_count().
> 
> Am I supposed to realloc the poll array descriptor once I set it up with
> ALSA, and add my own files? Should I then always check poll array
> descriptor with snd_pcm_poll_descriptors_revents() before checking my own
> files? And in this case it is safe to call
> snd_pcm_poll_descriptors_revents() with a  poll array descriptor bigger
> than the size returned by snd_pcm_poll_descriptors_count()?
> 
> Many thanks in advance.

All ALSA poll functions works only with the ALSA file descriptors. Basically,
allocate your pollfd array as big as you like and get the file descriptors
from ALSA to this array (using the returned count) and check those descriptors
through ALSA (revents function). Look to alsa-utils/alsaloop/pcmjob.c for an
example.

						Jaroslav

-- 
Jaroslav Kysela <perex at perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.


More information about the Alsa-devel mailing list