[alsa-devel] What does snd_pcm_delay() actually return?

Takashi Iwai tiwai at suse.de
Fri Jun 13 08:59:53 CEST 2008

At Thu, 12 Jun 2008 22:52:25 +0200,
Lennart Poettering wrote:
> You didn't respond to my suggesion to add a second function,

Hm, which function?  I seem to have missed that.

> so that
> we'd have two: one that includes the extra delay after hw_ptr, and the
> other that does not. The former would then be useful for audio/video
> sync, the latter for estimating when an underrun will happen. Would it
> be possible to add this?

Indeed, there are two problems in the background:
- the period irq model
- no latency assumption

The period irq model is what you called "traditional playback model".
No latency assumption in hwptr comes from the PCI-style hardware.

About the latency, my proposal is like below:

- Renew the definition of hwptr -- make it what you imagned, the
  pointer where hardware is reading or has read.

  This won't change anything for PCI drivers, so the impact is

- Add some new API functions,
  * To give the accuracy of the position inquiry (optional)

    This requires some new kernel <-> user-space stuff.

  * To query the known latency

    Ditto, or we may reuse snd_pcm_hw_params_fifo_size()?

  * To query the position being played (optionally)

    This can be simply hwptr + latency.

- Don't change snd_pcm_delay().  Keep as is now.

About the period model -- it's a bit more tough problem.
I once already made a patch to allow user-apps to use a system timer
for more flexible period settings.  But, it was for very old version
of ALSA.  Better to write from the scratch again...


More information about the Alsa-devel mailing list