[pulseaudio-discuss] Bluetooth A2DP AAC passthrough?

Arun Raghavan arun at accosted.net
Mon May 2 13:50:47 UTC 2016


On 2 May 2016 at 19:06, Pierre-Louis Bossart
<pierre-louis.bossart at linux.intel.com> wrote:
> On 4/29/16 10:17 PM, Arun Raghavan wrote:
>>
>> On 29 April 2016 at 18:57, Tanu Kaskinen <tanuk at iki.fi> wrote:
>>>
>>> On Wed, 2016-04-27 at 16:53 +0200, Nicole Færber wrote:
>>>>
>>>> Hello,
>>>>
>>>> I know this has been a topic several times now. I searched the
>>>> mailinglist archives, FAQ, current GIT and other internet resources for
>>>> a practical way with current versions of BlueZ5 and Pulse Audio but it
>>>> seems that most proposed patches have been dropped, am I correct with
>>>> this assessment?
>>>>
>>>> My personal goal would be to have a mode to playback AAC content to a
>>>> paired and connected A2DP device capable of A2DP-AAC - in my case a
>>>> Parrot Zik2.0. If such a way already exists I would be really happy for
>>>> an advice on how to actually use it, e.g. using paplay?
>>>>
>>>> If such a mode does not yet exist are there plans to implement other
>>>> codecs? At least as pass-through? What is needed? Is it already being
>>>> worked on? Can I give a hand? As usual time is limited and my knowledge
>>>> on A2DP and especially Pulse Audio is limited but I am willing to help.
>>>
>>>
>>> Compressed audio passthrough with bluetooth is not supported. I think
>>> the feature would be welcome, though. I'm not aware of anyone working
>>> on it.
>>>
>>> We already support compressed passthrough with alsa, so it's not
>>> necessary to start from absolute scratch. Alsa wants compressed audio
>>> wrapped in "IEC 61937" encapsulation, and that format also makes it
>>> easier for pulseaudio to deal with the data, because the encapsulation
>>> makes it possible to convert between number of bytes and time (that is,
>>> a certain number of bytes always corresponds to the same amount of
>>> time, which isn't true with plain AAC audio). For that reason we
>>> require applications to do the encapsulation, so pulseaudio doesn't
>>> have to do any changes to the data.
>>>
>>> I suppose bluetooth doesn't use the IEC 61937 encapsulation, so the
>>> question arises if we should use it in pulseaudio when doing
>>> passthrough with bluetooth. I think it would make sense to use
>>> encapsulation at least in the initial implementation, because that
>>> would then retain the nice property that we don't have to understand
>>> anything about the AAC format as such. The bluetooth module would then
>>> have to do the unpacking of the AAC data from the IEC 61937
>>> encapsulation, which hopefully is reasonably straightforward.
>>
>>
>> Pierre-Louis Bossart did a PoC based on this and I'd expanded on this
>> a while back, for MP3:
>>
>>   https://cgit.freedesktop.org/~arun/pulseaudio/log/?h=bt-passthrough
>>
>> However, this is a hack and doesn't make sense as the solution we
>> upstream.
>>
>> We need to be able to deal with compressed audio as-is. The compressed
>> API supports this at the ALSA layer, and I really want to be able to
>> expose that cleanly. I'm not in favour of adding codec-specific code
>> in PulseAudio, but I think it should be possible to have something
>> working without that.
>
>
> Bluetooth adds format changes and RTP packetization that is not needed for
> compressed data playback in a sound card. if you are thinking of having a
> single layer to handle compressed playback, well, that is not going to work.
> You will need extra code in Bluetooth sinks.
>
> Specifically for AAC over A2DP the data needs to be reshuffled to add the
> LATM layer. The documentation for this is not quite self-explanatory.

We could push the reshuffling into LATM to a higher layer, same as for
the IEC61937 payloading, and we should be able to do the same for the
RTP payloading as well.

-- Arun


More information about the pulseaudio-discuss mailing list