[alsa-devel] [PATCH] ALSA: pcm_lib: avoid timing jitter in snd_pcm_read/write()
Jaroslav Kysela
perex at perex.cz
Mon Jun 28 09:47:10 CEST 2010
On Sat, 26 Jun 2010, David Dillow wrote:
> When using poll() to wait for the next period -- or avail_min samples --
> one gets a consistent delay for each system call that is usually just a
> little short of the selected period time. However, When using
> snd_pcm_read/write(), one gets a jittery delay that alternates between
> less than a millisecond and approximately two period times. This is
> caused by snd_pcm_lib_{read,write}1() transferring any available samples
> to the user's buffer and adjusting the application pointer prior to
> sleeping to the end of the current period. When the next period
> interrupt occurs, there is then less than avail_min samples remaining to
> be transferred in the period, so we end up sleeping until a second
> period occurs.
>
> This is solved by using runtime->twake as the number of samples needed
> for a wakeup in addition to selecting the proper wait queue to wake in
> snd_pcm_update_state(). This requires twake to be non-zero when used
> by snd_pcm_lib_{read,write}1() even if avail_min is zero.
>
> Signed-off-by: Dave Dillow <dave at thedillows.org>
Thanks. It looks like another way to get things right. I applied your
patch to my tree.
Jaroslav
-----
Jaroslav Kysela <perex at perex.cz>
Linux Kernel Sound Maintainer
ALSA Project, Red Hat, Inc.
More information about the Alsa-devel
mailing list