diff options
author | Sagar Verma <quic_sagarv@quicinc.com> | 2023-03-29 01:11:54 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2023-04-03 23:07:09 -0700 |
commit | 3f49166169ccfc42a8840f6d291a1aaa861744d5 (patch) | |
tree | 2e0cefe067d0753a4ee0a9b0579a8ed62912a1dc | |
parent | f20503c97e19542e15f2e94b0d4fc21fed70dfa1 (diff) |
A2DP: Pass codec info params to avoid recalculation
Pass codec info params also to avoid recalculation
CRs-Fixed: 3442651
Change-Id: Ib95b7117a13e5e331b0b3b0d092ec767076249bb
-rw-r--r-- | audio_hal_interface/a2dp_encoding.cc | 6 | ||||
-rw-r--r-- | audio_hal_interface/aidl/a2dp_encoding.cc | 3 | ||||
-rw-r--r-- | btif/src/btif_a2dp_audio_interface.cc | 6 | ||||
-rw-r--r-- | stack/a2dp/a2dp_sbc.cc | 5 | ||||
-rw-r--r-- | stack/a2dp/a2dp_sbc_encoder.cc | 18 | ||||
-rw-r--r-- | stack/include/a2dp_sbc.h | 4 | ||||
-rw-r--r-- | stack/include/a2dp_sbc_encoder.h | 2 |
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 |