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

Commit 34cd62d0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "[LE Audio] Handle later join case for 32k bidirectional dual mic" into main am: 373e5fbd

parents 53a722bd 373e5fbd
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1413,6 +1413,18 @@ bool LeAudioDeviceGroup::IsAudioSetConfigurationSupported(
    }
  }

  // when disabling 32k dual mic, for later join case, we need to
  // make sure the device is always choosing the config that its
  // sampling rate matches with the sampling rate which is used
  // when all devices in the group are connected.
  bool dual_bidirection_swb_supported_ = osi_property_get_bool(
      "bluetooth.leaudio.dual_bidirection_swb.supported", true);
  if (Size() > 1 && !dual_bidirection_swb_supported_ &&
      AudioSetConfigurationProvider::Get()->CheckConfigurationIsBiDirSwb(
          *audio_set_conf)) {
    return false;
  }

  LOG_DEBUG("Chosen ASE Configuration for group: %d, configuration: %s",
            this->group_id_, audio_set_conf->name.c_str());
  return true;
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ class AudioSetConfigurationProvider {
  static void Cleanup();
  virtual const set_configurations::AudioSetConfigurations* GetConfigurations(
      ::le_audio::types::LeAudioContextType content_type) const;
  virtual bool CheckConfigurationIsBiDirSwb(
      const set_configurations::AudioSetConfiguration& set_configuration) const;

 private:
  struct impl;
+22 −9
Original line number Diff line number Diff line
@@ -71,10 +71,8 @@ struct AudioSetConfigurationProviderJson {
  static constexpr auto kDefaultScenario = "Media";

  AudioSetConfigurationProviderJson(types::CodecLocation location) {
    dual_swb_bidirection_supported_ = osi_property_get_bool(
        "persist.bluetooth.leaudio_dual_bidirection_swb."
        "supported",
        true);
    dual_bidirection_swb_supported_ = osi_property_get_bool(
        "bluetooth.leaudio.dual_bidirection_swb.supported", true);
    ASSERT_LOG(LoadContent(kLeAudioSetConfigs, kLeAudioSetScenarios, location),
               ": Unable to load le audio set configuration files.");
  }
@@ -166,7 +164,7 @@ struct AudioSetConfigurationProviderJson {

  /* property to check if bidirectional sampling frequency >= 32k dual mic is
   * supported or not */
  bool dual_swb_bidirection_supported_;
  bool dual_bidirection_swb_supported_;

  static const bluetooth::le_audio::CodecSpecificConfiguration*
  LookupCodecSpecificParam(
@@ -435,7 +433,7 @@ struct AudioSetConfigurationProviderJson {
      }
    }

    if (!dual_swb_bidirection_supported_) {
    if (!dual_bidirection_swb_supported_) {
      if ((dual_dev_one_chan_stereo_sink_swb &&
           dual_dev_one_chan_stereo_source_swb) ||
          (single_dev_one_chan_stereo_sink_swb &&
@@ -525,9 +523,11 @@ struct AudioSetConfigurationProviderJson {

    LOG_DEBUG(": Updating %d config entries.", flat_configs->size());
    for (auto const& flat_cfg : *flat_configs) {
      configurations_.insert({flat_cfg->name()->str(),
                              AudioSetConfigurationFromFlat(
                                  flat_cfg, &codec_cfgs, &qos_cfgs, location)});
      auto configuration = AudioSetConfigurationFromFlat(flat_cfg, &codec_cfgs,
                                                         &qos_cfgs, location);
      if (!configuration.confs.empty()) {
        configurations_.insert({flat_cfg->name()->str(), configuration});
      }
    }

    return true;
@@ -740,4 +740,17 @@ AudioSetConfigurationProvider::GetConfigurations(
  return nullptr;
}

bool AudioSetConfigurationProvider::CheckConfigurationIsBiDirSwb(
    const set_configurations::AudioSetConfiguration& set_configuration) const {
  uint8_t dir = 0;

  for (const auto& conf : set_configuration.confs) {
    if (conf.codec.GetConfigSamplingFrequency() >=
        le_audio::LeAudioCodecConfiguration::kSampleRate32000) {
      dir |= conf.direction;
    }
  }
  return dir == le_audio::types::kLeAudioDirectionBoth;
}

}  // namespace le_audio