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