[pulseaudio-discuss] Best Case Latency
Patrick Shirkey
pshirkey at boosthardware.com
Tue Sep 24 05:33:33 PDT 2013
On Mon, September 23, 2013 6:11 pm, Tanu Kaskinen wrote:
> On Sun, 2013-09-22 at 20:03 +1000, Patrick Shirkey wrote:
>> On Sun, September 22, 2013 4:37 pm, Tanu Kaskinen wrote:
>> > If you want to get the minimum latency of this path:
>> >
>> > jack_delay -> pulseaudio -> application -> pulseaudio ->
>> jack_delay
>> >
>> > then you should use an application that reports underruns and lets you
>> > control the latency that the application requests from pulseaudio.
>> Then
>> > you can tune the application latency to find the point where you start
>> > to get underruns. You should also know the maximum internal buffer
>> size
>> > of the application. You probably need to write that application
>> > yourself.
>> >
>>
>> I am using ecasound which reports underruns and allows me to set the
>> internal buffer. I have it set to 64 frames/period for this test.
>>
>> It does report occasional underruns but over a 6 hour period I had about
>> 20. Based on that info it leads me to PA sink as the bottle neck. Do you
>> have any suggestions about how I can rule that out?
>
> The audio is accumulating in some buffer, and the JACK sink in
> PulseAudio doesn't have any buffer, so it's not the sink. It could be
> some other buffer in PulseAudio, or it could be a buffer in ecasound.
>
> Saying that ecasound is configured with 64 frames/period isn't terribly
> informative, because I don't know how ecasound handles the transfer from
> the input to the output. Does it push the data immediately to the output
> when it gets something from the input, or are both directions callback
> based? If the former, then the data can accumulate in the stream buffer
> in PA, and if the latter, then there has to be an intermediate buffer
> between the input and the output in ecasound, and the data can
> accumulate there.
>
I've asked for some more details on the ecasound list.
If the PA stream buffer is kicking in, Is there any way I can verify if it
is happening? is there anything I can do to minimise that affect?
>> > pa_stream_get_latency() gives you an estimate of the latency between
>> the
>> > hardware and your application. pa_stream_get_timing_info() gives some
>> > more details about how that latency is split between different parts
>> in
>> > pulseaudio.
>> >
>>
>> Can you or anyone else recommend an example app that I can use as a
>> reference for this code?
>
> No. And anyway, if you want to really measure the latency (detect when a
> signal pulse arrives at a measurement point), these functions are
> useless (except for checking that is PulseAudio reporting the latency
> correctly or not, which would actually be quite interesting
> information).
>
Usually the more information available the better, right?
>> I am thinking of building an app that will let me gather latency data
>> from
>> both PA and JACK. I would like it to measure the timing of a signal
>> pulse
>> as it is transferred between each node in the graph. It would
>> communicate
>> with both JACK and PA at the same time. Do you see any insurmountable
>> blockers to achieving that goal from a technical perspective in regards
>> to
>> PA?
>
> So you would generate a pulse in a jack client, and detect it in a PA
> client, and then detect it again in a jack client? No, I don't see any
> obstacles to doing that.
>
I'm looking into it.
--
Patrick Shirkey
Boost Hardware Ltd
More information about the pulseaudio-discuss
mailing list