mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
bluez5: Rename codec API from *a2dp* to *media*
The BlueZ Media1 interface will not only be used for A2DP but also for LE Audio and code related can be shared.
This commit is contained in:
parent
64a3edf89e
commit
00d51c3d31
20 changed files with 485 additions and 485 deletions
|
|
@ -114,13 +114,13 @@ extern "C" {
|
|||
/** keys for bluez5 factory names */
|
||||
#define SPA_NAME_API_BLUEZ5_ENUM_DBUS "api.bluez5.enum.dbus" /**< a dbus Device interface */
|
||||
#define SPA_NAME_API_BLUEZ5_DEVICE "api.bluez5.device" /**< a Device interface */
|
||||
#define SPA_NAME_API_BLUEZ5_A2DP_SINK "api.bluez5.a2dp.sink" /**< a playback Node interface for A2DP profiles */
|
||||
#define SPA_NAME_API_BLUEZ5_A2DP_SOURCE "api.bluez5.a2dp.source" /**< a capture Node interface for A2DP profiles */
|
||||
#define SPA_NAME_API_BLUEZ5_MEDIA_SINK "api.bluez5.media.sink" /**< a playback Node interface for A2DP/BAP profiles */
|
||||
#define SPA_NAME_API_BLUEZ5_MEDIA_SOURCE "api.bluez5.media.source" /**< a capture Node interface for A2DP/BAP profiles */
|
||||
#define SPA_NAME_API_BLUEZ5_SCO_SINK "api.bluez5.sco.sink" /**< a playback Node interface for HSP/HFP profiles */
|
||||
#define SPA_NAME_API_BLUEZ5_SCO_SOURCE "api.bluez5.sco.source" /**< a capture Node interface for HSP/HFP profiles */
|
||||
|
||||
/** keys for codec factory names */
|
||||
#define SPA_NAME_API_CODEC_BLUEZ5_A2DP "api.codec.bluez5.a2dp" /**< Bluez5 A2DP codec plugin */
|
||||
#define SPA_NAME_API_CODEC_BLUEZ5_MEDIA "api.codec.bluez5.media" /**< Bluez5 Media codec plugin */
|
||||
|
||||
/** keys for v4l2 factory names */
|
||||
#define SPA_NAME_API_V4L2_ENUM_UDEV "api.v4l2.enum.udev" /**< a v4l2 udev Device interface */
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
#include <fdk-aac/aacdecoder_lib.h>
|
||||
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
static struct spa_log *log;
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.codecs.aac");
|
||||
|
|
@ -65,7 +65,7 @@ struct impl {
|
|||
int samplesize;
|
||||
};
|
||||
|
||||
static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_fill_caps(const struct media_codec *codec, uint32_t flags,
|
||||
uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
static const a2dp_aac_t a2dp_aac = {
|
||||
|
|
@ -98,7 +98,7 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(a2dp_aac);
|
||||
}
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
aac_frequencies[] = {
|
||||
{ AAC_SAMPLING_FREQ_48000, 48000, 11 },
|
||||
{ AAC_SAMPLING_FREQ_44100, 44100, 10 },
|
||||
|
|
@ -114,7 +114,7 @@ aac_frequencies[] = {
|
|||
{ AAC_SAMPLING_FREQ_8000, 8000, 0 },
|
||||
};
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
aac_channel_modes[] = {
|
||||
{ AAC_CHANNELS_2, 2, 1 },
|
||||
{ AAC_CHANNELS_1, 1, 0 },
|
||||
|
|
@ -130,9 +130,9 @@ static int get_valid_aac_bitrate(a2dp_aac_t *conf)
|
|||
}
|
||||
}
|
||||
|
||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_aac_t conf;
|
||||
|
|
@ -154,7 +154,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
else
|
||||
return -ENOTSUP;
|
||||
|
||||
if ((i = a2dp_codec_select_config(aac_frequencies,
|
||||
if ((i = media_codec_select_config(aac_frequencies,
|
||||
SPA_N_ELEMENTS(aac_frequencies),
|
||||
AAC_GET_FREQUENCY(conf),
|
||||
info ? info->rate : A2DP_CODEC_DEFAULT_RATE
|
||||
|
|
@ -162,7 +162,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return -ENOTSUP;
|
||||
AAC_SET_FREQUENCY(conf, aac_frequencies[i].config);
|
||||
|
||||
if ((i = a2dp_codec_select_config(aac_channel_modes,
|
||||
if ((i = media_codec_select_config(aac_channel_modes,
|
||||
SPA_N_ELEMENTS(aac_channel_modes),
|
||||
conf.channels,
|
||||
info ? info->channels : A2DP_CODEC_DEFAULT_CHANNELS
|
||||
|
|
@ -177,7 +177,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(conf);
|
||||
}
|
||||
|
||||
static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -246,7 +246,7 @@ static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return *param == NULL ? -EIO : 1;
|
||||
}
|
||||
|
||||
static int codec_validate_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_validate_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
struct spa_audio_info *info)
|
||||
{
|
||||
|
|
@ -296,7 +296,7 @@ static int codec_validate_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void *codec_init_props(const struct a2dp_codec *codec, uint32_t flags, const struct spa_dict *settings)
|
||||
static void *codec_init_props(const struct media_codec *codec, uint32_t flags, const struct spa_dict *settings)
|
||||
{
|
||||
struct props *p = calloc(1, sizeof(struct props));
|
||||
const char *str;
|
||||
|
|
@ -316,7 +316,7 @@ static void codec_clear_props(void *props)
|
|||
free(props);
|
||||
}
|
||||
|
||||
static void *codec_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *codec_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -630,7 +630,7 @@ static void codec_set_log(struct spa_log *global_log)
|
|||
spa_log_topic_init(log, &log_topic);
|
||||
}
|
||||
|
||||
const struct a2dp_codec a2dp_codec_aac = {
|
||||
const struct media_codec a2dp_codec_aac = {
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_AAC,
|
||||
.codec_id = A2DP_CODEC_MPEG24,
|
||||
.name = "aac",
|
||||
|
|
@ -654,7 +654,7 @@ const struct a2dp_codec a2dp_codec_aac = {
|
|||
.set_log = codec_set_log,
|
||||
};
|
||||
|
||||
A2DP_CODEC_EXPORT_DEF(
|
||||
MEDIA_CODEC_EXPORT_DEF(
|
||||
"aac",
|
||||
&a2dp_codec_aac
|
||||
);
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
#include <freeaptx.h>
|
||||
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
#define APTX_LL_LEVEL1(level) (((level) >> 8) & 0xFF)
|
||||
#define APTX_LL_LEVEL2(level) (((level) >> 0) & 0xFF)
|
||||
|
|
@ -71,19 +71,19 @@ struct msbc_impl {
|
|||
sbc_t msbc;
|
||||
};
|
||||
|
||||
static inline bool codec_is_hd(const struct a2dp_codec *codec)
|
||||
static inline bool codec_is_hd(const struct media_codec *codec)
|
||||
{
|
||||
return codec->vendor.codec_id == APTX_HD_CODEC_ID
|
||||
&& codec->vendor.vendor_id == APTX_HD_VENDOR_ID;
|
||||
}
|
||||
|
||||
static inline bool codec_is_ll(const struct a2dp_codec *codec)
|
||||
static inline bool codec_is_ll(const struct media_codec *codec)
|
||||
{
|
||||
return (codec->id == SPA_BLUETOOTH_AUDIO_CODEC_APTX_LL) ||
|
||||
(codec->id == SPA_BLUETOOTH_AUDIO_CODEC_APTX_LL_DUPLEX);
|
||||
}
|
||||
|
||||
static inline size_t codec_get_caps_size(const struct a2dp_codec *codec)
|
||||
static inline size_t codec_get_caps_size(const struct media_codec *codec)
|
||||
{
|
||||
if (codec_is_hd(codec))
|
||||
return sizeof(a2dp_aptx_hd_t);
|
||||
|
|
@ -93,7 +93,7 @@ static inline size_t codec_get_caps_size(const struct a2dp_codec *codec)
|
|||
return sizeof(a2dp_aptx_t);
|
||||
}
|
||||
|
||||
static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_fill_caps(const struct media_codec *codec, uint32_t flags,
|
||||
uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
size_t actual_conf_size = codec_get_caps_size(codec);
|
||||
|
|
@ -119,7 +119,7 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return actual_conf_size;
|
||||
}
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
aptx_frequencies[] = {
|
||||
{ APTX_SAMPLING_FREQ_48000, 48000, 3 },
|
||||
{ APTX_SAMPLING_FREQ_44100, 44100, 2 },
|
||||
|
|
@ -127,9 +127,9 @@ aptx_frequencies[] = {
|
|||
{ APTX_SAMPLING_FREQ_16000, 16000, 0 },
|
||||
};
|
||||
|
||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_aptx_t conf;
|
||||
|
|
@ -145,7 +145,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
codec->vendor.codec_id != conf.info.codec_id)
|
||||
return -ENOTSUP;
|
||||
|
||||
if ((i = a2dp_codec_select_config(aptx_frequencies,
|
||||
if ((i = media_codec_select_config(aptx_frequencies,
|
||||
SPA_N_ELEMENTS(aptx_frequencies),
|
||||
conf.frequency,
|
||||
info ? info->rate : A2DP_CODEC_DEFAULT_RATE
|
||||
|
|
@ -163,9 +163,9 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return actual_conf_size;
|
||||
}
|
||||
|
||||
static int codec_select_config_ll(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config_ll(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_aptx_ll_ext_t conf = { 0 };
|
||||
|
|
@ -218,7 +218,7 @@ static int codec_select_config_ll(const struct a2dp_codec *codec, uint32_t flags
|
|||
return actual_conf_size;
|
||||
}
|
||||
|
||||
static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -315,7 +315,7 @@ static int codec_get_block_size(void *data)
|
|||
return this->codesize;
|
||||
}
|
||||
|
||||
static void *codec_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *codec_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -458,7 +458,7 @@ static int codec_decode(void *data,
|
|||
* When connected as SRC to SNK, aptX-LL sink may send back mSBC data.
|
||||
*/
|
||||
|
||||
static int msbc_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int msbc_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -479,7 +479,7 @@ static int msbc_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return *param == NULL ? -EIO : 1;
|
||||
}
|
||||
|
||||
static int msbc_validate_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int msbc_validate_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
struct spa_audio_info *info)
|
||||
{
|
||||
|
|
@ -508,7 +508,7 @@ static int msbc_get_block_size(void *data)
|
|||
return MSBC_DECODED_SIZE;
|
||||
}
|
||||
|
||||
static void *msbc_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *msbc_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -610,7 +610,7 @@ static int msbc_decode(void *data,
|
|||
}
|
||||
|
||||
|
||||
const struct a2dp_codec a2dp_codec_aptx = {
|
||||
const struct media_codec a2dp_codec_aptx = {
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_APTX,
|
||||
.codec_id = A2DP_CODEC_VENDOR,
|
||||
.vendor = { .vendor_id = APTX_VENDOR_ID,
|
||||
|
|
@ -633,7 +633,7 @@ const struct a2dp_codec a2dp_codec_aptx = {
|
|||
};
|
||||
|
||||
|
||||
const struct a2dp_codec a2dp_codec_aptx_hd = {
|
||||
const struct media_codec a2dp_codec_aptx_hd = {
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_APTX_HD,
|
||||
.codec_id = A2DP_CODEC_VENDOR,
|
||||
.vendor = { .vendor_id = APTX_HD_VENDOR_ID,
|
||||
|
|
@ -671,7 +671,7 @@ const struct a2dp_codec a2dp_codec_aptx_hd = {
|
|||
.increase_bitpool = codec_increase_bitpool
|
||||
|
||||
|
||||
const struct a2dp_codec a2dp_codec_aptx_ll_0 = {
|
||||
const struct media_codec a2dp_codec_aptx_ll_0 = {
|
||||
APTX_LL_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_APTX_LL,
|
||||
.vendor = { .vendor_id = APTX_LL_VENDOR_ID,
|
||||
|
|
@ -680,7 +680,7 @@ const struct a2dp_codec a2dp_codec_aptx_ll_0 = {
|
|||
.endpoint_name = "aptx_ll_0",
|
||||
};
|
||||
|
||||
const struct a2dp_codec a2dp_codec_aptx_ll_1 = {
|
||||
const struct media_codec a2dp_codec_aptx_ll_1 = {
|
||||
APTX_LL_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_APTX_LL,
|
||||
.vendor = { .vendor_id = APTX_LL_VENDOR_ID2,
|
||||
|
|
@ -690,7 +690,7 @@ const struct a2dp_codec a2dp_codec_aptx_ll_1 = {
|
|||
};
|
||||
|
||||
/* Voice channel mSBC, not a real A2DP codec */
|
||||
static const struct a2dp_codec aptx_ll_msbc = {
|
||||
static const struct media_codec aptx_ll_msbc = {
|
||||
.codec_id = A2DP_CODEC_VENDOR,
|
||||
.name = "aptx_ll_msbc",
|
||||
.description = "aptX-LL mSBC",
|
||||
|
|
@ -715,7 +715,7 @@ static const struct spa_dict_item duplex_info_items[] = {
|
|||
};
|
||||
static const struct spa_dict duplex_info = SPA_DICT_INIT_ARRAY(duplex_info_items);
|
||||
|
||||
const struct a2dp_codec a2dp_codec_aptx_ll_duplex_0 = {
|
||||
const struct media_codec a2dp_codec_aptx_ll_duplex_0 = {
|
||||
APTX_LL_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_APTX_LL_DUPLEX,
|
||||
.vendor = { .vendor_id = APTX_LL_VENDOR_ID,
|
||||
|
|
@ -726,7 +726,7 @@ const struct a2dp_codec a2dp_codec_aptx_ll_duplex_0 = {
|
|||
.info = &duplex_info,
|
||||
};
|
||||
|
||||
const struct a2dp_codec a2dp_codec_aptx_ll_duplex_1 = {
|
||||
const struct media_codec a2dp_codec_aptx_ll_duplex_1 = {
|
||||
APTX_LL_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_APTX_LL_DUPLEX,
|
||||
.vendor = { .vendor_id = APTX_LL_VENDOR_ID2,
|
||||
|
|
@ -737,7 +737,7 @@ const struct a2dp_codec a2dp_codec_aptx_ll_duplex_1 = {
|
|||
.info = &duplex_info,
|
||||
};
|
||||
|
||||
A2DP_CODEC_EXPORT_DEF(
|
||||
MEDIA_CODEC_EXPORT_DEF(
|
||||
"aptx",
|
||||
&a2dp_codec_aptx_hd,
|
||||
&a2dp_codec_aptx,
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
#include <sbc/sbc.h>
|
||||
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
struct impl {
|
||||
sbc_t sbc;
|
||||
|
|
@ -51,7 +51,7 @@ struct duplex_impl {
|
|||
sbc_t sbc;
|
||||
};
|
||||
|
||||
static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_fill_caps(const struct media_codec *codec, uint32_t flags,
|
||||
uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
const a2dp_faststream_t a2dp_faststream = {
|
||||
|
|
@ -69,20 +69,20 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(a2dp_faststream);
|
||||
}
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
frequencies[] = {
|
||||
{ FASTSTREAM_SINK_SAMPLING_FREQ_48000, 48000, 1 },
|
||||
{ FASTSTREAM_SINK_SAMPLING_FREQ_44100, 44100, 0 },
|
||||
};
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
duplex_frequencies[] = {
|
||||
{ FASTSTREAM_SOURCE_SAMPLING_FREQ_16000, 16000, 0 },
|
||||
};
|
||||
|
||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_faststream_t conf;
|
||||
|
|
@ -108,7 +108,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
if (codec->duplex_codec)
|
||||
conf.direction |= FASTSTREAM_DIRECTION_SOURCE;
|
||||
|
||||
if ((i = a2dp_codec_select_config(frequencies,
|
||||
if ((i = media_codec_select_config(frequencies,
|
||||
SPA_N_ELEMENTS(frequencies),
|
||||
conf.sink_frequency,
|
||||
info ? info->rate : A2DP_CODEC_DEFAULT_RATE
|
||||
|
|
@ -116,7 +116,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return -ENOTSUP;
|
||||
conf.sink_frequency = frequencies[i].config;
|
||||
|
||||
if ((i = a2dp_codec_select_config(duplex_frequencies,
|
||||
if ((i = media_codec_select_config(duplex_frequencies,
|
||||
SPA_N_ELEMENTS(duplex_frequencies),
|
||||
conf.source_frequency,
|
||||
16000
|
||||
|
|
@ -129,7 +129,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(conf);
|
||||
}
|
||||
|
||||
static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -209,7 +209,7 @@ static size_t ceil2(size_t v)
|
|||
return v;
|
||||
}
|
||||
|
||||
static void *codec_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *codec_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -372,7 +372,7 @@ static SPA_UNUSED int codec_decode(void *data,
|
|||
* When connected as SRC to SNK, FastStream sink may send back SBC data.
|
||||
*/
|
||||
|
||||
static int duplex_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int duplex_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -411,7 +411,7 @@ static int duplex_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return *param == NULL ? -EIO : 1;
|
||||
}
|
||||
|
||||
static int duplex_validate_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int duplex_validate_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
struct spa_audio_info *info)
|
||||
{
|
||||
|
|
@ -441,7 +441,7 @@ static int duplex_get_block_size(void *data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void *duplex_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *duplex_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -577,7 +577,7 @@ static int duplex_decode(void *data,
|
|||
}
|
||||
|
||||
/* Voice channel SBC, not a real A2DP codec */
|
||||
static const struct a2dp_codec duplex_codec = {
|
||||
static const struct media_codec duplex_codec = {
|
||||
.codec_id = A2DP_CODEC_VENDOR,
|
||||
.name = "faststream_sbc",
|
||||
.description = "FastStream duplex SBC",
|
||||
|
|
@ -614,7 +614,7 @@ static const struct a2dp_codec duplex_codec = {
|
|||
.reduce_bitpool = codec_reduce_bitpool, \
|
||||
.increase_bitpool = codec_increase_bitpool
|
||||
|
||||
static const struct a2dp_codec a2dp_codec_faststream = {
|
||||
const struct media_codec a2dp_codec_faststream = {
|
||||
FASTSTREAM_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_FASTSTREAM,
|
||||
.name = "faststream",
|
||||
|
|
@ -625,7 +625,7 @@ static const struct spa_dict_item duplex_info_items[] = {
|
|||
};
|
||||
static const struct spa_dict duplex_info = SPA_DICT_INIT_ARRAY(duplex_info_items);
|
||||
|
||||
const struct a2dp_codec a2dp_codec_faststream_duplex = {
|
||||
const struct media_codec a2dp_codec_faststream_duplex = {
|
||||
FASTSTREAM_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_FASTSTREAM_DUPLEX,
|
||||
.name = "faststream_duplex",
|
||||
|
|
@ -633,7 +633,7 @@ const struct a2dp_codec a2dp_codec_faststream_duplex = {
|
|||
.info = &duplex_info,
|
||||
};
|
||||
|
||||
A2DP_CODEC_EXPORT_DEF(
|
||||
MEDIA_CODEC_EXPORT_DEF(
|
||||
"faststream",
|
||||
&a2dp_codec_faststream,
|
||||
&a2dp_codec_faststream_duplex
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
#endif
|
||||
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
#define BITRATE_MIN 96000
|
||||
#define BITRATE_MAX 512000
|
||||
|
|
@ -86,7 +86,7 @@ struct impl {
|
|||
int32_t buf[2][LC3PLUS_MAX_SAMPLES];
|
||||
};
|
||||
|
||||
static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_fill_caps(const struct media_codec *codec, uint32_t flags,
|
||||
uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
const a2dp_lc3plus_hr_t a2dp_lc3plus_hr = {
|
||||
|
|
@ -102,9 +102,9 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(a2dp_lc3plus_hr);
|
||||
}
|
||||
|
||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_lc3plus_hr_t conf;
|
||||
|
|
@ -150,8 +150,8 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(conf);
|
||||
}
|
||||
|
||||
static int codec_caps_preference_cmp(const struct a2dp_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct a2dp_codec_audio_info *info, const struct spa_dict *global_settings)
|
||||
static int codec_caps_preference_cmp(const struct media_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct media_codec_audio_info *info, const struct spa_dict *global_settings)
|
||||
{
|
||||
a2dp_lc3plus_hr_t conf1, conf2;
|
||||
a2dp_lc3plus_hr_t *conf;
|
||||
|
|
@ -160,7 +160,7 @@ static int codec_caps_preference_cmp(const struct a2dp_codec *codec, uint32_t fl
|
|||
|
||||
/* Order selected configurations by preference */
|
||||
res1 = codec->select_config(codec, 0, caps1, caps1_size, info, NULL, (uint8_t *)&conf1);
|
||||
res2 = codec->select_config(codec, 0, caps2, caps2_size, info, NULL, (uint8_t *)&conf2);
|
||||
res2 = codec->select_config(codec, 0, caps2, caps2_size, info , NULL, (uint8_t *)&conf2);
|
||||
|
||||
#define PREFER_EXPR(expr) \
|
||||
do { \
|
||||
|
|
@ -190,7 +190,7 @@ static int codec_caps_preference_cmp(const struct a2dp_codec *codec, uint32_t fl
|
|||
#undef PREFER_BOOL
|
||||
}
|
||||
|
||||
static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -263,7 +263,7 @@ static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return *param == NULL ? -EIO : 1;
|
||||
}
|
||||
|
||||
static int codec_validate_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_validate_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
struct spa_audio_info *info)
|
||||
{
|
||||
|
|
@ -342,7 +342,7 @@ static bool check_mtu_vs_frame_dms(struct impl *this)
|
|||
return (size_t)this->mtu >= header_size + ceildiv(payload_size, max_fragments);
|
||||
}
|
||||
|
||||
static void *codec_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *codec_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -758,7 +758,7 @@ static int codec_increase_bitpool(void *data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
const struct a2dp_codec a2dp_codec_lc3plus_hr = {
|
||||
const struct media_codec a2dp_codec_lc3plus_hr = {
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_LC3PLUS_HR,
|
||||
.name = "lc3plus_hr",
|
||||
.codec_id = A2DP_CODEC_VENDOR,
|
||||
|
|
@ -782,7 +782,7 @@ const struct a2dp_codec a2dp_codec_lc3plus_hr = {
|
|||
.increase_bitpool = codec_increase_bitpool
|
||||
};
|
||||
|
||||
A2DP_CODEC_EXPORT_DEF(
|
||||
MEDIA_CODEC_EXPORT_DEF(
|
||||
"lc3plus",
|
||||
&a2dp_codec_lc3plus_hr
|
||||
);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
#endif
|
||||
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
#define LDACBT_EQMID_AUTO -1
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ struct impl {
|
|||
int frame_count;
|
||||
};
|
||||
|
||||
static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags, uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
static int codec_fill_caps(const struct media_codec *codec, uint32_t flags, uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
static const a2dp_ldac_t a2dp_ldac = {
|
||||
.info.vendor_id = LDAC_VENDOR_ID,
|
||||
|
|
@ -97,7 +97,7 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags, uint8
|
|||
return sizeof(a2dp_ldac);
|
||||
}
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
ldac_frequencies[] = {
|
||||
{ LDACBT_SAMPLING_FREQ_044100, 44100, 3 },
|
||||
{ LDACBT_SAMPLING_FREQ_048000, 48000, 2 },
|
||||
|
|
@ -105,16 +105,16 @@ ldac_frequencies[] = {
|
|||
{ LDACBT_SAMPLING_FREQ_096000, 96000, 0 },
|
||||
};
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
ldac_channel_modes[] = {
|
||||
{ LDACBT_CHANNEL_MODE_STEREO, 2, 2 },
|
||||
{ LDACBT_CHANNEL_MODE_DUAL_CHANNEL, 2, 1 },
|
||||
{ LDACBT_CHANNEL_MODE_MONO, 1, 0 },
|
||||
};
|
||||
|
||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_ldac_t conf;
|
||||
|
|
@ -129,7 +129,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
codec->vendor.codec_id != conf.info.codec_id)
|
||||
return -ENOTSUP;
|
||||
|
||||
if ((i = a2dp_codec_select_config(ldac_frequencies,
|
||||
if ((i = media_codec_select_config(ldac_frequencies,
|
||||
SPA_N_ELEMENTS(ldac_frequencies),
|
||||
conf.frequency,
|
||||
info ? info->rate : A2DP_CODEC_DEFAULT_RATE
|
||||
|
|
@ -137,7 +137,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return -ENOTSUP;
|
||||
conf.frequency = ldac_frequencies[i].config;
|
||||
|
||||
if ((i = a2dp_codec_select_config(ldac_channel_modes,
|
||||
if ((i = media_codec_select_config(ldac_channel_modes,
|
||||
SPA_N_ELEMENTS(ldac_channel_modes),
|
||||
conf.channel_mode,
|
||||
info ? info->channels : A2DP_CODEC_DEFAULT_CHANNELS
|
||||
|
|
@ -150,7 +150,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(conf);
|
||||
}
|
||||
|
||||
static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -284,7 +284,7 @@ static int string_to_eqmid(const char * eqmid)
|
|||
return LDACBT_EQMID_AUTO;
|
||||
}
|
||||
|
||||
static void *codec_init_props(const struct a2dp_codec *codec, uint32_t flags, const struct spa_dict *settings)
|
||||
static void *codec_init_props(const struct media_codec *codec, uint32_t flags, const struct spa_dict *settings)
|
||||
{
|
||||
struct props *p = calloc(1, sizeof(struct props));
|
||||
const char *str;
|
||||
|
|
@ -385,7 +385,7 @@ static int codec_set_props(void *props, const struct spa_pod *param)
|
|||
return prev_eqmid != p->eqmid;
|
||||
}
|
||||
|
||||
static void *codec_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *codec_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -570,7 +570,7 @@ static int codec_encode(void *data,
|
|||
return src_used;
|
||||
}
|
||||
|
||||
const struct a2dp_codec a2dp_codec_ldac = {
|
||||
const struct media_codec a2dp_codec_ldac = {
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_LDAC,
|
||||
.codec_id = A2DP_CODEC_VENDOR,
|
||||
.vendor = { .vendor_id = LDAC_VENDOR_ID,
|
||||
|
|
@ -598,7 +598,7 @@ const struct a2dp_codec a2dp_codec_ldac = {
|
|||
.increase_bitpool = codec_increase_bitpool,
|
||||
};
|
||||
|
||||
A2DP_CODEC_EXPORT_DEF(
|
||||
MEDIA_CODEC_EXPORT_DEF(
|
||||
"ldac",
|
||||
&a2dp_codec_ldac
|
||||
);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
#include <opus_multistream.h>
|
||||
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
static struct spa_log *log;
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.codecs.opus");
|
||||
|
|
@ -395,7 +395,7 @@ static void parse_settings(struct props *props, const struct spa_dict *settings)
|
|||
props->bidi_application = OPUS_APPLICATION_RESTRICTED_LOWDELAY;
|
||||
}
|
||||
|
||||
static int set_channel_conf(const struct a2dp_codec *codec, a2dp_opus_05_t *caps, const struct props *props)
|
||||
static int set_channel_conf(const struct media_codec *codec, a2dp_opus_05_t *caps, const struct props *props)
|
||||
{
|
||||
/*
|
||||
* Predefined codec profiles
|
||||
|
|
@ -469,7 +469,7 @@ static int set_channel_conf(const struct a2dp_codec *codec, a2dp_opus_05_t *caps
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void get_default_bitrates(const struct a2dp_codec *codec, bool bidi, int *min, int *max, int *init)
|
||||
static void get_default_bitrates(const struct media_codec *codec, bool bidi, int *min, int *max, int *init)
|
||||
{
|
||||
int tmp;
|
||||
|
||||
|
|
@ -514,7 +514,7 @@ static void get_default_bitrates(const struct a2dp_codec *codec, bool bidi, int
|
|||
};
|
||||
}
|
||||
|
||||
static int get_mapping(const struct a2dp_codec *codec, const a2dp_opus_05_direction_t *conf,
|
||||
static int get_mapping(const struct media_codec *codec, const a2dp_opus_05_direction_t *conf,
|
||||
bool use_surround_encoder, uint8_t *streams_ret, uint8_t *coupled_streams_ret,
|
||||
const uint8_t **surround_mapping, uint32_t *positions)
|
||||
{
|
||||
|
|
@ -576,7 +576,7 @@ static int get_mapping(const struct a2dp_codec *codec, const a2dp_opus_05_direct
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_fill_caps(const struct media_codec *codec, uint32_t flags,
|
||||
uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_opus_05_t a2dp_opus_05 = {
|
||||
|
|
@ -613,9 +613,9 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(a2dp_opus_05);
|
||||
}
|
||||
|
||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *global_settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
struct props props;
|
||||
|
|
@ -715,8 +715,8 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(conf);
|
||||
}
|
||||
|
||||
static int codec_caps_preference_cmp(const struct a2dp_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct a2dp_codec_audio_info *info,
|
||||
static int codec_caps_preference_cmp(const struct media_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *global_settings)
|
||||
{
|
||||
a2dp_opus_05_t conf1, conf2, cap1, cap2;
|
||||
|
|
@ -768,12 +768,12 @@ static int codec_caps_preference_cmp(const struct a2dp_codec *codec, uint32_t fl
|
|||
#undef PREFER_BOOL
|
||||
}
|
||||
|
||||
static bool is_duplex_codec(const struct a2dp_codec *codec)
|
||||
static bool is_duplex_codec(const struct media_codec *codec)
|
||||
{
|
||||
return codec->id == 0;
|
||||
}
|
||||
|
||||
static bool use_surround_encoder(const struct a2dp_codec *codec, bool is_sink)
|
||||
static bool use_surround_encoder(const struct media_codec *codec, bool is_sink)
|
||||
{
|
||||
if (codec->id == SPA_BLUETOOTH_AUDIO_CODEC_OPUS_05_PRO)
|
||||
return false;
|
||||
|
|
@ -784,11 +784,11 @@ static bool use_surround_encoder(const struct a2dp_codec *codec, bool is_sink)
|
|||
return !is_sink;
|
||||
}
|
||||
|
||||
static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
const bool surround_encoder = use_surround_encoder(codec, flags & A2DP_CODEC_FLAG_SINK);
|
||||
const bool surround_encoder = use_surround_encoder(codec, flags & MEDIA_CODEC_FLAG_SINK);
|
||||
a2dp_opus_05_t conf;
|
||||
a2dp_opus_05_direction_t *dir;
|
||||
struct spa_pod_frame f[1];
|
||||
|
|
@ -823,11 +823,11 @@ static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return *param == NULL ? -EIO : 1;
|
||||
}
|
||||
|
||||
static int codec_validate_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_validate_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
struct spa_audio_info *info)
|
||||
{
|
||||
const bool surround_encoder = use_surround_encoder(codec, flags & A2DP_CODEC_FLAG_SINK);
|
||||
const bool surround_encoder = use_surround_encoder(codec, flags & MEDIA_CODEC_FLAG_SINK);
|
||||
const a2dp_opus_05_direction_t *dir1, *dir2;
|
||||
const a2dp_opus_05_t *conf;
|
||||
|
||||
|
|
@ -898,7 +898,7 @@ static int parse_frame_dms(int bitfield)
|
|||
}
|
||||
}
|
||||
|
||||
static void *codec_init_props(const struct a2dp_codec *codec, uint32_t flags, const struct spa_dict *settings)
|
||||
static void *codec_init_props(const struct media_codec *codec, uint32_t flags, const struct spa_dict *settings)
|
||||
{
|
||||
struct props *p;
|
||||
|
||||
|
|
@ -919,11 +919,11 @@ static void codec_clear_props(void *props)
|
|||
free(props);
|
||||
}
|
||||
|
||||
static void *codec_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *codec_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
const bool surround_encoder = use_surround_encoder(codec, flags & A2DP_CODEC_FLAG_SINK);
|
||||
const bool surround_encoder = use_surround_encoder(codec, flags & MEDIA_CODEC_FLAG_SINK);
|
||||
a2dp_opus_05_t *conf = config;
|
||||
a2dp_opus_05_direction_t *dir;
|
||||
struct impl *this = NULL;
|
||||
|
|
@ -1380,21 +1380,21 @@ static void codec_set_log(struct spa_log *global_log)
|
|||
.start_decode = codec_start_decode, \
|
||||
.decode = codec_decode
|
||||
|
||||
const struct a2dp_codec a2dp_codec_opus_05 = {
|
||||
const struct media_codec a2dp_codec_opus_05 = {
|
||||
OPUS_05_COMMON_FULL_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_OPUS_05,
|
||||
.name = "opus_05",
|
||||
.description = "Opus",
|
||||
};
|
||||
|
||||
const struct a2dp_codec a2dp_codec_opus_05_51 = {
|
||||
const struct media_codec a2dp_codec_opus_05_51 = {
|
||||
OPUS_05_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_OPUS_05_51,
|
||||
.name = "opus_05_51",
|
||||
.description = "Opus 5.1 Surround",
|
||||
};
|
||||
|
||||
const struct a2dp_codec a2dp_codec_opus_05_71 = {
|
||||
const struct media_codec a2dp_codec_opus_05_71 = {
|
||||
OPUS_05_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_OPUS_05_71,
|
||||
.name = "opus_05_71",
|
||||
|
|
@ -1402,14 +1402,14 @@ const struct a2dp_codec a2dp_codec_opus_05_71 = {
|
|||
};
|
||||
|
||||
/* Bidi return channel codec: doesn't have endpoints */
|
||||
const struct a2dp_codec a2dp_codec_opus_05_return = {
|
||||
const struct media_codec a2dp_codec_opus_05_return = {
|
||||
OPUS_05_COMMON_FULL_DEFS,
|
||||
.id = 0,
|
||||
.name = "opus_05_duplex_bidi",
|
||||
.description = "Opus Duplex Bidi channel",
|
||||
};
|
||||
|
||||
const struct a2dp_codec a2dp_codec_opus_05_duplex = {
|
||||
const struct media_codec a2dp_codec_opus_05_duplex = {
|
||||
OPUS_05_COMMON_FULL_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_OPUS_05_DUPLEX,
|
||||
.name = "opus_05_duplex",
|
||||
|
|
@ -1417,7 +1417,7 @@ const struct a2dp_codec a2dp_codec_opus_05_duplex = {
|
|||
.duplex_codec = &a2dp_codec_opus_05_return,
|
||||
};
|
||||
|
||||
const struct a2dp_codec a2dp_codec_opus_05_pro = {
|
||||
const struct media_codec a2dp_codec_opus_05_pro = {
|
||||
OPUS_05_COMMON_DEFS,
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_OPUS_05_PRO,
|
||||
.name = "opus_05_pro",
|
||||
|
|
@ -1427,7 +1427,7 @@ const struct a2dp_codec a2dp_codec_opus_05_pro = {
|
|||
.duplex_codec = &a2dp_codec_opus_05_return,
|
||||
};
|
||||
|
||||
A2DP_CODEC_EXPORT_DEF(
|
||||
MEDIA_CODEC_EXPORT_DEF(
|
||||
"opus",
|
||||
&a2dp_codec_opus_05,
|
||||
&a2dp_codec_opus_05_51,
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
#include <sbc/sbc.h>
|
||||
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
#define MAX_FRAME_COUNT 16
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ struct impl {
|
|||
int max_bitpool;
|
||||
};
|
||||
|
||||
static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_fill_caps(const struct media_codec *codec, uint32_t flags,
|
||||
uint8_t caps[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
static const a2dp_sbc_t a2dp_sbc = {
|
||||
|
|
@ -121,7 +121,7 @@ static uint8_t default_bitpool(uint8_t freq, uint8_t mode, bool xq)
|
|||
}
|
||||
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
sbc_frequencies[] = {
|
||||
{ SBC_SAMPLING_FREQ_48000, 48000, 3 },
|
||||
{ SBC_SAMPLING_FREQ_44100, 44100, 2 },
|
||||
|
|
@ -129,13 +129,13 @@ sbc_frequencies[] = {
|
|||
{ SBC_SAMPLING_FREQ_16000, 16000, 0 },
|
||||
};
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
sbc_xq_frequencies[] = {
|
||||
{ SBC_SAMPLING_FREQ_44100, 44100, 1 },
|
||||
{ SBC_SAMPLING_FREQ_48000, 48000, 0 },
|
||||
};
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
sbc_channel_modes[] = {
|
||||
{ SBC_CHANNEL_MODE_JOINT_STEREO, 2, 3 },
|
||||
{ SBC_CHANNEL_MODE_STEREO, 2, 2 },
|
||||
|
|
@ -143,22 +143,22 @@ sbc_channel_modes[] = {
|
|||
{ SBC_CHANNEL_MODE_MONO, 1, 0 },
|
||||
};
|
||||
|
||||
static const struct a2dp_codec_config
|
||||
static const struct media_codec_config
|
||||
sbc_xq_channel_modes[] = {
|
||||
{ SBC_CHANNEL_MODE_DUAL_CHANNEL, 2, 2 },
|
||||
{ SBC_CHANNEL_MODE_JOINT_STEREO, 2, 1 },
|
||||
{ SBC_CHANNEL_MODE_STEREO, 2, 0 },
|
||||
};
|
||||
|
||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_select_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE])
|
||||
{
|
||||
a2dp_sbc_t conf;
|
||||
int bitpool, i;
|
||||
size_t n;
|
||||
const struct a2dp_codec_config *configs;
|
||||
const struct media_codec_config *configs;
|
||||
bool xq = false;
|
||||
|
||||
|
||||
|
|
@ -176,7 +176,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
configs = sbc_frequencies;
|
||||
n = SPA_N_ELEMENTS(sbc_frequencies);
|
||||
}
|
||||
if ((i = a2dp_codec_select_config(configs, n, conf.frequency,
|
||||
if ((i = media_codec_select_config(configs, n, conf.frequency,
|
||||
info ? info->rate : A2DP_CODEC_DEFAULT_RATE
|
||||
)) < 0)
|
||||
return -ENOTSUP;
|
||||
|
|
@ -189,7 +189,7 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
configs = sbc_channel_modes;
|
||||
n = SPA_N_ELEMENTS(sbc_channel_modes);
|
||||
}
|
||||
if ((i = a2dp_codec_select_config(configs, n, conf.channel_mode,
|
||||
if ((i = media_codec_select_config(configs, n, conf.channel_mode,
|
||||
info ? info->channels : A2DP_CODEC_DEFAULT_CHANNELS
|
||||
)) < 0)
|
||||
return -ENOTSUP;
|
||||
|
|
@ -229,8 +229,8 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
|
|||
return sizeof(conf);
|
||||
}
|
||||
|
||||
static int codec_caps_preference_cmp(const struct a2dp_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct a2dp_codec_audio_info *info, const struct spa_dict *global_settings)
|
||||
static int codec_caps_preference_cmp(const struct media_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct media_codec_audio_info *info, const struct spa_dict *global_settings)
|
||||
{
|
||||
a2dp_sbc_t conf1, conf2;
|
||||
a2dp_sbc_t *conf;
|
||||
|
|
@ -275,7 +275,7 @@ static int codec_caps_preference_cmp(const struct a2dp_codec *codec, uint32_t fl
|
|||
#undef PREFER_BOOL
|
||||
}
|
||||
|
||||
static int codec_validate_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_validate_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
struct spa_audio_info *info)
|
||||
{
|
||||
|
|
@ -356,7 +356,7 @@ static int codec_set_bitpool(struct impl *this, int bitpool)
|
|||
return this->sbc.bitpool;
|
||||
}
|
||||
|
||||
static int codec_enum_config(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static int codec_enum_config(const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *b, struct spa_pod **param)
|
||||
{
|
||||
|
|
@ -453,7 +453,7 @@ static int codec_get_block_size(void *data)
|
|||
return this->codesize;
|
||||
}
|
||||
|
||||
static void *codec_init(const struct a2dp_codec *codec, uint32_t flags,
|
||||
static void *codec_init(const struct media_codec *codec, uint32_t flags,
|
||||
void *config, size_t config_len, const struct spa_audio_info *info,
|
||||
void *props, size_t mtu)
|
||||
{
|
||||
|
|
@ -638,7 +638,7 @@ static int codec_decode(void *data,
|
|||
return res;
|
||||
}
|
||||
|
||||
const struct a2dp_codec a2dp_codec_sbc = {
|
||||
const struct media_codec a2dp_codec_sbc = {
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_SBC,
|
||||
.codec_id = A2DP_CODEC_SBC,
|
||||
.name = "sbc",
|
||||
|
|
@ -660,7 +660,7 @@ const struct a2dp_codec a2dp_codec_sbc = {
|
|||
.increase_bitpool = codec_increase_bitpool,
|
||||
};
|
||||
|
||||
const struct a2dp_codec a2dp_codec_sbc_xq = {
|
||||
const struct media_codec a2dp_codec_sbc_xq = {
|
||||
.id = SPA_BLUETOOTH_AUDIO_CODEC_SBC_XQ,
|
||||
.codec_id = A2DP_CODEC_SBC,
|
||||
.name = "sbc_xq",
|
||||
|
|
@ -682,7 +682,7 @@ const struct a2dp_codec a2dp_codec_sbc_xq = {
|
|||
.increase_bitpool = codec_increase_bitpool,
|
||||
};
|
||||
|
||||
A2DP_CODEC_EXPORT_DEF(
|
||||
MEDIA_CODEC_EXPORT_DEF(
|
||||
"sbc",
|
||||
&a2dp_codec_sbc,
|
||||
&a2dp_codec_sbc_xq
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -51,7 +51,7 @@
|
|||
#include <spa/debug/pod.h>
|
||||
|
||||
#include "defs.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.device");
|
||||
#undef SPA_LOG_TOPIC_DEFAULT
|
||||
|
|
@ -140,7 +140,7 @@ struct impl {
|
|||
unsigned int save_profile:1;
|
||||
uint32_t prev_bt_connected_profiles;
|
||||
|
||||
const struct a2dp_codec **supported_codecs;
|
||||
const struct media_codec **supported_codecs;
|
||||
size_t supported_codec_count;
|
||||
|
||||
struct dynamic_node dyn_a2dp_source;
|
||||
|
|
@ -167,9 +167,9 @@ static void init_node(struct impl *this, struct node *node, uint32_t id)
|
|||
}
|
||||
}
|
||||
|
||||
static void get_a2dp_codecs(struct impl *this, enum spa_bluetooth_audio_codec id, const struct a2dp_codec **codecs, size_t size)
|
||||
static void get_media_codecs(struct impl *this, enum spa_bluetooth_audio_codec id, const struct media_codec **codecs, size_t size)
|
||||
{
|
||||
const struct a2dp_codec * const *c;
|
||||
const struct media_codec * const *c;
|
||||
|
||||
spa_assert(size > 0);
|
||||
spa_assert(this->supported_codecs);
|
||||
|
|
@ -184,18 +184,18 @@ static void get_a2dp_codecs(struct impl *this, enum spa_bluetooth_audio_codec id
|
|||
*codecs = NULL;
|
||||
}
|
||||
|
||||
static const struct a2dp_codec *get_supported_a2dp_codec(struct impl *this, enum spa_bluetooth_audio_codec id, size_t *idx)
|
||||
static const struct media_codec *get_supported_media_codec(struct impl *this, enum spa_bluetooth_audio_codec id, size_t *idx)
|
||||
{
|
||||
const struct a2dp_codec *a2dp_codec = NULL;
|
||||
const struct media_codec *media_codec = NULL;
|
||||
size_t i;
|
||||
for (i = 0; i < this->supported_codec_count; ++i) {
|
||||
if (this->supported_codecs[i]->id == id) {
|
||||
a2dp_codec = this->supported_codecs[i];
|
||||
media_codec = this->supported_codecs[i];
|
||||
if (idx)
|
||||
*idx = i;
|
||||
}
|
||||
}
|
||||
return a2dp_codec;
|
||||
return media_codec;
|
||||
}
|
||||
|
||||
static unsigned int get_hfp_codec(enum spa_bluetooth_audio_codec id)
|
||||
|
|
@ -245,10 +245,10 @@ static const char *get_hfp_codec_name(unsigned int codec)
|
|||
|
||||
static const char *get_codec_name(struct spa_bt_transport *t, bool a2dp_duplex)
|
||||
{
|
||||
if (t->a2dp_codec != NULL) {
|
||||
if (a2dp_duplex && t->a2dp_codec->duplex_codec)
|
||||
return t->a2dp_codec->duplex_codec->name;
|
||||
return t->a2dp_codec->name;
|
||||
if (t->media_codec != NULL) {
|
||||
if (a2dp_duplex && t->media_codec->duplex_codec)
|
||||
return t->media_codec->duplex_codec->name;
|
||||
return t->media_codec->name;
|
||||
}
|
||||
return get_hfp_codec_name(t->codec);
|
||||
}
|
||||
|
|
@ -301,7 +301,7 @@ static void emit_info(struct impl *this, bool full);
|
|||
|
||||
static float get_soft_volume_boost(struct node *node)
|
||||
{
|
||||
const struct a2dp_codec *codec = node->transport ? node->transport->a2dp_codec : NULL;
|
||||
const struct media_codec *codec = node->transport ? node->transport->media_codec : NULL;
|
||||
|
||||
/*
|
||||
* For A2DP duplex, the duplex microphone channel sometimes does not appear
|
||||
|
|
@ -406,16 +406,16 @@ static const struct spa_bt_transport_events transport_events = {
|
|||
|
||||
static void get_channels(struct spa_bt_transport *t, bool a2dp_duplex, uint32_t *n_channels, uint32_t *channels)
|
||||
{
|
||||
const struct a2dp_codec *codec;
|
||||
const struct media_codec *codec;
|
||||
struct spa_audio_info info = { 0 };
|
||||
|
||||
if (!a2dp_duplex || !t->a2dp_codec || !t->a2dp_codec->duplex_codec) {
|
||||
if (!a2dp_duplex || !t->media_codec || !t->media_codec->duplex_codec) {
|
||||
*n_channels = t->n_channels;
|
||||
memcpy(channels, t->channels, t->n_channels * sizeof(uint32_t));
|
||||
return;
|
||||
}
|
||||
|
||||
codec = t->a2dp_codec->duplex_codec;
|
||||
codec = t->media_codec->duplex_codec;
|
||||
|
||||
if (!codec->validate_config ||
|
||||
codec->validate_config(codec, 0,
|
||||
|
|
@ -514,7 +514,7 @@ static struct spa_bt_transport *find_transport(struct impl *this, int profile, e
|
|||
|
||||
spa_list_for_each(t, &device->transport_list, device_link) {
|
||||
bool codec_ok = codec == 0 ||
|
||||
(t->a2dp_codec != NULL && t->a2dp_codec->id == codec) ||
|
||||
(t->media_codec != NULL && t->media_codec->id == codec) ||
|
||||
get_hfp_codec_id(t->codec) == codec;
|
||||
|
||||
if ((t->profile & device->connected_profiles) &&
|
||||
|
|
@ -679,13 +679,13 @@ static int emit_nodes(struct impl *this)
|
|||
if (this->bt_dev->connected_profiles & SPA_BT_PROFILE_A2DP_SOURCE) {
|
||||
t = find_transport(this, SPA_BT_PROFILE_A2DP_SOURCE, 0);
|
||||
if (t) {
|
||||
this->props.codec = t->a2dp_codec->id;
|
||||
this->props.codec = t->media_codec->id;
|
||||
emit_dynamic_node(&this->dyn_a2dp_source, this, t,
|
||||
2, SPA_NAME_API_BLUEZ5_A2DP_SOURCE, false);
|
||||
2, SPA_NAME_API_BLUEZ5_MEDIA_SOURCE, false);
|
||||
|
||||
if (t->a2dp_codec->duplex_codec) {
|
||||
if (t->media_codec->duplex_codec) {
|
||||
emit_dynamic_node(&this->dyn_a2dp_sink, this, t,
|
||||
3, SPA_NAME_API_BLUEZ5_A2DP_SINK, true);
|
||||
3, SPA_NAME_API_BLUEZ5_MEDIA_SINK, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -694,13 +694,13 @@ static int emit_nodes(struct impl *this)
|
|||
if (this->bt_dev->connected_profiles & SPA_BT_PROFILE_A2DP_SOURCE) {
|
||||
t = find_transport(this, SPA_BT_PROFILE_A2DP_SOURCE, 0);
|
||||
if (t) {
|
||||
this->props.codec = t->a2dp_codec->id;
|
||||
this->props.codec = t->media_codec->id;
|
||||
emit_dynamic_node(&this->dyn_a2dp_source, this, t,
|
||||
DEVICE_ID_SOURCE, SPA_NAME_API_BLUEZ5_A2DP_SOURCE, false);
|
||||
DEVICE_ID_SOURCE, SPA_NAME_API_BLUEZ5_MEDIA_SOURCE, false);
|
||||
|
||||
if (t->a2dp_codec->duplex_codec) {
|
||||
if (t->media_codec->duplex_codec) {
|
||||
emit_node(this, t,
|
||||
DEVICE_ID_SINK, SPA_NAME_API_BLUEZ5_A2DP_SINK, true);
|
||||
DEVICE_ID_SINK, SPA_NAME_API_BLUEZ5_MEDIA_SINK, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -708,17 +708,17 @@ static int emit_nodes(struct impl *this)
|
|||
if (this->bt_dev->connected_profiles & SPA_BT_PROFILE_A2DP_SINK) {
|
||||
t = find_transport(this, SPA_BT_PROFILE_A2DP_SINK, this->props.codec);
|
||||
if (t) {
|
||||
this->props.codec = t->a2dp_codec->id;
|
||||
emit_node(this, t, DEVICE_ID_SINK, SPA_NAME_API_BLUEZ5_A2DP_SINK, false);
|
||||
this->props.codec = t->media_codec->id;
|
||||
emit_node(this, t, DEVICE_ID_SINK, SPA_NAME_API_BLUEZ5_MEDIA_SOURCE, false);
|
||||
|
||||
if (t->a2dp_codec->duplex_codec) {
|
||||
if (t->media_codec->duplex_codec) {
|
||||
emit_node(this, t,
|
||||
DEVICE_ID_SOURCE, SPA_NAME_API_BLUEZ5_A2DP_SOURCE, true);
|
||||
DEVICE_ID_SOURCE, SPA_NAME_API_BLUEZ5_MEDIA_SINK, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (get_supported_a2dp_codec(this, this->props.codec, NULL) == NULL)
|
||||
if (get_supported_media_codec(this, this->props.codec, NULL) == NULL)
|
||||
this->props.codec = 0;
|
||||
break;
|
||||
case DEVICE_PROFILE_HSP_HFP:
|
||||
|
|
@ -818,13 +818,13 @@ static int set_profile(struct impl *this, uint32_t profile, enum spa_bluetooth_a
|
|||
*/
|
||||
if (profile == DEVICE_PROFILE_A2DP && !(this->bt_dev->connected_profiles & SPA_BT_PROFILE_A2DP_SOURCE)) {
|
||||
int ret;
|
||||
const struct a2dp_codec *codecs[64];
|
||||
const struct media_codec *codecs[64];
|
||||
|
||||
get_a2dp_codecs(this, codec, codecs, SPA_N_ELEMENTS(codecs));
|
||||
get_media_codecs(this, codec, codecs, SPA_N_ELEMENTS(codecs));
|
||||
|
||||
this->switching_codec = true;
|
||||
|
||||
ret = spa_bt_device_ensure_a2dp_codec(this->bt_dev, codecs);
|
||||
ret = spa_bt_device_ensure_media_codec(this->bt_dev, codecs);
|
||||
if (ret < 0) {
|
||||
if (ret != -ENOTSUP)
|
||||
spa_log_error(this->log, "failed to switch codec (%d), setting basic profile", ret);
|
||||
|
|
@ -914,7 +914,7 @@ static void profiles_changed(void *userdata, uint32_t prev_profiles, uint32_t pr
|
|||
|
||||
if (this->bt_dev->connected_profiles & SPA_BT_PROFILE_A2DP_SINK) {
|
||||
free(this->supported_codecs);
|
||||
this->supported_codecs = spa_bt_device_get_supported_a2dp_codecs(
|
||||
this->supported_codecs = spa_bt_device_get_supported_media_codecs(
|
||||
this->bt_dev, &this->supported_codec_count, true);
|
||||
}
|
||||
|
||||
|
|
@ -930,7 +930,7 @@ static void profiles_changed(void *userdata, uint32_t prev_profiles, uint32_t pr
|
|||
nodes_changed);
|
||||
break;
|
||||
case DEVICE_PROFILE_A2DP:
|
||||
if (get_supported_a2dp_codec(this, this->props.codec, NULL) == NULL)
|
||||
if (get_supported_media_codec(this, this->props.codec, NULL) == NULL)
|
||||
this->props.codec = 0;
|
||||
nodes_changed = (connected_change & (SPA_BT_PROFILE_A2DP_SINK |
|
||||
SPA_BT_PROFILE_A2DP_SOURCE));
|
||||
|
|
@ -1019,15 +1019,15 @@ static uint32_t profile_direction_mask(struct impl *this, uint32_t index, enum s
|
|||
struct spa_bt_device *device = this->bt_dev;
|
||||
uint32_t mask;
|
||||
bool have_output = false, have_input = false;
|
||||
const struct a2dp_codec *a2dp_codec;
|
||||
const struct media_codec *media_codec;
|
||||
|
||||
switch (index) {
|
||||
case DEVICE_PROFILE_A2DP:
|
||||
if (device->connected_profiles & SPA_BT_PROFILE_A2DP_SINK)
|
||||
have_output = true;
|
||||
|
||||
a2dp_codec = get_supported_a2dp_codec(this, codec, NULL);
|
||||
if (a2dp_codec && a2dp_codec->duplex_codec)
|
||||
media_codec = get_supported_media_codec(this, codec, NULL);
|
||||
if (media_codec && media_codec->duplex_codec)
|
||||
have_input = true;
|
||||
break;
|
||||
case DEVICE_PROFILE_HSP_HFP:
|
||||
|
|
@ -1129,7 +1129,7 @@ static void set_initial_profile(struct impl *this)
|
|||
|
||||
if (this->supported_codecs)
|
||||
free(this->supported_codecs);
|
||||
this->supported_codecs = spa_bt_device_get_supported_a2dp_codecs(
|
||||
this->supported_codecs = spa_bt_device_get_supported_media_codecs(
|
||||
this->bt_dev, &this->supported_codec_count, true);
|
||||
|
||||
/* Prefer A2DP, then HFP, then null, but select AG if the device
|
||||
|
|
@ -1152,7 +1152,7 @@ static void set_initial_profile(struct impl *this)
|
|||
if (t) {
|
||||
this->profile = (i == SPA_BT_PROFILE_A2DP_SOURCE) ?
|
||||
DEVICE_PROFILE_AG : DEVICE_PROFILE_A2DP;
|
||||
this->props.codec = t->a2dp_codec->id;
|
||||
this->props.codec = t->media_codec->id;
|
||||
spa_log_debug(this->log, "initial profile A2DP profile:%d codec:%d",
|
||||
this->profile, this->props.codec);
|
||||
return;
|
||||
|
|
@ -1213,19 +1213,19 @@ static struct spa_pod *build_profile(struct impl *this, struct spa_pod_builder *
|
|||
n_sink++;
|
||||
if (codec) {
|
||||
size_t idx;
|
||||
const struct a2dp_codec *a2dp_codec = get_supported_a2dp_codec(this, codec, &idx);
|
||||
if (a2dp_codec == NULL) {
|
||||
const struct media_codec *media_codec = get_supported_media_codec(this, codec, &idx);
|
||||
if (media_codec == NULL) {
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
name_and_codec = spa_aprintf("%s-%s", name, a2dp_codec->name);
|
||||
name_and_codec = spa_aprintf("%s-%s", name, media_codec->name);
|
||||
name = name_and_codec;
|
||||
if (profile == SPA_BT_PROFILE_A2DP_SINK && !a2dp_codec->duplex_codec) {
|
||||
if (profile == SPA_BT_PROFILE_A2DP_SINK && !media_codec->duplex_codec) {
|
||||
desc_and_codec = spa_aprintf(_("High Fidelity Playback (A2DP Sink, codec %s)"),
|
||||
a2dp_codec->description);
|
||||
media_codec->description);
|
||||
} else {
|
||||
desc_and_codec = spa_aprintf(_("High Fidelity Duplex (A2DP Source/Sink, codec %s)"),
|
||||
a2dp_codec->description);
|
||||
media_codec->description);
|
||||
|
||||
}
|
||||
desc = desc_and_codec;
|
||||
|
|
@ -1560,7 +1560,7 @@ static struct spa_pod *build_route(struct impl *this, struct spa_pod_builder *b,
|
|||
return spa_pod_builder_pop(b, &f[0]);
|
||||
}
|
||||
|
||||
static bool iterate_supported_a2dp_codecs(struct impl *this, int *j, const struct a2dp_codec **codec)
|
||||
static bool iterate_supported_media_codecs(struct impl *this, int *j, const struct media_codec **codec)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
@ -1582,12 +1582,12 @@ static struct spa_pod *build_prop_info(struct impl *this, struct spa_pod_builder
|
|||
{
|
||||
struct spa_pod_frame f[2];
|
||||
struct spa_pod_choice *choice;
|
||||
const struct a2dp_codec *codec;
|
||||
const struct media_codec *codec;
|
||||
size_t n;
|
||||
int j;
|
||||
|
||||
#define FOR_EACH_A2DP_CODEC(j, codec) \
|
||||
for (j = -1; iterate_supported_a2dp_codecs(this, &j, &codec);)
|
||||
for (j = -1; iterate_supported_media_codecs(this, &j, &codec);)
|
||||
#define FOR_EACH_HFP_CODEC(j) \
|
||||
for (j = HFP_AUDIO_CODEC_MSBC; j >= HFP_AUDIO_CODEC_CVSD; --j) \
|
||||
if (spa_bt_device_supports_hfp_codec(this->bt_dev, j) == 1)
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
#include "defs.h"
|
||||
#include "codec-loader.h"
|
||||
|
||||
#define A2DP_CODEC_LIB_BASE "bluez5/libspa-codec-bluez5-"
|
||||
#define MEDIA_CODEC_LIB_BASE "bluez5/libspa-codec-bluez5-"
|
||||
|
||||
/* AVDTP allows 0x3E endpoints, can't have more codecs than that */
|
||||
#define MAX_CODECS 0x3E
|
||||
|
|
@ -40,7 +40,7 @@ static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.codecs");
|
|||
#define SPA_LOG_TOPIC_DEFAULT &log_topic
|
||||
|
||||
struct impl {
|
||||
const struct a2dp_codec *codecs[MAX_CODECS + 1];
|
||||
const struct media_codec *codecs[MAX_CODECS + 1];
|
||||
struct spa_handle *handles[MAX_HANDLES];
|
||||
size_t n_codecs;
|
||||
size_t n_handles;
|
||||
|
|
@ -48,7 +48,7 @@ struct impl {
|
|||
struct spa_log *log;
|
||||
};
|
||||
|
||||
static int codec_order(const struct a2dp_codec *c)
|
||||
static int codec_order(const struct media_codec *c)
|
||||
{
|
||||
static const enum spa_bluetooth_audio_codec order[] = {
|
||||
SPA_BLUETOOTH_AUDIO_CODEC_LDAC,
|
||||
|
|
@ -78,8 +78,8 @@ static int codec_order(const struct a2dp_codec *c)
|
|||
|
||||
static int codec_order_cmp(const void *a, const void *b)
|
||||
{
|
||||
const struct a2dp_codec * const *ca = a;
|
||||
const struct a2dp_codec * const *cb = b;
|
||||
const struct media_codec * const *ca = a;
|
||||
const struct media_codec * const *cb = b;
|
||||
int ia = codec_order(*ca);
|
||||
int ib = codec_order(*cb);
|
||||
if (*ca == *cb)
|
||||
|
|
@ -87,7 +87,7 @@ static int codec_order_cmp(const void *a, const void *b)
|
|||
return (ia == ib) ? (*ca < *cb ? -1 : 1) : ia - ib;
|
||||
}
|
||||
|
||||
static int load_a2dp_codecs_from(struct impl *impl, const char *factory_name, const char *libname)
|
||||
static int load_media_codecs_from(struct impl *impl, const char *factory_name, const char *libname)
|
||||
{
|
||||
struct spa_handle *handle = NULL;
|
||||
void *iface;
|
||||
|
|
@ -108,7 +108,7 @@ static int load_a2dp_codecs_from(struct impl *impl, const char *factory_name, co
|
|||
|
||||
spa_log_debug(impl->log, "loading codecs from %s", factory_name);
|
||||
|
||||
if ((res = spa_handle_get_interface(handle, SPA_TYPE_INTERFACE_Bluez5CodecA2DP, &iface)) < 0) {
|
||||
if ((res = spa_handle_get_interface(handle, SPA_TYPE_INTERFACE_Bluez5CodecMedia, &iface)) < 0) {
|
||||
spa_log_warn(impl->log, "Bluetooth codec plugin %s has no codec interface",
|
||||
factory_name);
|
||||
goto fail;
|
||||
|
|
@ -116,15 +116,15 @@ static int load_a2dp_codecs_from(struct impl *impl, const char *factory_name, co
|
|||
|
||||
bluez5_codec_a2dp = iface;
|
||||
|
||||
if (bluez5_codec_a2dp->iface.version != SPA_VERSION_BLUEZ5_CODEC_A2DP) {
|
||||
if (bluez5_codec_a2dp->iface.version != SPA_VERSION_BLUEZ5_CODEC_MEDIA) {
|
||||
spa_log_warn(impl->log, "codec plugin %s has incompatible ABI version (%d != %d)",
|
||||
factory_name, bluez5_codec_a2dp->iface.version, SPA_VERSION_BLUEZ5_CODEC_A2DP);
|
||||
factory_name, bluez5_codec_a2dp->iface.version, SPA_VERSION_BLUEZ5_CODEC_MEDIA);
|
||||
res = -ENOENT;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (i = 0; bluez5_codec_a2dp->codecs[i]; ++i) {
|
||||
const struct a2dp_codec *c = bluez5_codec_a2dp->codecs[i];
|
||||
const struct media_codec *c = bluez5_codec_a2dp->codecs[i];
|
||||
size_t j;
|
||||
|
||||
if (impl->n_codecs >= MAX_CODECS) {
|
||||
|
|
@ -134,14 +134,14 @@ static int load_a2dp_codecs_from(struct impl *impl, const char *factory_name, co
|
|||
|
||||
/* Don't load duplicate endpoints */
|
||||
for (j = 0; j < impl->n_codecs; ++j) {
|
||||
const struct a2dp_codec *c2 = impl->codecs[j];
|
||||
const struct media_codec *c2 = impl->codecs[j];
|
||||
const char *ep1 = c->endpoint_name ? c->endpoint_name : c->name;
|
||||
const char *ep2 = c2->endpoint_name ? c2->endpoint_name : c2->name;
|
||||
if (spa_streq(ep1, ep2))
|
||||
goto next_codec;
|
||||
}
|
||||
|
||||
spa_log_debug(impl->log, "loaded A2DP codec %s from %s", c->name, factory_name);
|
||||
spa_log_debug(impl->log, "loaded media codec %s from %s", c->name, factory_name);
|
||||
|
||||
if (c->set_log)
|
||||
c->set_log(impl->log);
|
||||
|
|
@ -166,22 +166,22 @@ fail:
|
|||
return res;
|
||||
}
|
||||
|
||||
const struct a2dp_codec * const *load_a2dp_codecs(struct spa_plugin_loader *loader, struct spa_log *log)
|
||||
const struct media_codec * const *load_media_codecs(struct spa_plugin_loader *loader, struct spa_log *log)
|
||||
{
|
||||
struct impl *impl;
|
||||
bool has_sbc;
|
||||
size_t i;
|
||||
const struct { const char *factory; const char *lib; } plugins[] = {
|
||||
#define A2DP_CODEC_FACTORY_LIB(basename) \
|
||||
{ A2DP_CODEC_FACTORY_NAME(basename), A2DP_CODEC_LIB_BASE basename }
|
||||
A2DP_CODEC_FACTORY_LIB("aac"),
|
||||
A2DP_CODEC_FACTORY_LIB("aptx"),
|
||||
A2DP_CODEC_FACTORY_LIB("faststream"),
|
||||
A2DP_CODEC_FACTORY_LIB("ldac"),
|
||||
A2DP_CODEC_FACTORY_LIB("sbc"),
|
||||
A2DP_CODEC_FACTORY_LIB("lc3plus"),
|
||||
A2DP_CODEC_FACTORY_LIB("opus")
|
||||
#undef A2DP_CODEC_FACTORY_LIB
|
||||
#define MEDIA_CODEC_FACTORY_LIB(basename) \
|
||||
{ MEDIA_CODEC_FACTORY_NAME(basename), MEDIA_CODEC_LIB_BASE basename }
|
||||
MEDIA_CODEC_FACTORY_LIB("aac"),
|
||||
MEDIA_CODEC_FACTORY_LIB("aptx"),
|
||||
MEDIA_CODEC_FACTORY_LIB("faststream"),
|
||||
MEDIA_CODEC_FACTORY_LIB("ldac"),
|
||||
MEDIA_CODEC_FACTORY_LIB("sbc"),
|
||||
MEDIA_CODEC_FACTORY_LIB("lc3plus"),
|
||||
MEDIA_CODEC_FACTORY_LIB("opus")
|
||||
#undef MEDIA_CODEC_FACTORY_LIB
|
||||
};
|
||||
|
||||
impl = calloc(sizeof(struct impl), 1);
|
||||
|
|
@ -194,7 +194,7 @@ const struct a2dp_codec * const *load_a2dp_codecs(struct spa_plugin_loader *load
|
|||
spa_log_topic_init(impl->log, &log_topic);
|
||||
|
||||
for (i = 0; i < SPA_N_ELEMENTS(plugins); ++i)
|
||||
load_a2dp_codecs_from(impl, plugins[i].factory, plugins[i].lib);
|
||||
load_media_codecs_from(impl, plugins[i].factory, plugins[i].lib);
|
||||
|
||||
has_sbc = false;
|
||||
for (i = 0; i < impl->n_codecs; ++i)
|
||||
|
|
@ -203,19 +203,19 @@ const struct a2dp_codec * const *load_a2dp_codecs(struct spa_plugin_loader *load
|
|||
|
||||
if (!has_sbc) {
|
||||
spa_log_error(impl->log, "failed to load A2DP SBC codec from plugins");
|
||||
free_a2dp_codecs(impl->codecs);
|
||||
free_media_codecs(impl->codecs);
|
||||
errno = ENOENT;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qsort(impl->codecs, impl->n_codecs, sizeof(const struct a2dp_codec *), codec_order_cmp);
|
||||
qsort(impl->codecs, impl->n_codecs, sizeof(const struct media_codec *), codec_order_cmp);
|
||||
|
||||
return impl->codecs;
|
||||
}
|
||||
|
||||
void free_a2dp_codecs(const struct a2dp_codec * const *a2dp_codecs)
|
||||
void free_media_codecs(const struct media_codec * const *media_codecs)
|
||||
{
|
||||
struct impl *impl = SPA_CONTAINER_OF(a2dp_codecs, struct impl, codecs);
|
||||
struct impl *impl = SPA_CONTAINER_OF(media_codecs, struct impl, codecs);
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < impl->n_handles; ++i)
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@
|
|||
#include <spa/support/plugin-loader.h>
|
||||
|
||||
#include "a2dp-codec-caps.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
const struct a2dp_codec * const *load_a2dp_codecs(struct spa_plugin_loader *loader, struct spa_log *log);
|
||||
void free_a2dp_codecs(const struct a2dp_codec * const *a2dp_codecs);
|
||||
const struct media_codec * const *load_media_codecs(struct spa_plugin_loader *loader, struct spa_log *log);
|
||||
void free_media_codecs(const struct media_codec * const *media_codecs);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -158,9 +158,9 @@ extern "C" {
|
|||
#define HFP_AUDIO_CODEC_CVSD 0x01
|
||||
#define HFP_AUDIO_CODEC_MSBC 0x02
|
||||
|
||||
#define A2DP_OBJECT_MANAGER_PATH "/MediaEndpoint"
|
||||
#define A2DP_SINK_ENDPOINT A2DP_OBJECT_MANAGER_PATH "/A2DPSink"
|
||||
#define A2DP_SOURCE_ENDPOINT A2DP_OBJECT_MANAGER_PATH "/A2DPSource"
|
||||
#define MEDIA_OBJECT_MANAGER_PATH "/MediaEndpoint"
|
||||
#define A2DP_SINK_ENDPOINT MEDIA_OBJECT_MANAGER_PATH "/A2DPSink"
|
||||
#define A2DP_SOURCE_ENDPOINT MEDIA_OBJECT_MANAGER_PATH "/A2DPSource"
|
||||
|
||||
#define SPA_BT_UNKNOWN_DELAY 0
|
||||
|
||||
|
|
@ -412,7 +412,7 @@ static inline enum spa_bt_form_factor spa_bt_form_factor_from_class(uint32_t blu
|
|||
return SPA_BT_FORM_FACTOR_UNKNOWN;
|
||||
}
|
||||
|
||||
struct spa_bt_a2dp_codec_switch;
|
||||
struct spa_bt_media_codec_switch;
|
||||
struct spa_bt_transport;
|
||||
|
||||
struct spa_bt_device_events {
|
||||
|
|
@ -482,16 +482,16 @@ struct spa_bt_device {
|
|||
DBusPendingCall *battery_pending_call;
|
||||
};
|
||||
|
||||
struct a2dp_codec;
|
||||
struct media_codec;
|
||||
|
||||
struct spa_bt_device *spa_bt_device_find(struct spa_bt_monitor *monitor, const char *path);
|
||||
struct spa_bt_device *spa_bt_device_find_by_address(struct spa_bt_monitor *monitor, const char *remote_address, const char *local_address);
|
||||
int spa_bt_device_add_profile(struct spa_bt_device *device, enum spa_bt_profile profile);
|
||||
int spa_bt_device_connect_profile(struct spa_bt_device *device, enum spa_bt_profile profile);
|
||||
int spa_bt_device_check_profiles(struct spa_bt_device *device, bool force);
|
||||
int spa_bt_device_ensure_a2dp_codec(struct spa_bt_device *device, const struct a2dp_codec * const *codecs);
|
||||
bool spa_bt_device_supports_a2dp_codec(struct spa_bt_device *device, const struct a2dp_codec *codec, bool sink);
|
||||
const struct a2dp_codec **spa_bt_device_get_supported_a2dp_codecs(struct spa_bt_device *device, size_t *count, bool sink);
|
||||
int spa_bt_device_ensure_media_codec(struct spa_bt_device *device, const struct media_codec * const *codecs);
|
||||
bool spa_bt_device_supports_media_codec(struct spa_bt_device *device, const struct media_codec *codec, bool sink);
|
||||
const struct media_codec **spa_bt_device_get_supported_media_codecs(struct spa_bt_device *device, size_t *count, bool sink);
|
||||
int spa_bt_device_ensure_hfp_codec(struct spa_bt_device *device, unsigned int codec);
|
||||
int spa_bt_device_supports_hfp_codec(struct spa_bt_device *device, unsigned int codec);
|
||||
int spa_bt_device_release_transports(struct spa_bt_device *device);
|
||||
|
|
@ -570,7 +570,7 @@ struct spa_bt_transport {
|
|||
struct spa_list device_link;
|
||||
enum spa_bt_profile profile;
|
||||
enum spa_bt_transport_state state;
|
||||
const struct a2dp_codec *a2dp_codec;
|
||||
const struct media_codec *media_codec;
|
||||
unsigned int codec;
|
||||
void *configuration;
|
||||
int configuration_len;
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@
|
|||
|
||||
#include <spa/utils/string.h>
|
||||
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
int a2dp_codec_select_config(const struct a2dp_codec_config configs[], size_t n,
|
||||
int media_codec_select_config(const struct media_codec_config configs[], size_t n,
|
||||
uint32_t cap, int preferred_value)
|
||||
{
|
||||
size_t i;
|
||||
|
|
@ -60,9 +60,9 @@ int a2dp_codec_select_config(const struct a2dp_codec_config configs[], size_t n,
|
|||
return res;
|
||||
}
|
||||
|
||||
bool a2dp_codec_check_caps(const struct a2dp_codec *codec, unsigned int codec_id,
|
||||
bool media_codec_check_caps(const struct media_codec *codec, unsigned int codec_id,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *global_settings)
|
||||
{
|
||||
uint8_t config[A2DP_MAX_CAPS_SIZE];
|
||||
|
|
@ -98,7 +98,7 @@ impl_get_interface(struct spa_handle *handle, const char *type, void **interface
|
|||
|
||||
this = (struct impl *) handle;
|
||||
|
||||
if (spa_streq(type, SPA_TYPE_INTERFACE_Bluez5CodecA2DP))
|
||||
if (spa_streq(type, SPA_TYPE_INTERFACE_Bluez5CodecMedia))
|
||||
*interface = &this->bluez5_codec_a2dp;
|
||||
else
|
||||
return -ENOENT;
|
||||
|
|
@ -136,10 +136,10 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
|
||||
this = (struct impl *) handle;
|
||||
|
||||
this->bluez5_codec_a2dp.codecs = codec_plugin_a2dp_codecs;
|
||||
this->bluez5_codec_a2dp.codecs = codec_plugin_media_codecs;
|
||||
this->bluez5_codec_a2dp.iface = SPA_INTERFACE_INIT(
|
||||
SPA_TYPE_INTERFACE_Bluez5CodecA2DP,
|
||||
SPA_VERSION_BLUEZ5_CODEC_A2DP,
|
||||
SPA_TYPE_INTERFACE_Bluez5CodecMedia,
|
||||
SPA_VERSION_BLUEZ5_CODEC_MEDIA,
|
||||
NULL,
|
||||
this);
|
||||
|
||||
|
|
@ -147,7 +147,7 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
}
|
||||
|
||||
static const struct spa_interface_info impl_interfaces[] = {
|
||||
{SPA_TYPE_INTERFACE_Bluez5CodecA2DP,},
|
||||
{SPA_TYPE_INTERFACE_Bluez5CodecMedia,},
|
||||
};
|
||||
|
||||
static int
|
||||
|
|
@ -42,28 +42,28 @@
|
|||
* when any of the structs or semantics change.
|
||||
*/
|
||||
|
||||
#define SPA_TYPE_INTERFACE_Bluez5CodecA2DP SPA_TYPE_INFO_INTERFACE_BASE "Bluez5:Codec:A2DP:Private"
|
||||
#define SPA_TYPE_INTERFACE_Bluez5CodecMedia SPA_TYPE_INFO_INTERFACE_BASE "Bluez5:Codec:Media:Private"
|
||||
|
||||
#define SPA_VERSION_BLUEZ5_CODEC_A2DP 5
|
||||
#define SPA_VERSION_BLUEZ5_CODEC_MEDIA 5
|
||||
|
||||
struct spa_bluez5_codec_a2dp {
|
||||
struct spa_interface iface;
|
||||
const struct a2dp_codec * const *codecs; /**< NULL terminated array */
|
||||
const struct media_codec * const *codecs; /**< NULL terminated array */
|
||||
};
|
||||
|
||||
#define A2DP_CODEC_FACTORY_NAME(basename) (SPA_NAME_API_CODEC_BLUEZ5_A2DP "." basename)
|
||||
#define MEDIA_CODEC_FACTORY_NAME(basename) (SPA_NAME_API_CODEC_BLUEZ5_MEDIA "." basename)
|
||||
|
||||
#ifdef CODEC_PLUGIN
|
||||
#define A2DP_CODEC_EXPORT_DEF(basename,...) \
|
||||
const char *codec_plugin_factory_name = A2DP_CODEC_FACTORY_NAME(basename); \
|
||||
static const struct a2dp_codec * const codec_plugin_a2dp_codec_list[] = { __VA_ARGS__, NULL }; \
|
||||
const struct a2dp_codec * const * const codec_plugin_a2dp_codecs = codec_plugin_a2dp_codec_list;
|
||||
#define MEDIA_CODEC_EXPORT_DEF(basename,...) \
|
||||
const char *codec_plugin_factory_name = MEDIA_CODEC_FACTORY_NAME(basename); \
|
||||
static const struct media_codec * const codec_plugin_media_codec_list[] = { __VA_ARGS__, NULL }; \
|
||||
const struct media_codec * const * const codec_plugin_media_codecs = codec_plugin_media_codec_list;
|
||||
|
||||
extern const struct a2dp_codec * const * const codec_plugin_a2dp_codecs;
|
||||
extern const struct media_codec * const * const codec_plugin_media_codecs;
|
||||
extern const char *codec_plugin_factory_name;
|
||||
#endif
|
||||
|
||||
#define A2DP_CODEC_FLAG_SINK (1 << 0)
|
||||
#define MEDIA_CODEC_FLAG_SINK (1 << 0)
|
||||
|
||||
#define A2DP_CODEC_DEFAULT_RATE 48000
|
||||
#define A2DP_CODEC_DEFAULT_CHANNELS 2
|
||||
|
|
@ -74,12 +74,12 @@ enum {
|
|||
NEED_FLUSH_FRAGMENT = 2,
|
||||
};
|
||||
|
||||
struct a2dp_codec_audio_info {
|
||||
struct media_codec_audio_info {
|
||||
uint32_t rate;
|
||||
uint32_t channels;
|
||||
};
|
||||
|
||||
struct a2dp_codec {
|
||||
struct media_codec {
|
||||
enum spa_bluetooth_audio_codec id;
|
||||
uint8_t codec_id;
|
||||
a2dp_vendor_codec_t vendor;
|
||||
|
|
@ -91,18 +91,20 @@ struct a2dp_codec {
|
|||
|
||||
const size_t send_buf_size;
|
||||
|
||||
const struct a2dp_codec *duplex_codec; /**< Codec for non-standard A2DP duplex channel */
|
||||
const struct media_codec *duplex_codec; /**< Codec for non-standard A2DP duplex channel */
|
||||
|
||||
int (*fill_caps) (const struct a2dp_codec *codec, uint32_t flags,
|
||||
struct spa_log *log;
|
||||
|
||||
int (*fill_caps) (const struct media_codec *codec, uint32_t flags,
|
||||
uint8_t caps[A2DP_MAX_CAPS_SIZE]);
|
||||
int (*select_config) (const struct a2dp_codec *codec, uint32_t flags,
|
||||
int (*select_config) (const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
const struct a2dp_codec_audio_info *info,
|
||||
const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *global_settings, uint8_t config[A2DP_MAX_CAPS_SIZE]);
|
||||
int (*enum_config) (const struct a2dp_codec *codec, uint32_t flags,
|
||||
int (*enum_config) (const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *builder, struct spa_pod **param);
|
||||
int (*validate_config) (const struct a2dp_codec *codec, uint32_t flags,
|
||||
int (*validate_config) (const struct media_codec *codec, uint32_t flags,
|
||||
const void *caps, size_t caps_size,
|
||||
struct spa_audio_info *info);
|
||||
|
||||
|
|
@ -111,17 +113,17 @@ struct a2dp_codec {
|
|||
* The caps handed in correspond to this codec_id, but are
|
||||
* otherwise not checked beforehand.
|
||||
*/
|
||||
int (*caps_preference_cmp) (const struct a2dp_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct a2dp_codec_audio_info *info,
|
||||
int (*caps_preference_cmp) (const struct media_codec *codec, uint32_t flags, const void *caps1, size_t caps1_size,
|
||||
const void *caps2, size_t caps2_size, const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *global_settings);
|
||||
|
||||
void *(*init_props) (const struct a2dp_codec *codec, uint32_t flags, const struct spa_dict *settings);
|
||||
void *(*init_props) (const struct media_codec *codec, uint32_t flags, const struct spa_dict *settings);
|
||||
void (*clear_props) (void *);
|
||||
int (*enum_props) (void *props, const struct spa_dict *settings, uint32_t id, uint32_t idx,
|
||||
struct spa_pod_builder *builder, struct spa_pod **param);
|
||||
int (*set_props) (void *props, const struct spa_pod *param);
|
||||
|
||||
void *(*init) (const struct a2dp_codec *codec, uint32_t flags, void *config, size_t config_size,
|
||||
void *(*init) (const struct media_codec *codec, uint32_t flags, void *config, size_t config_size,
|
||||
const struct spa_audio_info *info, void *props, size_t mtu);
|
||||
void (*deinit) (void *data);
|
||||
|
||||
|
|
@ -151,17 +153,17 @@ struct a2dp_codec {
|
|||
void (*set_log) (struct spa_log *global_log);
|
||||
};
|
||||
|
||||
struct a2dp_codec_config {
|
||||
struct media_codec_config {
|
||||
uint32_t config;
|
||||
int value;
|
||||
unsigned int priority;
|
||||
};
|
||||
|
||||
int a2dp_codec_select_config(const struct a2dp_codec_config configs[], size_t n,
|
||||
int media_codec_select_config(const struct media_codec_config configs[], size_t n,
|
||||
uint32_t cap, int preferred_value);
|
||||
|
||||
bool a2dp_codec_check_caps(const struct a2dp_codec *codec, unsigned int codec_id,
|
||||
const void *caps, size_t caps_size, const struct a2dp_codec_audio_info *info,
|
||||
bool media_codec_check_caps(const struct media_codec *codec, unsigned int codec_id,
|
||||
const void *caps, size_t caps_size, const struct media_codec_audio_info *info,
|
||||
const struct spa_dict *global_settings);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
/* Spa A2DP Sink
|
||||
/* Spa Media Sink
|
||||
*
|
||||
* Copyright © 2018 Wim Taymans
|
||||
*
|
||||
|
|
@ -53,9 +53,9 @@
|
|||
|
||||
#include "defs.h"
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.sink.a2dp");
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.sink.media");
|
||||
#undef SPA_LOG_TOPIC_DEFAULT
|
||||
#define SPA_LOG_TOPIC_DEFAULT &log_topic
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ struct impl {
|
|||
uint64_t next_time;
|
||||
uint64_t last_error;
|
||||
|
||||
const struct a2dp_codec *codec;
|
||||
const struct media_codec *codec;
|
||||
bool codec_props_changed;
|
||||
void *codec_props;
|
||||
void *codec_data;
|
||||
|
|
@ -788,7 +788,7 @@ again:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void a2dp_on_flush(struct spa_source *source)
|
||||
static void media_on_flush(struct spa_source *source)
|
||||
{
|
||||
struct impl *this = source->data;
|
||||
|
||||
|
|
@ -809,7 +809,7 @@ static void a2dp_on_flush(struct spa_source *source)
|
|||
flush_data(this, this->current_time);
|
||||
}
|
||||
|
||||
static void a2dp_on_flush_timeout(struct spa_source *source)
|
||||
static void media_on_flush_timeout(struct spa_source *source)
|
||||
{
|
||||
struct impl *this = source->data;
|
||||
uint64_t exp;
|
||||
|
|
@ -827,7 +827,7 @@ static void a2dp_on_flush_timeout(struct spa_source *source)
|
|||
flush_data(this, this->current_time);
|
||||
}
|
||||
|
||||
static void a2dp_on_timeout(struct spa_source *source)
|
||||
static void media_on_timeout(struct spa_source *source)
|
||||
{
|
||||
struct impl *this = source->data;
|
||||
struct port *port = &this->port;
|
||||
|
|
@ -897,7 +897,7 @@ static int do_start(struct impl *this)
|
|||
|
||||
this->following = is_following(this);
|
||||
|
||||
spa_log_debug(this->log, "%p: start following:%d", this, this->following);
|
||||
spa_log_debug(this->log, "%p: start following:%d", this, this->following);
|
||||
|
||||
if ((res = spa_bt_transport_acquire(this->transport, false)) < 0)
|
||||
return res;
|
||||
|
|
@ -911,7 +911,7 @@ static int do_start(struct impl *this)
|
|||
spa_log_hexdump(this->log, SPA_LOG_LEVEL_DEBUG, 2, conf, (size_t)size);
|
||||
|
||||
this->codec_data = this->codec->init(this->codec,
|
||||
this->is_duplex ? A2DP_CODEC_FLAG_SINK : 0,
|
||||
this->is_duplex ? MEDIA_CODEC_FLAG_SINK : 0,
|
||||
this->transport->configuration,
|
||||
this->transport->configuration_len,
|
||||
&port->current_format,
|
||||
|
|
@ -920,8 +920,8 @@ static int do_start(struct impl *this)
|
|||
if (this->codec_data == NULL)
|
||||
return -EIO;
|
||||
|
||||
spa_log_info(this->log, "%p: using A2DP codec %s, delay:%"PRIi64" ms", this, this->codec->description,
|
||||
(int64_t)(spa_bt_transport_get_delay_nsec(this->transport) / SPA_NSEC_PER_MSEC));
|
||||
spa_log_info(this->log, "%p: using A2DP codec %s, delay:%"PRIi64" ms", this, this->codec->description,
|
||||
(int64_t)(spa_bt_transport_get_delay_nsec(this->transport) / SPA_NSEC_PER_MSEC));
|
||||
|
||||
this->seqnum = 0;
|
||||
|
||||
|
|
@ -932,8 +932,7 @@ static int do_start(struct impl *this)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
spa_log_debug(this->log, "%p: block_size %d", this,
|
||||
this->block_size);
|
||||
spa_log_debug(this->log, "%p: block_size %d", this, this->block_size);
|
||||
|
||||
val = this->codec->send_buf_size > 0
|
||||
/* The kernel doubles the SO_SNDBUF option value set by setsockopt(). */
|
||||
|
|
@ -963,21 +962,21 @@ static int do_start(struct impl *this)
|
|||
|
||||
this->source.data = this;
|
||||
this->source.fd = this->timerfd;
|
||||
this->source.func = a2dp_on_timeout;
|
||||
this->source.func = media_on_timeout;
|
||||
this->source.mask = SPA_IO_IN;
|
||||
this->source.rmask = 0;
|
||||
spa_loop_add_source(this->data_loop, &this->source);
|
||||
|
||||
this->flush_timer_source.data = this;
|
||||
this->flush_timer_source.fd = this->flush_timerfd;
|
||||
this->flush_timer_source.func = a2dp_on_flush_timeout;
|
||||
this->flush_timer_source.func = media_on_flush_timeout;
|
||||
this->flush_timer_source.mask = SPA_IO_IN;
|
||||
this->flush_timer_source.rmask = 0;
|
||||
spa_loop_add_source(this->data_loop, &this->flush_timer_source);
|
||||
|
||||
this->flush_source.data = this;
|
||||
this->flush_source.fd = this->transport->fd;
|
||||
this->flush_source.func = a2dp_on_flush;
|
||||
this->flush_source.func = media_on_flush;
|
||||
this->flush_source.mask = 0;
|
||||
this->flush_source.rmask = 0;
|
||||
spa_loop_add_source(this->data_loop, &this->flush_source);
|
||||
|
|
@ -1198,7 +1197,7 @@ impl_node_port_enum_params(void *object, int seq,
|
|||
return -EIO;
|
||||
|
||||
if ((res = this->codec->enum_config(this->codec,
|
||||
this->is_duplex ? A2DP_CODEC_FLAG_SINK : 0,
|
||||
this->is_duplex ? MEDIA_CODEC_FLAG_SINK : 0,
|
||||
this->transport->configuration,
|
||||
this->transport->configuration_len,
|
||||
id, result.index, &b, ¶m)) != 1)
|
||||
|
|
@ -1711,12 +1710,12 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
spa_log_error(this->log, "a transport is needed");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (this->transport->a2dp_codec == NULL) {
|
||||
if (this->transport->media_codec == NULL) {
|
||||
spa_log_error(this->log, "a transport codec is needed");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
this->codec = this->transport->a2dp_codec;
|
||||
this->codec = this->transport->media_codec;
|
||||
|
||||
if (this->is_duplex) {
|
||||
if (!this->codec->duplex_codec) {
|
||||
|
|
@ -1728,7 +1727,7 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
|
||||
if (this->codec->init_props != NULL)
|
||||
this->codec_props = this->codec->init_props(this->codec,
|
||||
this->is_duplex ? A2DP_CODEC_FLAG_SINK : 0,
|
||||
this->is_duplex ? MEDIA_CODEC_FLAG_SINK : 0,
|
||||
this->transport->device->settings);
|
||||
|
||||
reset_props(this, &this->props);
|
||||
|
|
@ -1770,15 +1769,15 @@ impl_enum_interface_info(const struct spa_handle_factory *factory,
|
|||
|
||||
static const struct spa_dict_item info_items[] = {
|
||||
{ SPA_KEY_FACTORY_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" },
|
||||
{ SPA_KEY_FACTORY_DESCRIPTION, "Play audio with the a2dp" },
|
||||
{ SPA_KEY_FACTORY_DESCRIPTION, "Play audio with the media" },
|
||||
{ SPA_KEY_FACTORY_USAGE, SPA_KEY_API_BLUEZ5_TRANSPORT"=<transport>" },
|
||||
};
|
||||
|
||||
static const struct spa_dict info = SPA_DICT_INIT_ARRAY(info_items);
|
||||
|
||||
const struct spa_handle_factory spa_a2dp_sink_factory = {
|
||||
const struct spa_handle_factory spa_media_sink_factory = {
|
||||
SPA_VERSION_HANDLE_FACTORY,
|
||||
SPA_NAME_API_BLUEZ5_A2DP_SINK,
|
||||
SPA_NAME_API_BLUEZ5_MEDIA_SINK,
|
||||
&info,
|
||||
impl_get_size,
|
||||
impl_init,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
/* Spa A2DP Source
|
||||
/* Spa Media Source
|
||||
*
|
||||
* Copyright © 2018 Wim Taymans
|
||||
* Copyright © 2019 Collabora Ltd.
|
||||
|
|
@ -54,9 +54,9 @@
|
|||
|
||||
#include "defs.h"
|
||||
#include "rtp.h"
|
||||
#include "a2dp-codecs.h"
|
||||
#include "media-codecs.h"
|
||||
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.source.a2dp");
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.source.media");
|
||||
#undef SPA_LOG_TOPIC_DEFAULT
|
||||
#define SPA_LOG_TOPIC_DEFAULT &log_topic
|
||||
|
||||
|
|
@ -156,7 +156,7 @@ struct impl {
|
|||
uint64_t current_time;
|
||||
uint64_t next_time;
|
||||
|
||||
const struct a2dp_codec *codec;
|
||||
const struct media_codec *codec;
|
||||
bool codec_props_changed;
|
||||
void *codec_props;
|
||||
void *codec_data;
|
||||
|
|
@ -448,7 +448,7 @@ static int32_t decode_data(struct impl *this, uint8_t *src, uint32_t src_size,
|
|||
return dst_size - avail;
|
||||
}
|
||||
|
||||
static void a2dp_on_ready_read(struct spa_source *source)
|
||||
static void media_on_ready_read(struct spa_source *source)
|
||||
{
|
||||
struct impl *this = source->data;
|
||||
struct port *port = &this->port;
|
||||
|
|
@ -533,7 +533,7 @@ static int set_duplex_timeout(struct impl *this, uint64_t timeout)
|
|||
this->duplex_timerfd, 0, &ts, NULL);
|
||||
}
|
||||
|
||||
static void a2dp_on_duplex_timeout(struct spa_source *source)
|
||||
static void media_on_duplex_timeout(struct spa_source *source)
|
||||
{
|
||||
struct impl *this = source->data;
|
||||
uint64_t exp;
|
||||
|
|
@ -543,7 +543,7 @@ static void a2dp_on_duplex_timeout(struct spa_source *source)
|
|||
|
||||
set_duplex_timeout(this, this->duplex_timeout);
|
||||
|
||||
a2dp_on_ready_read(source);
|
||||
media_on_ready_read(source);
|
||||
}
|
||||
|
||||
static int setup_matching(struct impl *this)
|
||||
|
|
@ -567,7 +567,7 @@ static int setup_matching(struct impl *this)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void a2dp_on_timeout(struct spa_source *source)
|
||||
static void media_on_timeout(struct spa_source *source)
|
||||
{
|
||||
struct impl *this = source->data;
|
||||
struct port *port = &this->port;
|
||||
|
|
@ -631,7 +631,7 @@ static int transport_start(struct impl *this)
|
|||
this->transport_acquired = true;
|
||||
|
||||
this->codec_data = this->codec->init(this->codec,
|
||||
this->is_duplex ? 0 : A2DP_CODEC_FLAG_SINK,
|
||||
this->is_duplex ? 0 : MEDIA_CODEC_FLAG_SINK,
|
||||
this->transport->configuration,
|
||||
this->transport->configuration_len,
|
||||
&port->current_format,
|
||||
|
|
@ -640,7 +640,7 @@ static int transport_start(struct impl *this)
|
|||
if (this->codec_data == NULL)
|
||||
return -EIO;
|
||||
|
||||
spa_log_info(this->log, "%p: using A2DP codec %s", this, this->codec->description);
|
||||
spa_log_info(this->log, "%p: using A2DP codec %s", this, this->codec->description);
|
||||
|
||||
val = fcntl(this->transport->fd, F_GETFL);
|
||||
if (fcntl(this->transport->fd, F_SETFL, val | O_NONBLOCK) < 0)
|
||||
|
|
@ -672,7 +672,7 @@ static int transport_start(struct impl *this)
|
|||
|
||||
if (!this->use_duplex_source) {
|
||||
this->source.fd = this->transport->fd;
|
||||
this->source.func = a2dp_on_ready_read;
|
||||
this->source.func = media_on_ready_read;
|
||||
this->source.mask = SPA_IO_IN;
|
||||
this->source.rmask = 0;
|
||||
spa_loop_add_source(this->data_loop, &this->source);
|
||||
|
|
@ -689,7 +689,7 @@ static int transport_start(struct impl *this)
|
|||
* XXX: forward stream.
|
||||
*/
|
||||
this->source.fd = this->duplex_timerfd;
|
||||
this->source.func = a2dp_on_duplex_timeout;
|
||||
this->source.func = media_on_duplex_timeout;
|
||||
this->source.mask = SPA_IO_IN;
|
||||
this->source.rmask = 0;
|
||||
spa_loop_add_source(this->data_loop, &this->source);
|
||||
|
|
@ -700,7 +700,7 @@ static int transport_start(struct impl *this)
|
|||
|
||||
this->timer_source.data = this;
|
||||
this->timer_source.fd = this->timerfd;
|
||||
this->timer_source.func = a2dp_on_timeout;
|
||||
this->timer_source.func = media_on_timeout;
|
||||
this->timer_source.mask = SPA_IO_IN;
|
||||
this->timer_source.rmask = 0;
|
||||
spa_loop_add_source(this->data_loop, &this->timer_source);
|
||||
|
|
@ -968,7 +968,7 @@ impl_node_port_enum_params(void *object, int seq,
|
|||
return -EIO;
|
||||
|
||||
if ((res = this->codec->enum_config(this->codec,
|
||||
this->is_duplex ? 0 : A2DP_CODEC_FLAG_SINK,
|
||||
this->is_duplex ? 0 : MEDIA_CODEC_FLAG_SINK,
|
||||
this->transport->configuration,
|
||||
this->transport->configuration_len,
|
||||
id, result.index, &b, ¶m)) != 1)
|
||||
|
|
@ -1555,7 +1555,7 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
spa_atou32(str, &this->quantum_limit, 0);
|
||||
if ((str = spa_dict_lookup(info, SPA_KEY_API_BLUEZ5_TRANSPORT)) != NULL)
|
||||
sscanf(str, "pointer:%p", &this->transport);
|
||||
if ((str = spa_dict_lookup(info, "bluez5.a2dp-source-role")) != NULL)
|
||||
if ((str = spa_dict_lookup(info, "bluez5.media-source-role")) != NULL)
|
||||
this->is_input = spa_streq(str, "input");
|
||||
if ((str = spa_dict_lookup(info, "api.bluez5.a2dp-duplex")) != NULL)
|
||||
this->is_duplex = spa_atob(str);
|
||||
|
|
@ -1565,11 +1565,11 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
spa_log_error(this->log, "a transport is needed");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (this->transport->a2dp_codec == NULL) {
|
||||
if (this->transport->media_codec == NULL) {
|
||||
spa_log_error(this->log, "a transport codec is needed");
|
||||
return -EINVAL;
|
||||
}
|
||||
this->codec = this->transport->a2dp_codec;
|
||||
this->codec = this->transport->media_codec;
|
||||
|
||||
if (this->is_duplex) {
|
||||
if (!this->codec->duplex_codec) {
|
||||
|
|
@ -1583,7 +1583,7 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
|
||||
if (this->codec->init_props != NULL)
|
||||
this->codec_props = this->codec->init_props(this->codec,
|
||||
this->is_duplex ? 0 : A2DP_CODEC_FLAG_SINK,
|
||||
this->is_duplex ? 0 : MEDIA_CODEC_FLAG_SINK,
|
||||
this->transport->device->settings);
|
||||
|
||||
spa_bt_transport_add_listener(this->transport,
|
||||
|
|
@ -1627,15 +1627,15 @@ impl_enum_interface_info(const struct spa_handle_factory *factory,
|
|||
|
||||
static const struct spa_dict_item info_items[] = {
|
||||
{ SPA_KEY_FACTORY_AUTHOR, "Collabora Ltd. <contact@collabora.com>" },
|
||||
{ SPA_KEY_FACTORY_DESCRIPTION, "Capture bluetooth audio with a2dp" },
|
||||
{ SPA_KEY_FACTORY_DESCRIPTION, "Capture bluetooth audio with media" },
|
||||
{ SPA_KEY_FACTORY_USAGE, SPA_KEY_API_BLUEZ5_TRANSPORT"=<transport>" },
|
||||
};
|
||||
|
||||
static const struct spa_dict info = SPA_DICT_INIT_ARRAY(info_items);
|
||||
|
||||
const struct spa_handle_factory spa_a2dp_source_factory = {
|
||||
const struct spa_handle_factory spa_media_source_factory = {
|
||||
SPA_VERSION_HANDLE_FACTORY,
|
||||
SPA_NAME_API_BLUEZ5_A2DP_SOURCE,
|
||||
SPA_NAME_API_BLUEZ5_MEDIA_SOURCE,
|
||||
&info,
|
||||
impl_get_size,
|
||||
impl_init,
|
||||
|
|
@ -17,9 +17,9 @@ cdata.set('HAVE_BLUEZ_5_HCI', dependency('bluez', version: '< 6', required: fals
|
|||
bluez5_sources = [
|
||||
'plugin.c',
|
||||
'codec-loader.c',
|
||||
'a2dp-codecs.c',
|
||||
'a2dp-sink.c',
|
||||
'a2dp-source.c',
|
||||
'media-codecs.c',
|
||||
'media-sink.c',
|
||||
'media-source.c',
|
||||
'sco-sink.c',
|
||||
'sco-source.c',
|
||||
'sco-io.c',
|
||||
|
|
@ -59,7 +59,7 @@ bluez5lib = shared_library('spa-bluez5',
|
|||
codec_args = [ '-DCODEC_PLUGIN' ]
|
||||
|
||||
bluez_codec_sbc = shared_library('spa-codec-bluez5-sbc',
|
||||
[ 'a2dp-codec-sbc.c', 'a2dp-codecs.c' ],
|
||||
[ 'a2dp-codec-sbc.c', 'media-codecs.c' ],
|
||||
include_directories : [ configinc ],
|
||||
c_args : codec_args,
|
||||
dependencies : [ spa_dep, sbc_dep ],
|
||||
|
|
@ -67,7 +67,7 @@ bluez_codec_sbc = shared_library('spa-codec-bluez5-sbc',
|
|||
install_dir : spa_plugindir / 'bluez5')
|
||||
|
||||
bluez_codec_faststream = shared_library('spa-codec-bluez5-faststream',
|
||||
[ 'a2dp-codec-faststream.c', 'a2dp-codecs.c' ],
|
||||
[ 'a2dp-codec-faststream.c', 'media-codecs.c' ],
|
||||
include_directories : [ configinc ],
|
||||
c_args : codec_args,
|
||||
dependencies : [ spa_dep, sbc_dep ],
|
||||
|
|
@ -76,7 +76,7 @@ bluez_codec_faststream = shared_library('spa-codec-bluez5-faststream',
|
|||
|
||||
if fdk_aac_dep.found()
|
||||
bluez_codec_aac = shared_library('spa-codec-bluez5-aac',
|
||||
[ 'a2dp-codec-aac.c', 'a2dp-codecs.c' ],
|
||||
[ 'a2dp-codec-aac.c', 'media-codecs.c' ],
|
||||
include_directories : [ configinc ],
|
||||
c_args : codec_args,
|
||||
dependencies : [ spa_dep, fdk_aac_dep ],
|
||||
|
|
@ -86,7 +86,7 @@ endif
|
|||
|
||||
if aptx_dep.found()
|
||||
bluez_codec_aptx = shared_library('spa-codec-bluez5-aptx',
|
||||
[ 'a2dp-codec-aptx.c', 'a2dp-codecs.c' ],
|
||||
[ 'a2dp-codec-aptx.c', 'media-codecs.c' ],
|
||||
include_directories : [ configinc ],
|
||||
c_args : codec_args,
|
||||
dependencies : [ spa_dep, aptx_dep, sbc_dep ],
|
||||
|
|
@ -102,7 +102,7 @@ if ldac_dep.found()
|
|||
ldac_dep += ldac_abr_dep
|
||||
endif
|
||||
bluez_codec_ldac = shared_library('spa-codec-bluez5-ldac',
|
||||
[ 'a2dp-codec-ldac.c', 'a2dp-codecs.c' ],
|
||||
[ 'a2dp-codec-ldac.c', 'media-codecs.c' ],
|
||||
include_directories : [ configinc ],
|
||||
c_args : ldac_args,
|
||||
dependencies : [ spa_dep, ldac_dep ],
|
||||
|
|
@ -112,7 +112,7 @@ endif
|
|||
|
||||
if get_option('bluez5-codec-lc3plus').allowed() and lc3plus_dep.found()
|
||||
bluez_codec_lc3plus = shared_library('spa-codec-bluez5-lc3plus',
|
||||
[ 'a2dp-codec-lc3plus.c', 'a2dp-codecs.c' ],
|
||||
[ 'a2dp-codec-lc3plus.c', 'media-codecs.c' ],
|
||||
include_directories : [ configinc ],
|
||||
c_args : codec_args,
|
||||
dependencies : [ spa_dep, lc3plus_dep, mathlib ],
|
||||
|
|
@ -124,7 +124,7 @@ if get_option('bluez5-codec-opus').allowed() and opus_dep.found()
|
|||
opus_args = codec_args
|
||||
opus_dep = [ opus_dep ]
|
||||
bluez_codec_opus = shared_library('spa-codec-bluez5-opus',
|
||||
[ 'a2dp-codec-opus.c', 'a2dp-codecs.c' ],
|
||||
[ 'a2dp-codec-opus.c', 'media-codecs.c' ],
|
||||
include_directories : [ configinc ],
|
||||
c_args : opus_args,
|
||||
dependencies : [ spa_dep, opus_dep, mathlib ],
|
||||
|
|
|
|||
|
|
@ -29,8 +29,8 @@
|
|||
|
||||
extern const struct spa_handle_factory spa_bluez5_dbus_factory;
|
||||
extern const struct spa_handle_factory spa_bluez5_device_factory;
|
||||
extern const struct spa_handle_factory spa_a2dp_sink_factory;
|
||||
extern const struct spa_handle_factory spa_a2dp_source_factory;
|
||||
extern const struct spa_handle_factory spa_media_sink_factory;
|
||||
extern const struct spa_handle_factory spa_media_source_factory;
|
||||
extern const struct spa_handle_factory spa_sco_sink_factory;
|
||||
extern const struct spa_handle_factory spa_sco_source_factory;
|
||||
|
||||
|
|
@ -48,10 +48,10 @@ int spa_handle_factory_enum(const struct spa_handle_factory **factory, uint32_t
|
|||
*factory = &spa_bluez5_device_factory;
|
||||
break;
|
||||
case 2:
|
||||
*factory = &spa_a2dp_sink_factory;
|
||||
*factory = &spa_media_sink_factory;
|
||||
break;
|
||||
case 3:
|
||||
*factory = &spa_a2dp_source_factory;
|
||||
*factory = &spa_media_source_factory;
|
||||
break;
|
||||
case 4:
|
||||
*factory = &spa_sco_sink_factory;
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@
|
|||
#include <spa/utils/json.h>
|
||||
#include <spa/utils/string.h>
|
||||
|
||||
#include "a2dp-codecs.h"
|
||||
#include "defs.h"
|
||||
|
||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.quirks");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue