[pulseaudio-discuss] bluetooth latencies

Georg Chini georg at chini.tk
Tue Feb 7 14:51:57 UTC 2017


On 07.02.2017 15:28, Tanu Kaskinen wrote:
> On Thu, 2017-02-02 at 11:29 +0100, Georg Chini wrote:
>> On 31.01.2017 14:51, Tanu Kaskinen wrote:
>>> On Mon, 2017-01-30 at 17:35 +0100, Georg Chini wrote:
>>>> Hello,
>>>>
>>>> in module-bluez5-device.c and module-bluez4-device.c, latencies for
>>>> bluetooth are defined as follows:
>>>>
>>>> #define FIXED_LATENCY_PLAYBACK_A2DP (25 * PA_USEC_PER_MSEC)
>>>> #define FIXED_LATENCY_PLAYBACK_SCO (125 * PA_USEC_PER_MSEC)
>>>> #define FIXED_LATENCY_RECORD_A2DP   (25 * PA_USEC_PER_MSEC)
>>>> #define FIXED_LATENCY_RECORD_SCO    (25 * PA_USEC_PER_MSEC)
>>>>
>>>> Is the fixed latency for SCO playback a mistake? Both headsets I own
>>>> report around 28 ms actual latency for the SCO sink, so I cannot
>>>> understand why the fixed latency is set to 125 ms. Should I send a
>>>> patch to correct it?
>>> I don't know how Lennart came up with these numbers. How did you get
>>> the latency report from the headset? AFAIK, the reason why these
>>> constants exist is that we don't have a way to query the latency with
>>> bluetooth, and reporting some latency is likely more accurate than
>>> reporting zero latency.
>>>
>> Hi Tanu,
>>
>> the values (plus one write block size) are passed to pulse via
>> pa_{sink,source}_set_fixed_latency_within_thread() calls.
>> So pacmd list-sinks shows a fixed latency of 128 ms for the
>> SCO sink.
>> When I use module-loopback, the latency of the sink reported
>> by pa_sink_get_latency() is 28 ms however, similar to what I
>> get for A2DP.
>>
>> Since all other fixed latencies are at 25 ms and this is also set
>> for SCO recording, I think that the 125 is just a typo.
>> If you agree, I would send a patch to correct it.
> I thought that the latency constants would be included in the value
> that get_latency() reports, but apparently that's only true for A2DP in
> module-bluez4-device (which I believe you're still using). In module-
> bluez5-device the fixed latency is added to all reports.
>
> I'm fine with changing the constant from 125 ms to 25 ms, it may very
> well be a typo.
>
Hi Tanu,

I am using bluez5 and I just tested it again to make sure - at least
pa_sink_get_latency_within_thread() returns a value of around 28 ms
and also pacmd list-sinks returns similar values although the fixed
latency is set to 128 ms. Here the output of pacmd list-sinks:

     index: 3
         name: <bluez_sink.0C_E0_E4_31_23_2D.headset_head_unit>
         driver: <module-bluez5-device.c>
         flags: HARDWARE HW_VOLUME_CTRL LATENCY
         state: RUNNING
         suspend cause:
         priority: 9030
         volume: mono: 65536 / 100%
                 balance 0,00
         base volume: 65536 / 100%
         volume steps: 16
         muted: no
         current latency: 32,60 ms
         max request: 0 KiB
         max rewind: 0 KiB
         monitor source: 6
         sample spec: s16le 1ch 8000Hz
         channel map: mono
                      Mono
         used by: 1
         linked by: 1
         fixed latency: 128,00 ms

I already sent a patch last weekend.

Regards
              Georg



More information about the pulseaudio-discuss mailing list