From ece8a95c296d4d3dfee658e71e3722a9d83dda23 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 7 Jan 2021 17:28:49 +0100 Subject: [PATCH] bluez5: improve a2dp codec api Pass dict to select_config to influence the selection Make a method to validate a config. Add spa_dict to the codec to pass more info around. --- spa/plugins/bluez5/a2dp-codec-aac.c | 2 +- spa/plugins/bluez5/a2dp-codec-aptx.c | 2 +- spa/plugins/bluez5/a2dp-codec-ldac.c | 2 +- spa/plugins/bluez5/a2dp-codec-sbc.c | 2 +- spa/plugins/bluez5/a2dp-codecs.h | 8 +++++--- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/spa/plugins/bluez5/a2dp-codec-aac.c b/spa/plugins/bluez5/a2dp-codec-aac.c index cade782f7..2edd91b91 100644 --- a/spa/plugins/bluez5/a2dp-codec-aac.c +++ b/spa/plugins/bluez5/a2dp-codec-aac.c @@ -103,7 +103,7 @@ static struct { static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags, const void *caps, size_t caps_size, - const struct spa_audio_info *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_aac_t conf; int freq; diff --git a/spa/plugins/bluez5/a2dp-codec-aptx.c b/spa/plugins/bluez5/a2dp-codec-aptx.c index f65f65921..db0cfe8b3 100644 --- a/spa/plugins/bluez5/a2dp-codec-aptx.c +++ b/spa/plugins/bluez5/a2dp-codec-aptx.c @@ -76,7 +76,7 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags, static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags, const void *caps, size_t caps_size, - const struct spa_audio_info *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_aptx_t conf; size_t actual_conf_size = codec_get_caps_size(codec); diff --git a/spa/plugins/bluez5/a2dp-codec-ldac.c b/spa/plugins/bluez5/a2dp-codec-ldac.c index 9d1f30266..3d255edd1 100644 --- a/spa/plugins/bluez5/a2dp-codec-ldac.c +++ b/spa/plugins/bluez5/a2dp-codec-ldac.c @@ -128,7 +128,7 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags, uint8 static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags, const void *caps, size_t caps_size, - const struct spa_audio_info *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_ldac_t conf; diff --git a/spa/plugins/bluez5/a2dp-codec-sbc.c b/spa/plugins/bluez5/a2dp-codec-sbc.c index f5b6998ac..88d4d2ebb 100644 --- a/spa/plugins/bluez5/a2dp-codec-sbc.c +++ b/spa/plugins/bluez5/a2dp-codec-sbc.c @@ -119,7 +119,7 @@ static uint8_t default_bitpool(uint8_t freq, uint8_t mode) static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags, const void *caps, size_t caps_size, - const struct spa_audio_info *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_sbc_t conf; int bitpool; diff --git a/spa/plugins/bluez5/a2dp-codecs.h b/spa/plugins/bluez5/a2dp-codecs.h index 126a7a271..c4d009940 100644 --- a/spa/plugins/bluez5/a2dp-codecs.h +++ b/spa/plugins/bluez5/a2dp-codecs.h @@ -325,13 +325,12 @@ static inline int a2dp_sbc_get_frequency(a2dp_sbc_t *config) struct a2dp_codec_handle; struct a2dp_codec { - uint32_t flags; - uint8_t codec_id; a2dp_vendor_codec_t vendor; const char *name; const char *description; + const struct spa_dict *info; const int send_fill_frames; const int recv_fill_frames; @@ -340,10 +339,13 @@ struct a2dp_codec { uint8_t caps[A2DP_MAX_CAPS_SIZE]); int (*select_config) (const struct a2dp_codec *codec, uint32_t flags, const void *caps, size_t caps_size, - const struct spa_audio_info *info, uint8_t config[A2DP_MAX_CAPS_SIZE]); + const struct spa_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]); int (*enum_config) (const struct a2dp_codec *codec, 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, + const void *caps, size_t caps_size, + struct spa_audio_info *info); void *(*init) (const struct a2dp_codec *codec, uint32_t flags, void *config, size_t config_size, const struct spa_audio_info *info, size_t mtu);