From 5bb7a0f573cd8ba891820c2df2bf80a3eccdfd04 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 7 Jan 2021 17:39:39 +0100 Subject: [PATCH] a2dp-codecs: add settings to codec init function To make it possible to add extra config options in init. Also add a method to update settings in a codec. --- spa/plugins/bluez5/a2dp-codec-aac.c | 5 +++-- spa/plugins/bluez5/a2dp-codec-aptx.c | 5 +++-- spa/plugins/bluez5/a2dp-codec-ldac.c | 5 +++-- spa/plugins/bluez5/a2dp-codec-sbc.c | 5 +++-- spa/plugins/bluez5/a2dp-codecs.h | 6 ++++-- spa/plugins/bluez5/a2dp-sink.c | 2 +- spa/plugins/bluez5/a2dp-source.c | 2 +- 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/spa/plugins/bluez5/a2dp-codec-aac.c b/spa/plugins/bluez5/a2dp-codec-aac.c index 2edd91b91..1a86e0589 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_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_aac_t conf; int freq; @@ -219,7 +219,8 @@ static int codec_enum_config(const struct a2dp_codec *codec, } static void *codec_init(const struct a2dp_codec *codec, uint32_t flags, - void *config, size_t config_len, const struct spa_audio_info *info, size_t mtu) + void *config, size_t config_len, const struct spa_audio_info *info, + const struct spa_dict *settings, size_t mtu) { struct impl *this; a2dp_aac_t *conf = config; diff --git a/spa/plugins/bluez5/a2dp-codec-aptx.c b/spa/plugins/bluez5/a2dp-codec-aptx.c index db0cfe8b3..21fbf9bb3 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_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_aptx_t conf; size_t actual_conf_size = codec_get_caps_size(codec); @@ -218,7 +218,8 @@ static int codec_get_block_size(void *data) } static void *codec_init(const struct a2dp_codec *codec, uint32_t flags, - void *config, size_t config_len, const struct spa_audio_info *info, size_t mtu) + void *config, size_t config_len, const struct spa_audio_info *info, + const struct spa_dict *settings, size_t mtu) { struct impl *this; int res; diff --git a/spa/plugins/bluez5/a2dp-codec-ldac.c b/spa/plugins/bluez5/a2dp-codec-ldac.c index 3d255edd1..b5b77c96d 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_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_ldac_t conf; @@ -308,7 +308,8 @@ static int codec_get_block_size(void *data) } static void *codec_init(const struct a2dp_codec *codec, uint32_t flags, - void *config, size_t config_len, const struct spa_audio_info *info, size_t mtu) + void *config, size_t config_len, const struct spa_audio_info *info, + const struct spa_dict *settings, size_t mtu) { struct impl *this; a2dp_ldac_t *conf = config; diff --git a/spa/plugins/bluez5/a2dp-codec-sbc.c b/spa/plugins/bluez5/a2dp-codec-sbc.c index 88d4d2ebb..74fdb6b30 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_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]) + const struct spa_dict *settings, uint8_t config[A2DP_MAX_CAPS_SIZE]) { a2dp_sbc_t conf; int bitpool; @@ -303,7 +303,8 @@ static int codec_get_block_size(void *data) } static void *codec_init(const struct a2dp_codec *codec, uint32_t flags, - void *config, size_t config_len, const struct spa_audio_info *info, size_t mtu) + void *config, size_t config_len, const struct spa_audio_info *info, + const struct spa_dict *settings, size_t mtu) { struct impl *this; a2dp_sbc_t *conf = config; diff --git a/spa/plugins/bluez5/a2dp-codecs.h b/spa/plugins/bluez5/a2dp-codecs.h index c4d009940..af2d6d8ee 100644 --- a/spa/plugins/bluez5/a2dp-codecs.h +++ b/spa/plugins/bluez5/a2dp-codecs.h @@ -339,7 +339,7 @@ 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_dict *info, uint8_t config[A2DP_MAX_CAPS_SIZE]); + const struct spa_dict *settings, 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); @@ -348,9 +348,11 @@ struct a2dp_codec { 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); + const struct spa_audio_info *info, const struct spa_dict *settings, size_t mtu); void (*deinit) (void *data); + int (*update_settings) (void *data, const struct spa_dict *settings); + int (*get_block_size) (void *data); int (*get_num_blocks) (void *data); diff --git a/spa/plugins/bluez5/a2dp-sink.c b/spa/plugins/bluez5/a2dp-sink.c index 903fd3758..f73d14526 100644 --- a/spa/plugins/bluez5/a2dp-sink.c +++ b/spa/plugins/bluez5/a2dp-sink.c @@ -666,7 +666,7 @@ static int do_start(struct impl *this) this->codec_data = this->codec->init(this->codec, 0, this->transport->configuration, this->transport->configuration_len, - &port->current_format, + &port->current_format, NULL, this->transport->write_mtu); if (this->codec_data == NULL) return -EIO; diff --git a/spa/plugins/bluez5/a2dp-source.c b/spa/plugins/bluez5/a2dp-source.c index cc5cbd8d8..364836a7b 100644 --- a/spa/plugins/bluez5/a2dp-source.c +++ b/spa/plugins/bluez5/a2dp-source.c @@ -505,7 +505,7 @@ static int transport_start(struct impl *this) this->codec_data = this->codec->init(this->codec, 0, this->transport->configuration, this->transport->configuration_len, - &port->current_format, + &port->current_format, NULL, this->transport->read_mtu); if (this->codec_data == NULL) return -EIO;