summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCNSS_WLAN Service <cnssbldsw@qualcomm.com>2023-04-20 00:32:14 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2023-04-20 00:32:14 -0700
commit3566fd5cd55f1a6eed81d3bcca10bcb4b3458203 (patch)
tree8c7bd162fa961143f9a35e147306992a951b8b7e
parent27360bf0cdf63344625638f2c5a79ed29ec726bc (diff)
parent3f49166169ccfc42a8840f6d291a1aaa861744d5 (diff)
Merge "A2DP: Pass codec info params to avoid recalculation" into bt-sys.lnx.13.0
-rw-r--r--audio_hal_interface/a2dp_encoding.cc6
-rw-r--r--audio_hal_interface/aidl/a2dp_encoding.cc3
-rw-r--r--btif/src/btif_a2dp_audio_interface.cc6
-rw-r--r--stack/a2dp/a2dp_sbc.cc5
-rw-r--r--stack/a2dp/a2dp_sbc_encoder.cc18
-rw-r--r--stack/include/a2dp_sbc.h4
-rw-r--r--stack/include/a2dp_sbc_encoder.h2
7 files changed, 20 insertions, 24 deletions
diff --git a/audio_hal_interface/a2dp_encoding.cc b/audio_hal_interface/a2dp_encoding.cc
index c4a6692b2..2dffdb89b 100644
--- a/audio_hal_interface/a2dp_encoding.cc
+++ b/audio_hal_interface/a2dp_encoding.cc
@@ -1425,7 +1425,8 @@ bool a2dp_get_selected_hal_codec_config(CodecConfiguration* codec_config) {
// Obtain the MTU
codec_config->peerMtu = peer_param.peer_mtu - A2DP_HEADER_SIZE;
if (A2DP_MEDIA_CT_SBC == codec_type) {
- bitrate = A2DP_GetOffloadBitrateSbc(a2dp_codec_configs, peer_param.is_peer_edr);
+ bitrate = A2DP_GetOffloadBitrateSbc(a2dp_codec_configs, peer_param.is_peer_edr,
+ (const uint8_t*)p_codec_info);
LOG(INFO) << __func__ << "SBC bitrate" << bitrate;
codec_config->encodedAudioBitrate = bitrate * 1000;
}
@@ -2135,7 +2136,8 @@ bool a2dp_get_selected_hal_codec_config_2_1(CodecConfiguration_2_1* codec_config
// Obtain the MTU
codec_config->peerMtu = peer_param.peer_mtu - A2DP_HEADER_SIZE;
if (A2DP_MEDIA_CT_SBC == codec_type) {
- bitrate = A2DP_GetOffloadBitrateSbc(a2dp_codec_configs, peer_param.is_peer_edr);
+ bitrate = A2DP_GetOffloadBitrateSbc(a2dp_codec_configs, peer_param.is_peer_edr,
+ (const uint8_t*)p_codec_info);
LOG(INFO) << __func__ << "SBC bitrate" << bitrate;
codec_config->encodedAudioBitrate = bitrate * 1000;
}
diff --git a/audio_hal_interface/aidl/a2dp_encoding.cc b/audio_hal_interface/aidl/a2dp_encoding.cc
index 63c802e2b..36bfe8340 100644
--- a/audio_hal_interface/aidl/a2dp_encoding.cc
+++ b/audio_hal_interface/aidl/a2dp_encoding.cc
@@ -334,7 +334,8 @@ bool a2dp_get_selected_hal_codec_config(CodecConfiguration* codec_config) {
codec_type = A2DP_GetCodecType((const uint8_t*)p_codec_info);
codec_config->peerMtu = peer_param.peer_mtu - A2DP_HEADER_SIZE;
if (A2DP_MEDIA_CT_SBC == codec_type) {
- bitrate = A2DP_GetOffloadBitrateSbc(a2dp_config, peer_param.is_peer_edr);
+ bitrate = A2DP_GetOffloadBitrateSbc(a2dp_config, peer_param.is_peer_edr,
+ (const uint8_t*)p_codec_info);
LOG(INFO) << __func__ << "AIDL SBC bitrate" << bitrate;
codec_config->encodedAudioBitrate = bitrate * 1000;
} else if (A2DP_MEDIA_CT_NON_A2DP == codec_type) {
diff --git a/btif/src/btif_a2dp_audio_interface.cc b/btif/src/btif_a2dp_audio_interface.cc
index e27246416..355f077fd 100644
--- a/btif/src/btif_a2dp_audio_interface.cc
+++ b/btif/src/btif_a2dp_audio_interface.cc
@@ -816,7 +816,8 @@ uint8_t btif_a2dp_audio_process_request(uint8_t cmd)
peer_param.peer_mtu = peer_param.peer_mtu - A2DP_HEADER_SIZE;
if (A2DP_MEDIA_CT_SBC == codec_type)
{
- bitrate = A2DP_GetOffloadBitrateSbc(CodecConfig, peer_param.is_peer_edr);
+ bitrate = A2DP_GetOffloadBitrateSbc(CodecConfig, peer_param.is_peer_edr,
+ (const uint8_t*)p_codec_info);
LOG_INFO(LOG_TAG,"bitrate = %d", bitrate);
bitrate *= 1000;
}
@@ -1263,7 +1264,8 @@ uint8_t btif_a2dp_audio_process_request(uint8_t cmd)
peer_param.peer_mtu = peer_param.peer_mtu - A2DP_HEADER_SIZE;
if (A2DP_MEDIA_CT_SBC == codec_type)
{
- bitrate = A2DP_GetOffloadBitrateSbc(CodecConfig, peer_param.is_peer_edr);
+ bitrate = A2DP_GetOffloadBitrateSbc(CodecConfig, peer_param.is_peer_edr,
+ (const uint8_t*)p_codec_info);
LOG_INFO(LOG_TAG,"bitrate = %d", bitrate);
bitrate *= 1000;
}
diff --git a/stack/a2dp/a2dp_sbc.cc b/stack/a2dp/a2dp_sbc.cc
index 8b61db886..743b173bd 100644
--- a/stack/a2dp/a2dp_sbc.cc
+++ b/stack/a2dp/a2dp_sbc.cc
@@ -746,8 +746,9 @@ int A2DP_GetMaxBitpoolSbc(const uint8_t* p_codec_info) {
return sbc_cie.max_bitpool;
}
-uint16_t A2DP_GetOffloadBitrateSbc(A2dpCodecConfig* a2dp_codec_config, bool peer_edr) {
- return a2dp_sbc_calulate_offload_bitrate(a2dp_codec_config, peer_edr);
+uint16_t A2DP_GetOffloadBitrateSbc(A2dpCodecConfig* a2dp_codec_config, bool peer_edr,
+ const uint8_t* p_codec_info) {
+ return a2dp_sbc_calulate_offload_bitrate(a2dp_codec_config, peer_edr, p_codec_info);
}
int A2DP_GetSinkTrackChannelTypeSbc(const uint8_t* p_codec_info) {
tA2DP_SBC_CIE sbc_cie;
diff --git a/stack/a2dp/a2dp_sbc_encoder.cc b/stack/a2dp/a2dp_sbc_encoder.cc
index d84bc88da..67c909f2d 100644
--- a/stack/a2dp/a2dp_sbc_encoder.cc
+++ b/stack/a2dp/a2dp_sbc_encoder.cc
@@ -955,8 +955,8 @@ static uint32_t a2dp_sbc_frame_length(void) {
return frame_len;
}
-uint16_t a2dp_sbc_calulate_offload_bitrate(A2dpCodecConfig* a2dp_codec_config, bool is_peer_edr) {
- uint8_t codec_info[AVDT_CODEC_SIZE];
+uint16_t a2dp_sbc_calulate_offload_bitrate(A2dpCodecConfig* a2dp_codec_config, bool is_peer_edr,
+ const uint8_t *p_codec_info) {
uint16_t s16SamplingFreq,sample_rate;
int16_t s16BitPool = 0;
int16_t s16BitRate;
@@ -969,14 +969,7 @@ uint16_t a2dp_sbc_calulate_offload_bitrate(A2dpCodecConfig* a2dp_codec_config, b
uint16_t s16AllocationMethod, s16NumOfChannels;
uint16_t offload_bitrate;
LOG_ERROR(LOG_TAG,"%s is peer edr = %d",__func__, is_peer_edr);
- if (!a2dp_codec_config->copyOutOtaCodecConfig(codec_info)) {
- LOG_ERROR(LOG_TAG,
- "%s: Cannot update the codec encoder for %s: "
- "invalid codec config",
- __func__, a2dp_codec_config->name().c_str());
- return 0;
- }
- const uint8_t* p_codec_info = codec_info;
+
min_bitpool = A2DP_GetMinBitpoolSbc(p_codec_info);
max_bitpool = A2DP_GetMaxBitpoolSbc(p_codec_info);
// The feeding parameters
@@ -1066,11 +1059,6 @@ uint16_t a2dp_sbc_calulate_offload_bitrate(A2dpCodecConfig* a2dp_codec_config, b
(((32 / s16NumOfChannels) +
(4 * s16NumOfSubBands)) /
s16NumOfBlocks));
-
- //uint16_t m16BitPool =
- // (s16BitPool > (16 * s16NumOfSubBands))
- // ? (16 * s16NumOfSubBands)
- // : s16BitPool;
}
if (s16BitPool < 0) s16BitPool = 0;
diff --git a/stack/include/a2dp_sbc.h b/stack/include/a2dp_sbc.h
index 1902b1b5c..3b9d0cf3c 100644
--- a/stack/include/a2dp_sbc.h
+++ b/stack/include/a2dp_sbc.h
@@ -261,8 +261,10 @@ bool A2DP_InitCodecConfigSbcSink(tAVDT_CFG* p_cfg);
// Get SBC bitrate for offload mode
// |config| contains codec info
// |is_peer_edr| flag is true if peer is edr else false
+// |p_codec_info| contains codec param info
// Returns |uint16_t| bitrate value
-uint16_t A2DP_GetOffloadBitrateSbc(A2dpCodecConfig* config, bool is_peer_edr);
+uint16_t A2DP_GetOffloadBitrateSbc(A2dpCodecConfig* config, bool is_peer_edr,
+ const uint8_t* p_codec_info);
// Checks peer initiated setconfig with DUT supported config
// and returns proper status.
diff --git a/stack/include/a2dp_sbc_encoder.h b/stack/include/a2dp_sbc_encoder.h
index 79c66f53a..86402efdb 100644
--- a/stack/include/a2dp_sbc_encoder.h
+++ b/stack/include/a2dp_sbc_encoder.h
@@ -65,5 +65,5 @@ void a2dp_sbc_send_frames(uint64_t timestamp_us);
// |peer_edr| flag for peer supports edr
// Returns |uint16_t| calculated bitrare
uint16_t a2dp_sbc_calulate_offload_bitrate(A2dpCodecConfig* a2dp_codec_config,
- bool peer_edr);
+ bool peer_edr, const uint8_t* p_codec_info);
#endif // A2DP_SBC_ENCODER_H