Hey, I've been having a lot of trouble with ALSA and processing input
in a full duplex loop, and I was wondering if anyone here had any
insight. I'm using the ALSA poll file descriptor method with the mmap
routines. Typically, my processing loop is blowing past the poll
statement with input requests (POLLIN), causing the CPU usage to go
off the charts as it's basically looping as fast as it can go.
Now, I'm handling the inputs in a way that might not be correct.
Often, ALSA is saying that the available frames is 1.5 times my buffer
size (e.g., I set a 64 sample buffer and ALSA offers me 96 samples).
I only get (begin/commit) input when the buffer size matches or
exceeds the buffer length I send out to the card (the set buffer
size), and if it exceeds that, I only pick up (commit) one buffer's
length of frames. Is this wrong? If there is more input waiting,
does ALSA immediately go and POLLIN again, or should I expect it to
not bug me again until I've processed a POLLOUT event (the in and out
are linked)? I'm not really sure how to handle this..
Linux-audio-dev mailing list