[alsa-devel] linked streams question

Takashi Iwai tiwai at suse.de
Fri Jul 6 11:20:40 CEST 2007

At Thu, 05 Jul 2007 19:53:36 +1200,
Eliot Blennerhassett wrote:
> Greetings,
> I'm adding linked stream support to my driver (asihpi), and having some 
> trouble with the end of playback.
> What happens is that the slave streams never transition to SETUP state at the 
> end of playback.
> (Eg playing 4 channel wav file to 2 linked stereo streams with aplay).
> The master stream reaches snd_pcm_drain_done() which then causes 
> trigger(stop),  resulting in all linked streams being stopped.
> But only the master state is set to SETUP
> However, now the slave streams are stopped,  period_elapsed() is not called 
> for a final time to (I assme) cause them to transition to the SETUP state.
> Eventually I get "playback drain error (DMA or IRQ trouble?)\n"
> My workaround is to set the state of each substream to SETUP in the 
> trigger-stop operator, but no other driver needs to do this so I think it is 
> probably the wrong solution - maybe misses some other cleanup code?  

snd_pcm_drain() has a loop to wait until the all substreams are
drained.  That's why snd_pcm_drain_done() stops only one substream,
not all linked substreams.

But, yes, there seems to be a problem with hardware-linked substreams
that stops the multiple substreams.  This mess comes from the fact
that we handle both soft-linked and hard-linked substreams as if they
are identical.  We'd need a deeper clean up, I'm afraid.


More information about the Alsa-devel mailing list