[pulseaudio-discuss] About extra A2DP codecs support in bluetooth module

Tanu Kaskinen tanuk at iki.fi
Fri Jul 7 15:05:58 UTC 2017


On Fri, 2017-07-07 at 20:33 +0800, Qu Wenruo wrote:
> After a quick glance into the code (without much knowledge about 
> pulseaudio), I found that pulseaudio is just using sbc library to do the 
> encode.
> 
>  From a2dp_process_render():
> ---
>      while (PA_LIKELY(to_encode > 0 && to_write > 0)) {
>          ssize_t written;
>          ssize_t encoded;
> 
>          encoded = sbc_encode(&sbc_info->sbc,
>                               p, to_encode,
>                               d, to_write,
>                               &written);
> ---
> 
> So there is really nothing blocking us to implement other codec.
> For AAC codec, just (well, without tons of preparation and setup) call 
> faacEncEncode() will be the core part.
> Copyright sh*t will only restrict the related library, not the PA module.
> (So if we could create a aptX codec library, then it will be possible to 
> support)
> 
> While the really hard part would be the preparation part, including 
> creating a structure for faac encoder to contain a faacEncHandle and 
> other needed info from sample rate to profile, just like sbc_info_t.
> 
> Although I have a basic idea of what to do, I'm still figuring out how 
> to handle all the details.
> Like how to create an endpoint for AAC codec (codec 0 is registered at 
> register_endpoint, but shouldn't it be A2DP_CODEC_SBC instead of 
> intermediate number 0?)

I don't know bluetooth details enough to answer. I'll add Luiz to Cc in
case he knows. You could try asking on the bluez mailing list too.

> And how pulseaudio is handling the extra latency? Is PA infrastructure 
> handling them well
> so that we don't need to touch it?

A2DP latency reporting is currently kind of crappy anyway (see [1]),
but if AAC has higher latency than SBC, it would be good to reflect
that in the latency reports. The place to edit is the
PA_SINK_MESSAGE_GET_LATENCY handler in modules/bluetooth/module-bluez5-
device.c.

[1] https://bugs.freedesktop.org/show_bug.cgi?id=58746

> Anyway, it'll take some time for me to get familiar with PA 
> infrastructures, from dbus to PA internal helper functions.
> 
> If there is any developer docs, that will help a lot.

There's not a lot. Here's the developer section in the wiki:
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/Developer/

-- 
Tanu

https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list