[pulseaudio-discuss] [PATCH v4 0/7] New API for Bluetooth A2DP codecs

Luiz Augusto von Dentz luiz.dentz at gmail.com
Tue Jan 15 13:06:14 UTC 2019


Hi Pali,

On Mon, Jan 14, 2019 at 8:24 PM Pali Rohár <pali.rohar at gmail.com> wrote:
>
> This is 4th version of my patch series for modular A2DP codec API and
> aptX support.
>
> This patch series provides new modular API for Bluetooth A2DP codecs,
> clean up module-bluez5-device and bluez5-util to be codec independent
> and convert SBC codec into this new API for A2DP codecs. Also it adds
> support for aptX, aptX HD and FastStream A2DP codecs.

It is a bit better since you are introducing a table to add codecs,
though what I suggested was having the codecs as separated modules
which then register with bluetooth modules to make their codec
available. Anyway Im fine with just having a table, at least it is not
using #ifdef everywhere.

> New codec API is designed in way, that for adding new codec is not
> needed to touch bluez5-util nor module-bluez5-device files. Whole
> codec registration is done in a2dp-codec-util.c file, without need
> to update any header file.
>
> Some A2DP codecs are bidirectional and support backchannel for
> microphone voice. This new A2DP codec API fully supports this feature
> and module-bluez5-device was extended to support microphone voice source
> for codecs which declares such support. FastStream is such codec.
>
> For every A2DP codec is created card profile. When using bluez patches
> from https://marc.info/?l=linux-bluetooth&m=154696260401673&w=2 then
> only those profiles codec profiles are created which are supported
> by remote headset/endpoint.

Hmm, this may be a problem in case we have never actually discover the
remote endpoints, for instance if you had an existing headset paired
and that only reconnects and setup the stream on its own we would not
have the list of its endpoits, in this case we should not be able to
switch endpoits but we should still be able to connect as before.

> With this new modular API it should be easy to add other codec support
> like MP3, AAC or LDAC.
>
> API is designed also for ability to register "more variants" or one
> A2DP codec. E.g. SBC codec forced to high quality, SBC codec forced
> to low quality, SBC codec with automatic quality.
>
> Once we agree on final version of codec API, I can prepare patches
> also for choosing above SBC codec quality.
>
> I tested playback with SBC, aptX and FastStream codecs and it is
> working fine. Also microphone voice in FastStream is working and has
> slightly better quality as in HSP profile.

Speaking about aptX, there seems to be 2 libs supporting it,
libavcodec and your openaptx, we should probably settle in just one,
probably the one that easier to find packages.

> TODO:
> * Support for codec switching via new bluez API
>
> Changes in v4:
> * Added support for aptX HD codec
> * Changed codec API for reading block size and reducing encoder bitrate
> * Added support for microphone backchannel into module-bluez5-device
> * Added support for microphone backchannel into FastStream codec
> * Fixed parsing FastStream A2DP config buffer
> * Fixed validation for config buffers
> * Fixed calculating block size for aptX codec
> * Fixed resetting SBC and FastStream codecs
>
> Changes in v3:
> * Fixed problems pointed by Tanu
>
> Pali Rohár (7):
>   switch-on-port-available: Fix null pointer dereference
>   bluetooth: policy: Remove BlueZ 4 related code
>   bluetooth: policy: Reflect a2dp profile names
>   bluetooth: Update a2dp-codecs.h from upstream bluez project
>   bluetooth: Modular API for A2DP codecs
>   bluetooth: Add A2DP aptX and aptX HD codecs support
>   bluetooth: Add A2DP FastStream codec support
>
>  configure.ac                                    |  36 +
>  src/Makefile.am                                 |  20 +-
>  src/modules/bluetooth/a2dp-codec-api.h          |  80 +++
>  src/modules/bluetooth/a2dp-codec-aptx.c         | 547 +++++++++++++++
>  src/modules/bluetooth/a2dp-codec-faststream.c   | 433 ++++++++++++
>  src/modules/bluetooth/a2dp-codec-sbc.c          | 633 +++++++++++++++++
>  src/modules/bluetooth/a2dp-codec-util.c         |  66 ++
>  src/modules/bluetooth/a2dp-codec-util.h         |  34 +
>  src/modules/bluetooth/a2dp-codecs.h             | 354 +++++++++-
>  src/modules/bluetooth/bluez5-util.c             | 701 ++++++++++++-------
>  src/modules/bluetooth/bluez5-util.h             |  38 +-
>  src/modules/bluetooth/module-bluetooth-policy.c |  19 +-
>  src/modules/bluetooth/module-bluez5-device.c    | 857 +++++++++++-------------
>  src/modules/module-switch-on-port-available.c   |   2 +-
>  14 files changed, 3086 insertions(+), 734 deletions(-)
>  create mode 100644 src/modules/bluetooth/a2dp-codec-api.h
>  create mode 100644 src/modules/bluetooth/a2dp-codec-aptx.c
>  create mode 100644 src/modules/bluetooth/a2dp-codec-faststream.c
>  create mode 100644 src/modules/bluetooth/a2dp-codec-sbc.c
>  create mode 100644 src/modules/bluetooth/a2dp-codec-util.c
>  create mode 100644 src/modules/bluetooth/a2dp-codec-util.h
>
> --
> 2.11.0
>


-- 
Luiz Augusto von Dentz


More information about the pulseaudio-discuss mailing list