From 2e64b4d9f6883dea04d13a72fcaba6e31820ffb6 Mon Sep 17 00:00:00 2001 From: Patty Date: Thu, 6 Jan 2022 15:24:01 +0800 Subject: [PATCH] Update HAL structure to include offload capability for broadcast Bug: 205806028 Bug: 150670922 Test: make build Change-Id: Ife4a3585474999855ffb04f3946462a137fdc181 --- .../BluetoothAudioProvidersFactory.cpp | 2 +- bluetooth/audio/2.2/types.hal | 31 +++++++--- .../BluetoothAudioSupportedCodecsDB_2_2.cpp | 60 ++++++++++--------- .../BluetoothAudioSupportedCodecsDB_2_2.h | 2 +- 4 files changed, 56 insertions(+), 39 deletions(-) diff --git a/bluetooth/audio/2.2/default/BluetoothAudioProvidersFactory.cpp b/bluetooth/audio/2.2/default/BluetoothAudioProvidersFactory.cpp index 2fe31d5246..9dfc8289c5 100644 --- a/bluetooth/audio/2.2/default/BluetoothAudioProvidersFactory.cpp +++ b/bluetooth/audio/2.2/default/BluetoothAudioProvidersFactory.cpp @@ -239,7 +239,7 @@ Return BluetoothAudioProvidersFactory::getProviderCapabilities_2_2( LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH || sessionType == V2_1::SessionType:: LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) { - std::vector db_codec_capabilities = + std::vector db_codec_capabilities = android::bluetooth::audio::GetLeAudioOffloadCodecCapabilities( sessionType); if (db_codec_capabilities.size()) { diff --git a/bluetooth/audio/2.2/types.hal b/bluetooth/audio/2.2/types.hal index 8ec366060c..67558995f9 100644 --- a/bluetooth/audio/2.2/types.hal +++ b/bluetooth/audio/2.2/types.hal @@ -83,23 +83,22 @@ safe_union AudioConfiguration { safe_union AudioCapabilities { PcmParameters pcmCapabilities; CodecCapabilities codecCapabilities; - LeAudioCodecCapabilitiesPair leAudioCapabilities; + LeAudioCodecCapabilitiesSetting leAudioCapabilities; }; /** - * Used to specify th le audio capabilities pair of the Hardware offload encode and decode. + * Used to specify the le audio capabilities for unicast and broadcast hardware offload. */ -struct LeAudioCodecCapabilitiesPair{ - LeAudioMode mode; - LeAudioCodecCapability encodeCapability; - LeAudioCodecCapability decodeCapability; +struct LeAudioCodecCapabilitiesSetting{ + UnicastCapability unicastEncodeCapability; + UnicastCapability unicastDecodeCapability; + BroadcastCapability broadcastCapability; }; /** - * Used to specify the le audio capabilities of the codecs supported by Hardware offload - * for encode or decode. + * Used to specify the le audio unicast codec capabilities for hardware offload. */ -struct LeAudioCodecCapability { +struct UnicastCapability { CodecType codecType; AudioLocation supportedChannel; @@ -112,3 +111,17 @@ struct LeAudioCodecCapability { // Should use safe union when there is more than one codec Lc3Parameters capabilities; }; + +/** + * Used to specify the le audio broadcast codec capabilities for hardware offload. + */ +struct BroadcastCapability { + CodecType codecType; + AudioLocation supportedChannel; + + // Supported channel count for each stream + uint8_t channelCountPerStream; + + // Should use safe union when there is more than one codec + vec capabilities; +}; diff --git a/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.cpp b/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.cpp index 34cfd7efb7..4c99b0f620 100644 --- a/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.cpp +++ b/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.cpp @@ -30,16 +30,20 @@ using ::android::hardware::bluetooth::audio::V2_1::Lc3FrameDuration; using ::android::hardware::bluetooth::audio::V2_1::Lc3Parameters; using ::android::hardware::bluetooth::audio::V2_1::SampleRate; using ::android::hardware::bluetooth::audio::V2_2::AudioLocation; -using ::android::hardware::bluetooth::audio::V2_2::LeAudioCodecCapabilitiesPair; -using ::android::hardware::bluetooth::audio::V2_2::LeAudioCodecCapability; -using ::android::hardware::bluetooth::audio::V2_2::LeAudioMode; +using ::android::hardware::bluetooth::audio::V2_2::BroadcastCapability; +using ::android::hardware::bluetooth::audio::V2_2:: + LeAudioCodecCapabilitiesSetting; +using ::android::hardware::bluetooth::audio::V2_2::UnicastCapability; using SessionType_2_1 = ::android::hardware::bluetooth::audio::V2_1::SessionType; // Stores the list of offload supported capability -std::vector kDefaultOffloadLeAudioCapabilities; +std::vector kDefaultOffloadLeAudioCapabilities; -static const LeAudioCodecCapability kInvalidLc3Capability = { +static const UnicastCapability kInvalidUnicastCapability = { + .codecType = CodecType::UNKNOWN}; + +static const BroadcastCapability kInvalidBroadcastCapability = { .codecType = CodecType::UNKNOWN}; // Default Supported Codecs @@ -94,53 +98,53 @@ bool IsOffloadLeAudioConfigurationValid( return true; } -LeAudioCodecCapability composeLc3Capability(AudioLocation audioLocation, - uint8_t deviceCnt, - uint8_t channelCount, - Lc3Parameters capability) { - return LeAudioCodecCapability{.codecType = CodecType::LC3, - .supportedChannel = audioLocation, - .deviceCount = deviceCnt, - .channelCountPerDevice = channelCount, - .capabilities = capability}; +UnicastCapability composeUnicastLc3Capability(AudioLocation audioLocation, + uint8_t deviceCnt, + uint8_t channelCount, + Lc3Parameters capability) { + return UnicastCapability{.codecType = CodecType::LC3, + .supportedChannel = audioLocation, + .deviceCount = deviceCnt, + .channelCountPerDevice = channelCount, + .capabilities = capability}; } -std::vector GetLeAudioOffloadCodecCapabilities( +std::vector GetLeAudioOffloadCodecCapabilities( const SessionType_2_1& session_type) { if (session_type != SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH && session_type != SessionType_2_1::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) { - return std::vector(0); + return std::vector(0); } if (kDefaultOffloadLeAudioCapabilities.empty()) { for (auto [audioLocation, deviceCnt, channelCount] : supportedDeviceSetting) { for (auto capability : supportedLc3CapabilityList) { - LeAudioCodecCapability lc3Capability = composeLc3Capability( + UnicastCapability lc3Capability = composeUnicastLc3Capability( audioLocation, deviceCnt, channelCount, capability); - LeAudioCodecCapability lc3MonoCapability = - composeLc3Capability(monoAudio, 1, 1, capability); + UnicastCapability lc3MonoDecodeCapability = + composeUnicastLc3Capability(monoAudio, 1, 1, capability); // Adds the capability for encode only kDefaultOffloadLeAudioCapabilities.push_back( - {.mode = LeAudioMode::UNICAST, - .encodeCapability = lc3Capability, - .decodeCapability = kInvalidLc3Capability}); + {.unicastEncodeCapability = lc3Capability, + .unicastDecodeCapability = kInvalidUnicastCapability, + .broadcastCapability = kInvalidBroadcastCapability}); // Adds the capability for decode only kDefaultOffloadLeAudioCapabilities.push_back( - {.mode = LeAudioMode::UNICAST, - .encodeCapability = kInvalidLc3Capability, - .decodeCapability = lc3Capability}); + {.unicastEncodeCapability = kInvalidUnicastCapability, + .unicastDecodeCapability = lc3Capability, + .broadcastCapability = kInvalidBroadcastCapability}); // Adds the capability for the case that encode and decode exist at the // same time kDefaultOffloadLeAudioCapabilities.push_back( - {.mode = LeAudioMode::UNICAST, - .encodeCapability = lc3Capability, - .decodeCapability = lc3MonoCapability}); + {.unicastEncodeCapability = lc3Capability, + .unicastDecodeCapability = lc3MonoDecodeCapability, + .broadcastCapability = kInvalidBroadcastCapability}); } } } diff --git a/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.h b/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.h index 89da6a383f..34bba5f671 100644 --- a/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.h +++ b/bluetooth/audio/utils/session/BluetoothAudioSupportedCodecsDB_2_2.h @@ -31,7 +31,7 @@ bool IsOffloadLeAudioConfigurationValid( const ::android::hardware::bluetooth::audio::V2_2::LeAudioConfiguration& le_audio_codec_config); -std::vector +std::vector GetLeAudioOffloadCodecCapabilities( const ::android::hardware::bluetooth::audio::V2_1::SessionType& session_type);