summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/stack/a2dp/a2dp_ext.cc31
-rw-r--r--system/stack/include/a2dp_ext.h7
-rw-r--r--system/test/mock/mock_stack_a2dp_codec_config.cc7
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__);
+}