[alsa-devel] linked streams question
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?
Any suggestions on the proper way to handle this?
regards
Eliot
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.
Takashi
participants (2)
-
Eliot Blennerhassett
-
Takashi Iwai