Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 897756da authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Update HAL structure to include offload capability for broadcast" am:...

Merge "Update HAL structure to include offload capability for broadcast" am: f1605fae am: cd604443 am: 293d0429

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1936050

Change-Id: I63a364ad598d23614759cf809f3b4943e7db62db
parents 270df536 293d0429
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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()) {
+22 −9
Original line number Diff line number Diff line
@@ -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;
};
+32 −28
Original line number Diff line number Diff line
@@ -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,
UnicastCapability composeUnicastLc3Capability(AudioLocation audioLocation,
                                              uint8_t deviceCnt,
                                              uint8_t channelCount,
                                              Lc3Parameters capability) {
  return LeAudioCodecCapability{.codecType = CodecType::LC3,
  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});
      }
    }
  }
+1 −1
Original line number Diff line number Diff line
@@ -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);