[alsa-devel] Call out after period buffer is filled
Jon Smirl
jonsmirl at gmail.com
Tue May 5 17:31:42 CEST 2009
On Tue, May 5, 2009 at 10:35 AM, Jon Smirl <jonsmirl at gmail.com> wrote:
> Is there some way to get a call out after a period DMA buffer is
> filled so that I can add it to the DMA queue?
The current model in my driver is to queue up a bunch of DMA
descriptors, one per period. When I queue these I don't know if the
DMA buffers have music in them or not. I then start this queue playing
and tell ALSA when each period has finished. After each period plays I
requeue the descriptor. I keep hoping that ALSA can get these filled
before they start playing.
After the last period plays ALSA calls trigger(STOP). At that point I
try to shut down the DMA hardware and get the descriptors back. But
because of the FIFO and asynchronous DMA engine I can't stop DMA fast
enough in the trigger(STOP) routine. The result is that the next
period starts playing. This period has data from earlier in the stream
and it sounds like a burst of noise.
What I need is a call back indicating which buffers have valid data in
them. When I know the buffer is valid I can queue the descriptor. This
will fix the problem at end of stream since there won't be buffers
queued containing invalid data.
--
Jon Smirl
jonsmirl at gmail.com
More information about the Alsa-devel
mailing list