[pulseaudio-discuss] [PATCH] Don't use tsched on unsafe ALSA plugins
Alexander E. Patrakov
patrakov at gmail.com
Sun Apr 20 12:26:32 PDT 2014
20.04.2014 20:44, David Henningsson wrote:
> In addition, there is a snd_pcm_rewindable function, but we don't use
> it, and I don't know how well the different ALSA pcm types work with it.
> But it seems to me like the best course of action could be to make sure
> it reports the correct value for all ALSA pcm types, and then for
> PulseAudio to start using it?
The idea to use this function would not work even on a hypothetical 100%
non-buggy version of ALSA. So we need a different function. And here is why.
PulseAudio needs to know whether to enable time-based scheduling right
after opening the PCM and setting hardware parameters. However, at that
point, even for a true hardware device, snd_pcm_rewindable() would
rightfully return 0. In fact, it does so today. The reason is that at
this moment the hardware pointer and the application pointer are the
same and point just before the first sample in the hardware buffer. In
other words, the card is just at the underrun boundary and no safe
rewind is possible.
Thus, it is not possible to tell the hardware device (that can use
rewinds) from a properly wrapped software encoder (that can't rewind and
doesn't pretend to be able to rewind), because for both cases
snd_pcm_rewindable() would return 0 at the moment PulseAudio needs to
make a decision.
Thus, I take back my prior statement that I will try fixing
snd_pcm_rewindable, until further discussion. A task that has higher
priority is to develop a suitable API that would allow PulseAudio to
make a decision, and also to decide what to do on old ALSA versions.
In fact, I think that there are two bits of theoretical interest here,
of which the second one is the only one interesting to PulseAudio.
* Whether the device supports non-zero-sized rewinds at all, in the
sense that rewinding and rewriting different data yields the same sound
as if there were no rewinds.
* Whether the device supports full rewinds back to the hardware
pointer, in the same sense.
--
Alexander E. Patrakov
More information about the pulseaudio-discuss
mailing list