diff options
-rw-r--r-- | system/stack/a2dp/a2dp_ext.cc | 31 | ||||
-rw-r--r-- | system/stack/include/a2dp_ext.h | 7 | ||||
-rw-r--r-- | system/test/mock/mock_stack_a2dp_codec_config.cc | 7 |
3 files changed, 31 insertions, 14 deletions
diff --git a/system/stack/a2dp/a2dp_ext.cc b/system/stack/a2dp/a2dp_ext.cc index fafb688613..b938c93cd9 100644 --- a/system/stack/a2dp/a2dp_ext.cc +++ b/system/stack/a2dp/a2dp_ext.cc @@ -46,9 +46,8 @@ A2dpCodecConfigExt::A2dpCodecConfigExt(btav_a2dp_codec_index_t codec_index, bool is_source_(is_source) { // Load the local capabilities from the provider info. auto result = ::bluetooth::audio::a2dp::provider::codec_info( - codec_index, nullptr, ota_codec_config_, &codec_capability_); + codec_index, nullptr, ota_codec_config_, &codec_local_capability_); log::assert_that(result, "provider::codec_info unexpectdly failed"); - codec_selectable_capability_ = codec_capability_; } tA2DP_STATUS A2dpCodecConfigExt::setCodecConfig(const uint8_t* p_peer_codec_info, @@ -59,9 +58,8 @@ tA2DP_STATUS A2dpCodecConfigExt::setCodecConfig(const uint8_t* p_peer_codec_info } // Call get_a2dp_config to recompute best capabilities. - // This method need to update codec_capability_, codec_config_, - // and ota_codec_config_ using the local codec_user_config_, and input - // peer_codec_info. + // This method need to update codec_config_, and ota_codec_config_ + // using the local codec_user_config_, and input peer_codec_info. using namespace bluetooth::audio::a2dp; provider::a2dp_remote_capabilities capabilities = { .seid = 0, // the SEID does not matter here. @@ -76,11 +74,15 @@ tA2DP_STATUS A2dpCodecConfigExt::setCodecConfig(const uint8_t* p_peer_codec_info return AVDTP_UNSUPPORTED_CONFIGURATION; } - memcpy(ota_codec_config_, result->codec_config, sizeof(ota_codec_config_)); - memcpy(p_result_codec_config, result->codec_config, sizeof(ota_codec_config_)); + // Use the local capabilities for the selectable capabilities: + // the provider AIDL HAL does not provide an interface to parse the + // peer capabilities and the selectable capabilities cannot be + // computed. + codec_selectable_capability_ = codec_local_capability_; codec_config_ = result->codec_parameters; - codec_capability_ = result->codec_parameters; vendor_specific_parameters_ = result->vendor_specific_parameters; + memcpy(ota_codec_config_, result->codec_config, sizeof(ota_codec_config_)); + memcpy(p_result_codec_config, result->codec_config, sizeof(ota_codec_config_)); return A2DP_SUCCESS; } @@ -92,6 +94,19 @@ bool A2dpCodecConfigExt::setPeerCodecCapabilities(const uint8_t* /* p_peer_codec return true; } +void A2dpCodecConfigExt::setCodecConfig(btav_a2dp_codec_config_t codec_parameters, + uint8_t const codec_config[AVDT_CODEC_SIZE], + std::vector<uint8_t> const& vendor_specific_parameters) { + // Use the local capabilities for the selectable capabilities: + // the provider AIDL HAL does not provide an interface to parse the + // peer capabilities and the selectable capabilities cannot be + // computed. + codec_selectable_capability_ = codec_local_capability_; + codec_config_ = codec_parameters; + memcpy(ota_codec_config_, codec_config, sizeof(ota_codec_config_)); + vendor_specific_parameters_ = vendor_specific_parameters; +} + tA2DP_ENCODER_INTERFACE const a2dp_encoder_interface_ext = { .encoder_init = [](const tA2DP_ENCODER_INIT_PEER_PARAMS*, A2dpCodecConfig*, a2dp_source_read_callback_t, a2dp_source_enqueue_callback_t) {}, diff --git a/system/stack/include/a2dp_ext.h b/system/stack/include/a2dp_ext.h index ecada4bee7..f03b0ff53d 100644 --- a/system/stack/include/a2dp_ext.h +++ b/system/stack/include/a2dp_ext.h @@ -45,12 +45,7 @@ public: void setCodecConfig(btav_a2dp_codec_config_t codec_parameters, uint8_t const codec_config[AVDT_CODEC_SIZE], - std::vector<uint8_t> const& vendor_specific_parameters) { - codec_config_ = codec_parameters; - codec_capability_ = codec_parameters; - memcpy(ota_codec_config_, codec_config, sizeof(ota_codec_config_)); - vendor_specific_parameters_ = vendor_specific_parameters; - } + std::vector<uint8_t> const& vendor_specific_parameters); private: [[maybe_unused]] bool is_source_; // True if local is Source diff --git a/system/test/mock/mock_stack_a2dp_codec_config.cc b/system/test/mock/mock_stack_a2dp_codec_config.cc index 2e4bc3f517..f091e3f440 100644 --- a/system/test/mock/mock_stack_a2dp_codec_config.cc +++ b/system/test/mock/mock_stack_a2dp_codec_config.cc @@ -22,6 +22,7 @@ #include <string> #include "a2dp_codec_api.h" +#include "a2dp_ext.h" #include "bta/av/bta_av_int.h" #include "stack/include/bt_hdr.h" #include "test/common/mock_functions.h" @@ -319,3 +320,9 @@ void A2dpCodecConfig::setCodecPriority(btav_a2dp_codec_priority_t /* codec_prior } void A2dpCodecConfig::setDefaultCodecPriority() { inc_func_call_count(__func__); } void A2dpCodecs::debug_codec_dump(int /* fd */) { inc_func_call_count(__func__); } +void A2dpCodecConfigExt::setCodecConfig( + btav_a2dp_codec_config_t /*codec_parameters*/, + uint8_t const /*codec_config*/[AVDT_CODEC_SIZE], + std::vector<uint8_t> const& /*vendor_specific_parameters*/) { + inc_func_call_count(__func__); +} |