mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge "Update HAL structure to include offload capability for broadcast"
This commit is contained in:
@@ -233,7 +233,7 @@ Return<void> BluetoothAudioProvidersFactory::getProviderCapabilities_2_2(
|
||||
LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
sessionType == V2_1::SessionType::
|
||||
LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
|
||||
std::vector<LeAudioCodecCapabilitiesPair> db_codec_capabilities =
|
||||
std::vector<LeAudioCodecCapabilitiesSetting> db_codec_capabilities =
|
||||
android::bluetooth::audio::GetLeAudioOffloadCodecCapabilities(
|
||||
sessionType);
|
||||
if (db_codec_capabilities.size()) {
|
||||
|
||||
@@ -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<Lc3Parameters> capabilities;
|
||||
};
|
||||
|
||||
@@ -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<LeAudioCodecCapabilitiesPair> kDefaultOffloadLeAudioCapabilities;
|
||||
std::vector<LeAudioCodecCapabilitiesSetting> 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<LeAudioCodecCapabilitiesPair> GetLeAudioOffloadCodecCapabilities(
|
||||
std::vector<LeAudioCodecCapabilitiesSetting> 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<LeAudioCodecCapabilitiesPair>(0);
|
||||
return std::vector<LeAudioCodecCapabilitiesSetting>(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});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ bool IsOffloadLeAudioConfigurationValid(
|
||||
const ::android::hardware::bluetooth::audio::V2_2::LeAudioConfiguration&
|
||||
le_audio_codec_config);
|
||||
|
||||
std::vector<hardware::bluetooth::audio::V2_2::LeAudioCodecCapabilitiesPair>
|
||||
std::vector<hardware::bluetooth::audio::V2_2::LeAudioCodecCapabilitiesSetting>
|
||||
GetLeAudioOffloadCodecCapabilities(
|
||||
const ::android::hardware::bluetooth::audio::V2_1::SessionType&
|
||||
session_type);
|
||||
|
||||
Reference in New Issue
Block a user