[pulseaudio-discuss] [PATCH v4 0/7] New API for Bluetooth A2DP codecs
Pali Rohár
pali.rohar at gmail.com
Mon Jan 14 23:23:36 UTC 2019
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.
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.
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.
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
More information about the pulseaudio-discuss
mailing list