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

Commit 40cd3a1f authored by Łukasz Rymanowski's avatar Łukasz Rymanowski Committed by Gerrit Code Review
Browse files

Merge "LeAudio/Broadcast: Fix channel map creation" into main

parents 2e609b44 b01c7307
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -194,6 +194,12 @@ struct BroadcastSubgroupCodecConfig {
    return 0;
  }

  /* Note: this should be used for tests only */
  const std::vector<BroadcastSubgroupBisCodecConfig>& GetBisCodecConfigs()
      const {
    return bis_codec_configs_;
  }

  std::optional<types::LeAudioLtvMap> GetBisCodecSpecData(
      uint8_t bis_idx) const {
    if (bis_codec_configs_.empty()) return std::nullopt;
+5 −3
Original line number Diff line number Diff line
@@ -303,10 +303,12 @@ struct codec_manager_impl {
          core_config.GetChannelCountPerIsoStream());

      // Enable the individual channels per BIS in the stream map
      auto all_channels = adsp_config.codec.channel_count_per_iso_stream;
      uint8_t channel_alloc_idx = 0;
      for (auto& [_, channels] : broadcast_config.stream_map) {
        for (uint8_t i = 0; i < adsp_config.codec.channel_count_per_iso_stream;
             ++i) {
          channels |= (0b1 << i);
        if (all_channels) {
          channels |= (0b1 << channel_alloc_idx++);
          --all_channels;
        }
      }

+39 −2
Original line number Diff line number Diff line
@@ -490,9 +490,23 @@ TEST_F(CodecManagerTestAdsp, test_capabilities) {
}

TEST_F(CodecManagerTestAdsp, test_broadcast_config) {
  static const set_configurations::CodecConfigSetting bc_lc3_48_2 = {
      .id = kLeAudioCodecIdLc3,
      .params = types::LeAudioLtvMap({
          LTV_ENTRY_SAMPLING_FREQUENCY(
              codec_spec_conf::kLeAudioSamplingFreq48000Hz),
          LTV_ENTRY_FRAME_DURATION(
              codec_spec_conf::kLeAudioCodecFrameDur10000us),
          LTV_ENTRY_AUDIO_CHANNEL_ALLOCATION(
              codec_spec_conf::kLeAudioLocationStereo),
          LTV_ENTRY_OCTETS_PER_CODEC_FRAME(100),
      }),
      .channel_count_per_iso_stream = 2,
  };

  std::vector<AudioSetConfiguration> offload_capabilities = {
      {.name = "Test_Broadcast_Config_No_Dev_lc3_48_2",
       .confs = {.sink = {set_configurations::AseConfiguration(lc3_48_2)},
       .confs = {.sink = {set_configurations::AseConfiguration(bc_lc3_48_2)},
                 .source = {}},
       .topology_info = {{{0, 0}}}}};
  set_mock_offload_capabilities(offload_capabilities);
@@ -510,14 +524,37 @@ TEST_F(CodecManagerTestAdsp, test_broadcast_config) {
  ASSERT_EQ(48000u, cfg->GetSamplingFrequencyHzMax());
  ASSERT_EQ(10000u, cfg->GetSduIntervalUs());
  ASSERT_EQ(100u, cfg->GetMaxSduOctets());
  ASSERT_EQ(1lu, cfg->subgroups.size());
  ASSERT_EQ(2lu, cfg->subgroups.at(0).GetNumBis());
  ASSERT_EQ(2lu, cfg->subgroups.at(0).GetNumChannelsTotal());

  ASSERT_EQ(2lu, cfg->subgroups.at(0).GetBisCodecConfigs().at(0).GetNumBis());
  ASSERT_EQ(2lu,
            cfg->subgroups.at(0).GetBisCodecConfigs().at(0).GetNumChannels());
  ASSERT_EQ(
      1lu,
      cfg->subgroups.at(0).GetBisCodecConfigs().at(0).GetNumChannelsPerBis());

  // Clean up the before testing any other offload capabilities.
  codec_manager->Stop();
}

TEST_F(CodecManagerTestAdsp, test_update_broadcast_offloader) {
  static const set_configurations::CodecConfigSetting bc_lc3_48_2 = {
      .id = kLeAudioCodecIdLc3,
      .params = types::LeAudioLtvMap({
          LTV_ENTRY_SAMPLING_FREQUENCY(
              codec_spec_conf::kLeAudioSamplingFreq48000Hz),
          LTV_ENTRY_FRAME_DURATION(
              codec_spec_conf::kLeAudioCodecFrameDur10000us),
          LTV_ENTRY_AUDIO_CHANNEL_ALLOCATION(
              codec_spec_conf::kLeAudioLocationStereo),
          LTV_ENTRY_OCTETS_PER_CODEC_FRAME(100),
      }),
      .channel_count_per_iso_stream = 2,
  };
  std::vector<AudioSetConfiguration> offload_capabilities = {
      {.confs = {.sink = {set_configurations::AseConfiguration(lc3_48_2)},
      {.confs = {.sink = {set_configurations::AseConfiguration(bc_lc3_48_2)},
                 .source = {}},
       .topology_info = {{{0, 0}}}}};
  set_mock_offload_capabilities(offload_capabilities);