[pulseaudio-discuss] [PATCH v2 1/2] Modular API for Bluetooth A2DP codec
Pali Rohár
pali.rohar at gmail.com
Mon Aug 6 08:23:35 UTC 2018
On Sunday 05 August 2018 11:07:23 Arun Raghavan wrote:
> On Sat, 28 Jul 2018, at 9:04 PM, Pali Rohár wrote:
> > Move current SBC codec implementation into separate source file and use
> > this new API for providing all needed functionality for Bluetooth A2DP.
> >
> > Both bluez5-util and module-bluez5-device are changed to use this new
> > modular codec API.
> > ---
> > src/Makefile.am | 9 +-
> > src/modules/bluetooth/a2dp-codecs.h | 5 +-
> > src/modules/bluetooth/bluez5-util.c | 331 +++++----------
> > src/modules/bluetooth/bluez5-util.h | 10 +-
> > src/modules/bluetooth/module-bluez5-device.c | 487 ++++++----------------
> > src/modules/bluetooth/pa-a2dp-codec-sbc.c | 579 +++++++++++++++++++++++++++
> > src/modules/bluetooth/pa-a2dp-codec.h | 40 ++
> > 7 files changed, 851 insertions(+), 610 deletions(-)
> > create mode 100644 src/modules/bluetooth/pa-a2dp-codec-sbc.c
> > create mode 100644 src/modules/bluetooth/pa-a2dp-codec.h
> >
> > diff --git a/src/Makefile.am b/src/Makefile.am
> > index f62e7d5c4..411b9e5e5 100644
> > --- a/src/Makefile.am
> > +++ b/src/Makefile.am
> > @@ -2117,6 +2117,7 @@ module_bluetooth_discover_la_CFLAGS = $(AM_CFLAGS)
> > -DPA_MODULE_NAME=module_bluet
> > libbluez5_util_la_SOURCES = \
> > modules/bluetooth/bluez5-util.c \
> > modules/bluetooth/bluez5-util.h \
> > + modules/bluetooth/pa-a2dp-codec.h \
> > modules/bluetooth/a2dp-codecs.h
> > if HAVE_BLUEZ_5_OFONO_HEADSET
> > libbluez5_util_la_SOURCES += \
> > @@ -2131,6 +2132,10 @@ libbluez5_util_la_LDFLAGS = -avoid-version
> > libbluez5_util_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS)
> > libbluez5_util_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
> >
> > +libbluez5_util_la_SOURCES += modules/bluetooth/pa-a2dp-codec-sbc.c
> > +libbluez5_util_la_LIBADD += $(SBC_LIBS)
> > +libbluez5_util_la_CFLAGS += $(SBC_CFLAGS)
> > +
> > module_bluez5_discover_la_SOURCES = modules/bluetooth/module-bluez5-
> > discover.c
> > module_bluez5_discover_la_LDFLAGS = $(MODULE_LDFLAGS)
> > module_bluez5_discover_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS)
> > libbluez5-util.la
> > @@ -2138,8 +2143,8 @@ module_bluez5_discover_la_CFLAGS = $(AM_CFLAGS) $
> > (DBUS_CFLAGS) -DPA_MODULE_NAME=
> >
> > module_bluez5_device_la_SOURCES = modules/bluetooth/module-bluez5-
> > device.c
> > module_bluez5_device_la_LDFLAGS = $(MODULE_LDFLAGS)
> > -module_bluez5_device_la_LIBADD = $(MODULE_LIBADD) $(SBC_LIBS)
> > libbluez5-util.la
> > -module_bluez5_device_la_CFLAGS = $(AM_CFLAGS) $(SBC_CFLAGS) -
> > DPA_MODULE_NAME=module_bluez5_device
> > +module_bluez5_device_la_LIBADD = $(MODULE_LIBADD) libbluez5-util.la
> > +module_bluez5_device_la_CFLAGS = $(AM_CFLAGS) -
> > DPA_MODULE_NAME=module_bluez5_device
> >
> > # Apple Airtunes/RAOP
> > module_raop_sink_la_SOURCES = modules/raop/module-raop-sink.c
> > diff --git a/src/modules/bluetooth/a2dp-codecs.h b/src/modules/
> > bluetooth/a2dp-codecs.h
> > index 8afcfcb24..004975586 100644
> > --- a/src/modules/bluetooth/a2dp-codecs.h
> > +++ b/src/modules/bluetooth/a2dp-codecs.h
> > @@ -47,6 +47,9 @@
> > #define SBC_ALLOCATION_SNR (1 << 1)
> > #define SBC_ALLOCATION_LOUDNESS 1
> >
> > +#define SBC_MIN_BITPOOL 2
> > +#define SBC_MAX_BITPOOL 64
> > +
> > #define MPEG_CHANNEL_MODE_MONO (1 << 3)
> > #define MPEG_CHANNEL_MODE_DUAL_CHANNEL (1 << 2)
> > #define MPEG_CHANNEL_MODE_STEREO (1 << 1)
> > @@ -63,8 +66,6 @@
> > #define MPEG_SAMPLING_FREQ_44100 (1 << 1)
> > #define MPEG_SAMPLING_FREQ_48000 1
> >
> > -#define MAX_BITPOOL 64
> > -#define MIN_BITPOOL 2
> >
> > #if __BYTE_ORDER == __LITTLE_ENDIAN
> >
> > diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/
> > bluetooth/bluez5-util.c
> > index 2d8337317..9c4e3367b 100644
> > --- a/src/modules/bluetooth/bluez5-util.c
> > +++ b/src/modules/bluetooth/bluez5-util.c
> > @@ -2,6 +2,7 @@
> > This file is part of PulseAudio.
> >
> > Copyright 2008-2013 João Paulo Rechi Vita
> > + Copyrigth 2018 Pali Rohár <pali.rohar at gmail.com>
> >
> > PulseAudio is free software; you can redistribute it and/or modify
> > it under the terms of the GNU Lesser General Public License as
> > @@ -33,7 +34,7 @@
> > #include <pulsecore/refcnt.h>
> > #include <pulsecore/shared.h>
> >
> > -#include "a2dp-codecs.h"
> > +#include "pa-a2dp-codec.h"
> >
> > #include "bluez5-util.h"
> >
> > @@ -48,8 +49,8 @@
> >
> > #define BLUEZ_ERROR_NOT_SUPPORTED "org.bluez.Error.NotSupported"
> >
> > -#define A2DP_SOURCE_ENDPOINT "/MediaEndpoint/A2DPSource"
> > -#define A2DP_SINK_ENDPOINT "/MediaEndpoint/A2DPSink"
> > +#define A2DP_SOURCE_SBC_ENDPOINT "/MediaEndpoint/A2DPSourceSBC"
> > +#define A2DP_SINK_SBC_ENDPOINT "/MediaEndpoint/A2DPSinkSBC"
> >
> > #define ENDPOINT_INTROSPECT_XML
> > \
> > DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE
> > \
> > @@ -170,9 +171,9 @@ static const char
> > *transport_state_to_string(pa_bluetooth_transport_state_t stat
> >
> > static bool device_supports_profile(pa_bluetooth_device *device,
> > pa_bluetooth_profile_t profile) {
> > switch (profile) {
> > - case PA_BLUETOOTH_PROFILE_A2DP_SINK:
> > + case PA_BLUETOOTH_PROFILE_A2DP_SBC_SINK:
> > return !!pa_hashmap_get(device->uuids,
> > PA_BLUETOOTH_UUID_A2DP_SINK);
> > - case PA_BLUETOOTH_PROFILE_A2DP_SOURCE:
> > + case PA_BLUETOOTH_PROFILE_A2DP_SBC_SOURCE:
> > return !!pa_hashmap_get(device->uuids,
>
> I haven't done a thorough review yet, but this one caught my eye. Tying the codec and the profile together here does not seem to be a good choice. Seems cleaner to separate out the codec choice into a separate field.
For each codec you need bluez endpoint, bound to bluez code which is in
bluez5-util.c
If codec should not be part of profile? How should be codec selected,
negotiated or switched by user?
And how to handle situation for bi-rectional A2DP codecs? Because now
PA_BLUETOOTH_PROFILE_A2DP_SINK and PA_BLUETOOTH_PROFILE_A2DP_SOURCE
support only one direction.
> There's a bunch of other stuff, but probably makes sense to discuss this up-front.
>
> Also, we now have GitLab for patch submission, so feel free to use that for easier code reviews in the next iteration.
>
> -- Arun
--
Pali Rohár
pali.rohar at gmail.com
More information about the pulseaudio-discuss
mailing list