[alsa-devel] dsnoop, hwpointer and avail

Henrik Eriksson henrik.eriksson at axis.com
Mon Nov 13 11:12:43 CET 2017


Hello

On Fri, Nov 10, 2017 at 13:29:43 +0100, Henrik Eriksson wrote:
> Is there any documentation/rationale for how pcm_dsnoop works in
> snd_pcm_{dsnoop_}status?  I am particularly wondering about the ordering
> of the snd_pcm_dsnoop_sync_ptr and the snd_pcm_status call on the slave
> pcm.
> 
> I see occasional spikes (>1000 frames) of difference between the slave
> pcm hwpointer after the snd_pcm_status call on it and the pointers in
> the dsnoop pcm, and a correspondingly bad avail count.  I suspect the
> mismatches are due to process scheduling (the slave pcm status is
> delayed because the application process not running and the hardware
> progresses during that delay).  Does this seem plausible?  If so, could
> the code be simplified to reduce the the number of systemcalls needed?
> The status of the slave pcm seems to provide much of the information
> used to sync the pointers.  Or is there some other way to get a tighter
> coupling between the dsnoop status htstamp and avail count?

Or, rather, in snd_pcm_dnsoop_status() would it not make more sense to
use the dsnoop->update_tstamp as tstamp in the returned status, at least
when the state is SNDRV_PCM_STATE_RUNNING?  The returned status->avail
count originates from snd_pcm_dsnoop_sync_ptr() and it seems sensible to
me that the tstamp would match that.

For background, this is on a machine with not mmap'ed status and control
(in pcm_hw.c) and using slowptr in dsnoop.

Regards,
/henrik


More information about the Alsa-devel mailing list