Environment
- Ubuntu 26.04 under WSL2 / WSLg
libasound2-plugins 1.2.12-2build1
- PulseAudio server available through WSLg
Problem
Immediately after configuring a playback PCM opened through the ALSA pulse plugin, snd_pcm_avail_delay() returns -EIO. This seems to be an issue with pulse_delay() which calls pa_stream_get_latency(). PulseAudio documents that this function returns -PA_ERR_NODATA when timing information is not available yet. The ALSA Pulse plugin compares the result against positive PA_ERR_NODATA; it therefore treats that temporary condition as an unrelated failure and returns -EIO:
Reproducer
#include <alsa/asoundlib.h>
#include <assert.h>
#include <stdio.h>
int main(void)
{
snd_pcm_t *pcm;
snd_pcm_sframes_t avail, delay;
int err;
err = snd_pcm_open(&pcm, "pulse", SND_PCM_STREAM_PLAYBACK, 0);
assert(err == 0);
err = snd_pcm_set_params(
pcm,
SND_PCM_FORMAT_FLOAT_LE,
SND_PCM_ACCESS_RW_INTERLEAVED,
2,
48000,
1,
20000);
assert(err == 0);
err = snd_pcm_avail_delay(pcm, &avail, &delay);
printf("snd_pcm_avail_delay: %s (%d)\n", snd_strerror(err), err);
snd_pcm_close(pcm);
return err < 0;
}
Build and run:
cc main.c -lasound && ./a.out
Actual result
snd_pcm_avail_delay: Input/output error (-5)
Expected result
snd_pcm_avail_delay() should wait until PulseAudio timing information is available, then return the available-frame and delay values.
Environment
libasound2-plugins1.2.12-2build1Problem
Immediately after configuring a playback PCM opened through the ALSA
pulseplugin,snd_pcm_avail_delay()returns-EIO. This seems to be an issue withpulse_delay()which callspa_stream_get_latency(). PulseAudio documents that this function returns-PA_ERR_NODATAwhen timing information is not available yet. The ALSA Pulse plugin compares the result against positivePA_ERR_NODATA; it therefore treats that temporary condition as an unrelated failure and returns-EIO:alsa-plugins/pulse/pcm_pulse.c
Lines 397 to 404 in ffc8b90
pa_stream_get_latency()documentation:https://github.com/pulseaudio/pulseaudio/blob/77d25a1e613095bdf87a1d13b65e7c330565077a/src/pulse/stream.h#L725-L726
shairport-syncversion:audio_pa.c: pa_delay, return "No latency data yet" on PA_ERR_NODATA mikebrady/shairport-sync#2119
Reproducer
Build and run:
cc main.c -lasound && ./a.outActual result
Expected result
snd_pcm_avail_delay()should wait until PulseAudio timing information is available, then return the available-frame and delay values.