[alsa-devel] DMA buffer gets played only once

Markus Franke markus.franke at s2002.tu-chemnitz.de
Thu Sep 6 08:27:03 CEST 2007


I just found out that the problem of multiple calls of 
TRIGGER_START/TRIGGER_STOP might be caused by using ossplay (oss 
emulation layer) for testing. If I use aplay, TRIGGER_START gets called 
once but then Alsa goes in a loop continuously calling pcm_pointer().
Return values of pcm_pointer() look like the following:

---snip---
pcm_pointer returns 0
pcm_pointer returns 1024
pcm_pointer returns 2048
pcm_pointer returns 3072
pcm_pointer returns 4096
pcm_pointer returns 5120
pcm_pointer returns 6144
pcm_pointer returns 7168
pcm_pointer returns 0
pcm_pointer returns 1024
pcm_pointer returns 2048
pcm_pointer returns 3072
pcm_pointer returns 4096
pcm_pointer returns 5120
pcm_pointer returns 6144
pcm_pointer returns 7168
---snap---

Finally I get a message saying:

---snip---
ALSA sound/core/pcm_native.c:1525: playback drain error (DMA or IRQ 
trouble?)
---snap---

Hope this helps.

Regards,
Markus Franke

Markus Franke wrote:
> Hi,
> 
> Trent Piepho wrote:
>> You need to make sure the buffer size is an integer multiple of the period
>> size if you wrap like this.
> 
> Yeah I have to take care of this but right now my buffersize is 32768 
> bytes and the period size is 4096 bytes which should work I think.
> 
>> I found that ALSA would call TRIGGER_STOP if it detected an overrun.
> 
> Yeah that's right. I guess this is my case because xrun() is getting 
> called somewhere. So how can I fix this underrun problem?
> 
>> Check the value returned for every call of your pointer callback.  I found out
>> that ALSA was calling the pointer callback before the first IRQ, which was
>> something I hadn't planned on and the values confused ALSA.
> 
> That's not my case. pcm_pointer gets called after the first DMA 
> transaction is finished. (DMA transfer finished callback gets called 
> before pcm_pointer) Also the values which are returned by pcm_pointer 
> look quite reasonable. (see also my very first posting in this thread, 
> look for the printk's "pcm_pointer returns <value>")
> 
> 
> Thanks for your effort,
> 
> Markus Franke
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 



More information about the Alsa-devel mailing list