[pulseaudio-discuss] PulseAudio/alsa_plugins bugs without Wine
David Henningsson
david.henningsson at canonical.com
Thu Jan 5 02:37:22 PST 2012
On 01/04/2012 05:11 PM, Joerg-Cyril.Hoehle at t-systems.com wrote:
> a) Ubuntu Lucid never enters XRUN state like hw:0 or dmix do, given the same
> parameters. I've been using stop_threshold = alsa_buffer_size.
> The older Ubuntu Intrepid worked better.
> (one PA bug report says sw_params are unsupported except for start_threshold?)
I can answer to this one. In Intrepid we had a bug related to "obsoleted
underruns" caused by the asynchronous nature of PulseAudio. Basically,
the application started the playback first and filled the buffer
immediately after. PulseAudio took the commands in order, first started
playback, noticed that the buffer was empty and sent an underrun message
back. The application, once it received the underrun message later on,
naturally deduced that the written buffer had been played back completely.
So around Lucid, we changed the behaviour to never report an underrun,
which made that application work. But, other applications depended on
the XRUN information, just as you have discovered. So in Oneiric (and
PulseAudio 1.0), the protocol has been extended to include the index
where the underrun occurred, and only signal XRUN back to the
application when the application has not written more data (that will
automatically resolve the underrun).
I think the behaviour in Oneiric is the best so far.
> b) After snd_pcm_pause, avail_update suddenly returns results doubled, i.e.
> as if the buffer size had doubled.
>
> c) After an underrun and a sequence of snd_pcm_recover/drop/reset/prepare,
> avail_update initially returns alsa_buffer_size.
> So far so good, but as soon as I start writing, avail_update grows beyond buffer_size
> and produces values that continue the growth from before the underrun, as if
> no reset/recover ever took place. avail then grows way beyond buffer size.
I also made a fix or two to that handling a while back (the code in
there is a little crazy to get right, with queue indices on top of a
phantom ring buffer on top of queue indices again!), but maybe there is
still some bug left as I haven't specifically tested that in combination
with underruns...
> Now the question is, how can the situation improve?
Well, speaking in Ubuntu terms, I guess now is the right time to start
fixing bugs for 12.04, so thanks for reporting! Now, I wish I could
promise time to start digging deep and fixing the stuff as well :-/
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list