diff options
author | Alice Kuo <aliceypkuo@google.com> | 2022-02-09 14:44:29 +0800 |
---|---|---|
committer | Jack He <siyuanh@google.com> | 2022-02-09 12:40:10 -0800 |
commit | e80a57685019eec22086a8464b7b44af3ced56f9 (patch) | |
tree | a2e9b89fb13964b13a98a7974690b747376c2872 | |
parent | 16a154767a6ae0b5c9adf2af5c87d17f57a16974 (diff) |
BT: Broadcast AIDL more handle on the default implementation
* seperate the provider for unicast and broadcast
* add handle for the audio configuration broadcast offload
Bug: 150670922
Test: make
Tag: #feature
Change-Id: Ie41496be24e3742b2f1fa438bc4ed4b127e72dd0
7 files changed, 43 insertions, 5 deletions
diff --git a/bluetooth/audio/aidl/default/BluetoothAudioProviderFactory.cpp b/bluetooth/audio/aidl/default/BluetoothAudioProviderFactory.cpp index d709ab601a..1e1680a4fd 100644 --- a/bluetooth/audio/aidl/default/BluetoothAudioProviderFactory.cpp +++ b/bluetooth/audio/aidl/default/BluetoothAudioProviderFactory.cpp @@ -65,10 +65,12 @@ ndk::ScopedAStatus BluetoothAudioProviderFactory::openProvider( provider = ndk::SharedRefBase::make<LeAudioOffloadInputAudioProvider>(); break; case SessionType::LE_AUDIO_BROADCAST_SOFTWARE_ENCODING_DATAPATH: - provider = ndk::SharedRefBase::make<LeAudioSoftwareOutputAudioProvider>(); + provider = + ndk::SharedRefBase::make<LeAudioSoftwareBroadcastAudioProvider>(); break; case SessionType::LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH: - provider = ndk::SharedRefBase::make<LeAudioOffloadOutputAudioProvider>(); + provider = + ndk::SharedRefBase::make<LeAudioOffloadBroadcastAudioProvider>(); break; default: provider = nullptr; @@ -99,7 +101,10 @@ ndk::ScopedAStatus BluetoothAudioProviderFactory::getProviderCapabilities( } else if (session_type == SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH || session_type == - SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) { + SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH || + session_type == + SessionType:: + LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH) { std::vector<LeAudioCodecCapabilitiesSetting> db_codec_capabilities = BluetoothAudioCodecs::GetLeAudioOffloadCodecCapabilities(session_type); if (db_codec_capabilities.size()) { diff --git a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp index 72ac9bdede..7a28513157 100644 --- a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp +++ b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp @@ -38,6 +38,12 @@ LeAudioOffloadInputAudioProvider::LeAudioOffloadInputAudioProvider() session_type_ = SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH; } +LeAudioOffloadBroadcastAudioProvider::LeAudioOffloadBroadcastAudioProvider() + : LeAudioOffloadAudioProvider() { + session_type_ = + SessionType::LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH; +} + LeAudioOffloadAudioProvider::LeAudioOffloadAudioProvider() : BluetoothAudioProvider() {} diff --git a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h index a27a2e71ce..6509a9e2b4 100644 --- a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h +++ b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h @@ -48,6 +48,12 @@ class LeAudioOffloadInputAudioProvider : public LeAudioOffloadAudioProvider { LeAudioOffloadInputAudioProvider(); }; +class LeAudioOffloadBroadcastAudioProvider + : public LeAudioOffloadAudioProvider { + public: + LeAudioOffloadBroadcastAudioProvider(); +}; + } // namespace audio } // namespace bluetooth } // namespace hardware diff --git a/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.cpp b/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.cpp index 67b7d60c0c..0fe205efe1 100644 --- a/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.cpp +++ b/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.cpp @@ -55,6 +55,11 @@ LeAudioSoftwareInputAudioProvider::LeAudioSoftwareInputAudioProvider() session_type_ = SessionType::LE_AUDIO_SOFTWARE_DECODING_DATAPATH; } +LeAudioSoftwareBroadcastAudioProvider::LeAudioSoftwareBroadcastAudioProvider() + : LeAudioSoftwareAudioProvider() { + session_type_ = SessionType::LE_AUDIO_BROADCAST_SOFTWARE_ENCODING_DATAPATH; +} + LeAudioSoftwareAudioProvider::LeAudioSoftwareAudioProvider() : BluetoothAudioProvider(), data_mq_(nullptr) {} @@ -78,7 +83,9 @@ ndk::ScopedAStatus LeAudioSoftwareAudioProvider::startSession( } uint32_t buffer_modifier = 0; - if (session_type_ == SessionType::LE_AUDIO_SOFTWARE_ENCODING_DATAPATH) + if (session_type_ == SessionType::LE_AUDIO_SOFTWARE_ENCODING_DATAPATH || + session_type_ == + SessionType::LE_AUDIO_BROADCAST_SOFTWARE_ENCODING_DATAPATH) buffer_modifier = kBufferOutCount; else if (session_type_ == SessionType::LE_AUDIO_SOFTWARE_DECODING_DATAPATH) buffer_modifier = kBufferInCount; diff --git a/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.h b/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.h index fa581820c6..ace4bff6a8 100644 --- a/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.h +++ b/bluetooth/audio/aidl/default/LeAudioSoftwareAudioProvider.h @@ -51,6 +51,12 @@ class LeAudioSoftwareInputAudioProvider : public LeAudioSoftwareAudioProvider { LeAudioSoftwareInputAudioProvider(); }; +class LeAudioSoftwareBroadcastAudioProvider + : public LeAudioSoftwareAudioProvider { + public: + LeAudioSoftwareBroadcastAudioProvider(); +}; + } // namespace audio } // namespace bluetooth } // namespace hardware diff --git a/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp b/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp index f626db83bd..12d4d3b397 100644 --- a/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp +++ b/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp @@ -94,6 +94,8 @@ const AudioConfiguration BluetoothAudioSession::GetAudioConfig() { case SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH: case SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH: return AudioConfiguration(LeAudioConfiguration{}); + case SessionType::LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH: + return AudioConfiguration(LeAudioBroadcastConfiguration{}); default: return AudioConfiguration(PcmConfiguration{}); } @@ -137,6 +139,8 @@ bool BluetoothAudioSession::IsSessionReady() { SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH || session_type_ == SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH || + session_type_ == + SessionType::LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH || (data_mq_ != nullptr && data_mq_->isValid())); return stack_iface_ != nullptr && is_mq_valid && audio_config_ != nullptr; } @@ -259,7 +263,9 @@ bool BluetoothAudioSession::UpdateAudioConfig( (session_type_ == SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH || session_type_ == SessionType::HEARING_AID_SOFTWARE_ENCODING_DATAPATH || session_type_ == SessionType::LE_AUDIO_SOFTWARE_DECODING_DATAPATH || - session_type_ == SessionType::LE_AUDIO_SOFTWARE_ENCODING_DATAPATH); + session_type_ == SessionType::LE_AUDIO_SOFTWARE_ENCODING_DATAPATH || + session_type_ == + SessionType::LE_AUDIO_BROADCAST_SOFTWARE_ENCODING_DATAPATH); bool is_offload_a2dp_session = (session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH); bool is_offload_le_audio_session = diff --git a/bluetooth/audio/utils/aidl_session/BluetoothAudioSessionControl.h b/bluetooth/audio/utils/aidl_session/BluetoothAudioSessionControl.h index aff01e5a26..451a31fb7e 100644 --- a/bluetooth/audio/utils/aidl_session/BluetoothAudioSessionControl.h +++ b/bluetooth/audio/utils/aidl_session/BluetoothAudioSessionControl.h @@ -86,6 +86,8 @@ class BluetoothAudioSessionControl { case SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH: case SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH: return AudioConfiguration(LeAudioConfiguration{}); + case SessionType::LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH: + return AudioConfiguration(LeAudioBroadcastConfiguration{}); default: return AudioConfiguration(PcmConfiguration{}); } |