[pulseaudio-discuss] alsa-sink: snd_pcm_avail() returns a huge value...but not alsa's bug

Wang Xingchao wangxingchao2011 at gmail.com
Mon Aug 22 06:52:25 PDT 2011


Hi all,

i see there's message like "snd_pcm_avail() returned  a value that's
is exceptionally large...", and pulseaudio regard that as ALsa's bug.
Take playback as example, i checked the code in alsa kernel, the code
looks like:

/*
 *  result is: 0 ... (boundary - 1)
 */
static inline snd_pcm_uframes_t snd_pcm_playback_avail(struct
snd_pcm_runtime *runtime)
{
	snd_pcm_sframes_t avail = runtime->status->hw_ptr +
runtime->buffer_size - runtime->control->appl_ptr;
	if (avail < 0)
		avail += runtime->boundary;
	else if ((snd_pcm_uframes_t) avail >= runtime->boundary)
		avail -= runtime->boundary;
	return avail;
}

the boundary variable is initialized as a huge value, hence the logic
becomes, when appl_ptr goes ahead hw_ptr more than buffer_size, there
will hit the issue, the return value becomes huge.

--xingchao


More information about the pulseaudio-discuss mailing list