[pulseaudio-discuss] [RFC] When maxlength and adjust_latency are set, do not allow higher latencies
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Mon Jun 24 08:55:20 PDT 2013
On Wed, 2013-06-12 at 16:28 +0200, David Henningsson wrote:
> Assume that we *really really* want no more than 10 ms of latency, and
> there are occasional underruns. Now the latency will increase, first to 1 ms,
> then 2 ms, 4 ms, 8 ms, 16 ms. At that point, when the sink's latency
> is 16 ms and maxlength is 10 ms, we get a constant stream of underruns,
> because we fill 10 ms of data up and then go to sleep for 16 ms (minus watermark).
>
> By not allowing the latency to grow beyond 7.5 ms in this case, we
> only get occasional underruns instead of constant underruns.
>
> This is not a finished patch:
> 1) I'm not sure (maxlength - minreq) is the correct formula, but it seems to
> work reasonably here at least.
It sounds reasonable to at least have both maxlength and minreq in the
formula. I guess the question is whether the margin that is substracted
from maxlength should sometimes be larger than minreq. I have no idea
about that.
> 2) The max_sink_length calculation should probably be somewhere in sink.c.
By max_sink_length I assume you mean max_sink_latency? I don't see why
calculating that value should be done in sink.c, since it's a property
of the sink input.
> 3) Setting max_sink_length should probably be done in a more thread safe fashion.
Yes. I think there should be pa_sink_input_set_max_sink_latency(), which
would send a message to the IO thread (if the sink input is linked).
> 4) I'm not sure whether we should add something to the other modes
> (traditional, early requests). After all, it's only in adjust_latency
> mode that we describe as "adjusting the overall latency of the pipeline".
I don't think the other modes need any changes.
--
Tanu
More information about the pulseaudio-discuss
mailing list