[alsa-devel] linked streams question
tiwai at suse.de
Fri Jul 6 11:20:40 CEST 2007
At Thu, 05 Jul 2007 19:53:36 +1200,
Eliot Blennerhassett wrote:
> 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