[pulseaudio-discuss] [PATCH 0/3] Fighting rewinds
David Henningsson
david.henningsson at canonical.com
Thu Dec 9 05:54:55 PST 2010
As some of you have seen on IRC, I spent the some of the last week
fighting rewinds.
An never-ending stream of rewinds seems to be one of the most common
reasons PulseAudio crashes or produces crackling/stuttering output, so
there is a strong incentive to fix it.
However, the problem is quite complex and there does not seem to be one
perfect fix, it's more of an optimisation problem. GStreamer in
particular sends out many small data packages, and PulseAudio does not
handle that very well.
When the sink-input buffer is empty, going from there to a full buffer
is an uphill battle in terms of CPU power, as PulseAudio will try to
rewind (at RT priority!) and mix the new data into it; all with the very
best intent, but the end result of taking CPU power away from the client.
GStreamer has at least two problems:
* It starts/uncorks the stream when the buffer is empty (this might
have been fixed by Wim a day or two ago)
* It sends out very small packages (c:a 1 - 4K).
Here are three patches trying to help out on the PA side.
* The first one is a relatively simple optimisation than can cut the
rewinds in half by allowing both a seek and a post to be merged into one
rewind.
* The second one builds on the first, and adds the possibility for
several data packages to share a rewind by checking if there are more
data packets in queue before doing a rewind.
* The third makes sure that after an underrun, there is a little
headroom before asking for a rewind.
Hopefully this will improve the situation for at least a few users. The
idea is to let you do initial comment and review, then make a package
and ask some Ubuntu users to test it. After that I'll report back and we
can consider inclusion into stable-queue.
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list