[alsa-devel] DMA buffer gets played only once
Takashi Iwai
tiwai at suse.de
Wed Sep 5 14:55:47 CEST 2007
At Wed, 05 Sep 2007 14:47:22 +0530,
Markus Franke wrote:
>
> Clemens Ladisch wrote:
> > Markus Franke wrote:
> >> It seems like that after the 8th period is transferred
> >> pcm_trigger(TRIGGER_STOP) isn't getting called.
> >
> > Indeed. The stop trigger is called when the entire stream is
> > to be stopped.
>
> Well, start and stop trigger get always called mutually. In pseudo code
> it would look like this:
>
> ---snip---
> TRIGGER_START
>
> transfer one period via DMA
>
> TRIGGER_STOP
>
> update DMAC settings in DMA transfer finished callback and call
> snd_pcm_period_elapsed()
>
> TRIGGER_START
>
> transfer one period via DMA
>
> TRIGGER_STOP
>
> update DMAC settings in DMA transfer finished callback and call
> snd_pcm_period_elapsed()
>
> ....and so on.
> ---snap---
>
> At least this is the behaviour I experienced.
It's your mis-interpretation of START/STOP concenpt in the ALSA
framework. The trigger START and STOP mean the start/stop of the
whole streaming operation. It's basically called from the outside,
i.e. the application starts/stops the stream. If you need to keep
some DMA start/stop operations internally, do it in the driver
lowlevel side internally.
Takashi
More information about the Alsa-devel
mailing list