[LAU] Dual Delta Setup

Fons Adriaensen fons at linuxaudio.org
Mon Dec 31 09:24:47 UTC 2012

On Sun, Dec 30, 2012 at 06:39:57PM -0800, Devin Anderson wrote:
> 1.) Return the master device's poll descriptors (the current implementation).
> We know this doesn't work.
> 2.) Return the poll descriptors of all of the devices (the old
> implementation, IIUC).

Why was this changed ?
> This would lead to the same issue, and possibly make it worse if the
> slave devices are sometimes ready before the master device.

That depends. In that case snd_pcm_poll_descriptors_revents()
can be expected to combine the events in the correct way, e.g.
only return a POLLOUT if all playback devices are ready. I guess
this is how things worked before the change.

Since this should happen within at most a few samples of the first
device being ready, things would work. Even if the device periods
are not exactly synced the only consequence would be that the
available processing time per period would be a few samples shorter.

AFAIK, Jack's ALSA backend uses snd_pcm_poll_descriptors_revents(),
as does zita-alsa-pcmi. The two wait() functions are very similar
but differ in some details, so it could be a good idea to test
zita-alsa-pcmi with a multi device.

You could use the alsa_loopback app that comes with the library.
Just add some debug options in alsa_loopback.cc, line 55:

  D = new Alsa_pcmi (playdev, captdev, 0, fsamp, frsize, nfrags,
                     Alsa_pcmi::DEBUG_STAT | Alsa_pcmi::DEBUG_WAIT);

to see what's happening.



A world of exhaustive, reliable metadata would be an utopia.
It's also a pipe-dream, founded on self-delusion, nerd hubris
and hysterically inflated market opportunities. (Cory Doctorow)

More information about the Linux-audio-user mailing list