[alsa-devel] [PATCH - IOPLUG DRAIN 0/2]

Takashi Iwai tiwai at suse.de
Fri Mar 23 09:01:35 CET 2018


On Fri, 23 Mar 2018 08:43:10 +0100,
Wischer, Timo (ADITG/ESB) wrote:
> 
> > No, again, in non-blocking mode, the drain callback will get never
> > called.  It's the responsibility of application to sync with poll()
> > instead.
> 
> Sorry but I do not get it anyway.
> 
> The user application which is playing some audio has to do the following to drain in nonblocking mode, right?
> snd_pcm_poll_descriptors(pfds)
> while (snd_pcm_drain() == -EAGAIN) {
> poll(pfds)
> }
> 
> 
> But in nonblocking mode the drain callback of the IO plugin will never be called with your solution.
> Therefore in case of the pulse IO plugin which function should call pa_stream_drain()?
> The user application will not do it directly and poll can also not call it.

OK, now I understand your concern.  Yes it's another missing piece,
snd_pcm_ioplug_hw_ptr_update() needs to check the current state, and
it drops to SETUP state instead of XRUN when it was DRAINING.
Then application can simply do poll() and status update until it goes
out of DRAINING state.

But still it's outside the plugin, drain callback isn't called there.


Takashi


More information about the Alsa-devel mailing list