[alsa-devel] Avoiding buffer underruns in the hardware interrupt handler
Laurent Pinchart
laurent.pinchart at skynet.be
Wed May 13 23:24:25 CEST 2009
Hi everybody.
Disclaimer: I'm new with ALSA development and I'm trying to digest the large
amount of information I'm overflowed with, so please bear with possibly stupid
help requests.
I'm writing an ALSA driver for a playback device. Unlike most sound cards,
this device uses private memory for its audio buffer. I thus need to manually
copy data from the ALSA buffer to the device buffer in the driver.
The device audio buffer is quite small, and for this reason I'd rather not use
the copy/silence callbacks, but copy data from the ALSA buffer to the device
in interrupt.
The device might generate interrupts a bit faster than what would be expected
from sampling rate, so I need to check in the interrupt handler how much data
the ALSA buffer holds. To do so I need to maintain a "hardware pointer" in the
driver and to access the "user pointer" on the other side of the buffer.
I haven't found a clear API to access that second pointer. What is the
best/preferred way to find out how much data the ALSA buffer holds ? I suppose
I will need to perform some locking when accessing the "user pointer", I will
also appreciate advices regarding which mutex/spinlock I should use for that
purpose.
Best regards,
Laurent Pinchart
More information about the Alsa-devel
mailing list