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

Commit 782153a8 authored by Jakub Tyszkowski's avatar Jakub Tyszkowski
Browse files

LeAudio/Broadcaster: Improve audio location selection

With this we select proper audio location when configs are split
into two subconfigs (when one BIS has different parameters than the
other).

Bug: 308428644
Bug: 313054645
Test: atest bluetooth-test-audio-hal-le-audio-software bluetooth-test-audio-hal-aidl-leaudio-utils bluetooth_le_audio_test bluetooth_le_audio_client_test bluetooth_test_broadcaster bluetooth_test_broadcaster_state_machine bluetooth_le_audio_codec_manager_test
Change-Id: I3921e6e3ff5b72547a1f7573c6296928cfb87386
parent 3ef98486
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -232,7 +232,8 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
          }

          // Check for non vendor LTVs
          auto config_ltv = subgroup_config.GetBisCodecSpecData(bis_num);
          auto config_ltv =
              subgroup_config.GetBisCodecSpecData(bis_num, bis_cfg_idx);
          if (config_ltv) {
            // Remove the part which is common with the parent subgroup
            // parameters
+1 −1
Original line number Diff line number Diff line
@@ -751,7 +751,7 @@ static BasicAudioAnnouncementData prepareAnnouncement(
      }

      // Check for non vendor LTVs
      auto config_ltv = codec_config.GetBisCodecSpecData(bis_num);
      auto config_ltv = codec_config.GetBisCodecSpecData(bis_num, cfg_idx);
      if (config_ltv) {
        bis_config.codec_specific_params = config_ltv->Values();
      }
+6 −4
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ struct BroadcastSubgroupCodecConfig {

    // Currently not a single software vendor codec was integrated and only the
    // LTVs parameters are understood by the BT stack.
    auto opt_ltvs = GetBisCodecSpecData(bis_idx);
    auto opt_ltvs = GetBisCodecSpecData(bis_idx, 0);
    if (opt_ltvs) {
      return opt_ltvs->GetAsCoreCodecConfig().octets_per_codec_frame.value_or(
                 0) *
@@ -202,9 +202,11 @@ struct BroadcastSubgroupCodecConfig {
  }

  std::optional<types::LeAudioLtvMap> GetBisCodecSpecData(
      uint8_t bis_idx) const {
      uint8_t bis_idx, uint8_t bis_config_idx) const {
    if (bis_codec_configs_.empty()) return std::nullopt;
    auto config = bis_codec_configs_.at(0);
    log::assert_that(bis_config_idx < bis_codec_configs_.size(),
                     "Invalid bis config index");
    auto config = bis_codec_configs_.at(bis_config_idx);
    if ((bis_idx != 0) && (bis_idx < bis_codec_configs_.size())) {
      config = bis_codec_configs_.at(bis_idx);
    }
@@ -216,7 +218,7 @@ struct BroadcastSubgroupCodecConfig {
    auto cfg = config.GetCodecSpecData();
    /* Set the audio locations if not set */
    if (!cfg.Find(codec_spec_conf::kLeAudioLtvTypeAudioChannelAllocation)) {
      switch (bis_idx) {
      switch (bis_config_idx + bis_idx) {
        case 0:
          cfg.Add(codec_spec_conf::kLeAudioLtvTypeAudioChannelAllocation,
                  codec_spec_conf::kLeAudioLocationFrontLeft);
+1 −1
Original line number Diff line number Diff line
@@ -465,7 +465,7 @@ static BasicAudioAnnouncementData prepareAnnouncement(
      }

      // Check for non vendor LTVs
      auto config_ltv = codec_config.GetBisCodecSpecData(bis_idx);
      auto config_ltv = codec_config.GetBisCodecSpecData(bis_num, bis_idx);
      if (config_ltv) {
        bis_config.codec_specific_params = config_ltv->Values();
      }