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

Commit f4d83fbf authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix crash for getting offload capability" into tm-dev am: d0a5a350 am: 3ff3786d

parents 08382548 3ff3786d
Loading
Loading
Loading
Loading
+1 −5
Original line number Original line Diff line number Diff line
@@ -3623,10 +3623,6 @@ void LeAudioClient::Initialize(
      << ", LE Audio Client requires Bluetooth Audio HAL V2.1 at least. Either "
      << ", LE Audio Client requires Bluetooth Audio HAL V2.1 at least. Either "
         "disable LE Audio Profile, or update your HAL";
         "disable LE Audio Profile, or update your HAL";


  // TODO: The capability list should pass to the codec manager once it's ready
  std::vector<::le_audio::set_configurations::AudioSetConfiguration>
      capabilities = ::bluetooth::audio::le_audio::get_offload_capabilities();

  IsoManager::GetInstance()->Start();
  IsoManager::GetInstance()->Start();


  if (leAudioClientAudioSource == nullptr)
  if (leAudioClientAudioSource == nullptr)
@@ -3642,7 +3638,7 @@ void LeAudioClient::Initialize(
  instance = new LeAudioClientImpl(callbacks_, stateMachineCallbacks, initCb);
  instance = new LeAudioClientImpl(callbacks_, stateMachineCallbacks, initCb);


  IsoManager::GetInstance()->RegisterCigCallbacks(stateMachineHciCallbacks);
  IsoManager::GetInstance()->RegisterCigCallbacks(stateMachineHciCallbacks);
  CodecManager::GetInstance()->Start(offloading_preference, capabilities);
  CodecManager::GetInstance()->Start(offloading_preference);
}
}


void LeAudioClient::DebugDump(int fd) {
void LeAudioClient::DebugDump(int fd) {
+12 −15
Original line number Original line Diff line number Diff line
@@ -45,8 +45,7 @@ namespace le_audio {
struct codec_manager_impl {
struct codec_manager_impl {
 public:
 public:
  codec_manager_impl(
  codec_manager_impl(
      const std::vector<btle_audio_codec_config_t>& offloading_preference,
      const std::vector<btle_audio_codec_config_t>& offloading_preference) {
      const std::vector<AudioSetConfiguration>& adsp_capabilities) {
    offload_enable_ = osi_property_get_bool(
    offload_enable_ = osi_property_get_bool(
                          "ro.bluetooth.leaudio_offload.supported", false) &&
                          "ro.bluetooth.leaudio_offload.supported", false) &&
                      !osi_property_get_bool(
                      !osi_property_get_bool(
@@ -71,7 +70,7 @@ struct codec_manager_impl {
                            kIsoDataPathPlatformDefault, {});
                            kIsoDataPathPlatformDefault, {});
    btm_configure_data_path(btm_data_direction::CONTROLLER_TO_HOST,
    btm_configure_data_path(btm_data_direction::CONTROLLER_TO_HOST,
                            kIsoDataPathPlatformDefault, {});
                            kIsoDataPathPlatformDefault, {});
    UpdateOffloadCapability(offloading_preference, adsp_capabilities);
    UpdateOffloadCapability(offloading_preference);
    SetCodecLocation(CodecLocation::ADSP);
    SetCodecLocation(CodecLocation::ADSP);
  }
  }
  ~codec_manager_impl() {
  ~codec_manager_impl() {
@@ -218,8 +217,7 @@ struct codec_manager_impl {
  }
  }


  void UpdateOffloadCapability(
  void UpdateOffloadCapability(
      const std::vector<btle_audio_codec_config_t>& offloading_preference,
      const std::vector<btle_audio_codec_config_t>& offloading_preference) {
      const std::vector<AudioSetConfiguration>& adsp_capabilities) {
    LOG(INFO) << __func__;
    LOG(INFO) << __func__;
    std::unordered_set<uint8_t> offload_preference_set;
    std::unordered_set<uint8_t> offload_preference_set;


@@ -228,6 +226,10 @@ struct codec_manager_impl {
      return;
      return;
    }
    }


    std::vector<::le_audio::set_configurations::AudioSetConfiguration>
        adsp_capabilities =
            ::bluetooth::audio::le_audio::get_offload_capabilities();

    for (auto codec : offloading_preference) {
    for (auto codec : offloading_preference) {
      auto it = btle_audio_codec_type_map_.find(codec.codec_type);
      auto it = btle_audio_codec_type_map_.find(codec.codec_type);


@@ -272,12 +274,10 @@ struct CodecManager::impl {
  impl(const CodecManager& codec_manager) : codec_manager_(codec_manager) {}
  impl(const CodecManager& codec_manager) : codec_manager_(codec_manager) {}


  void Start(
  void Start(
      const std::vector<btle_audio_codec_config_t>& offloading_preference,
      const std::vector<btle_audio_codec_config_t>& offloading_preference) {
      const std::vector<set_configurations::AudioSetConfiguration>&
          adsp_capabilities) {
    LOG_ASSERT(!codec_manager_impl_);
    LOG_ASSERT(!codec_manager_impl_);
    codec_manager_impl_ = std::make_unique<codec_manager_impl>(
    codec_manager_impl_ =
        offloading_preference, adsp_capabilities);
        std::make_unique<codec_manager_impl>(offloading_preference);
  }
  }


  void Stop() {
  void Stop() {
@@ -294,11 +294,8 @@ struct CodecManager::impl {
CodecManager::CodecManager() : pimpl_(std::make_unique<impl>(*this)) {}
CodecManager::CodecManager() : pimpl_(std::make_unique<impl>(*this)) {}


void CodecManager::Start(
void CodecManager::Start(
    const std::vector<btle_audio_codec_config_t>& offloading_preference,
    const std::vector<btle_audio_codec_config_t>& offloading_preference) {
    const std::vector<set_configurations::AudioSetConfiguration>&
  if (!pimpl_->IsRunning()) pimpl_->Start(offloading_preference);
        adsp_capabilities) {
  if (!pimpl_->IsRunning())
    pimpl_->Start(offloading_preference, adsp_capabilities);
}
}


void CodecManager::Stop() {
void CodecManager::Stop() {
+2 −5
Original line number Original line Diff line number Diff line
@@ -38,11 +38,8 @@ class CodecManager {
    static CodecManager* instance = new CodecManager();
    static CodecManager* instance = new CodecManager();
    return instance;
    return instance;
  }
  }
  void Start(
  void Start(const std::vector<bluetooth::le_audio::btle_audio_codec_config_t>&
      const std::vector<bluetooth::le_audio::btle_audio_codec_config_t>&
                 offloading_preference);
          offloading_preference,
      const std::vector<::le_audio::set_configurations::AudioSetConfiguration>&
          adsp_capabilities);
  void Stop(void);
  void Stop(void);
  virtual types::CodecLocation GetCodecLocation(void) const;
  virtual types::CodecLocation GetCodecLocation(void) const;
  virtual void UpdateActiveSourceAudioConfig(
  virtual void UpdateActiveSourceAudioConfig(
+1 −3
Original line number Original line Diff line number Diff line
@@ -63,9 +63,7 @@ CodecManager::GetOffloadCodecConfig(types::LeAudioContextType ctx_type) {


void CodecManager::Start(
void CodecManager::Start(
    const std::vector<bluetooth::le_audio::btle_audio_codec_config_t>&
    const std::vector<bluetooth::le_audio::btle_audio_codec_config_t>&
        offloading_preference,
        offloading_preference) {
    const std::vector<set_configurations::AudioSetConfiguration>&
        adsp_capabilities) {
  // It is needed here as CodecManager which is a singleton creates it, but in
  // It is needed here as CodecManager which is a singleton creates it, but in
  // this mock we want to destroy and recreate the mock on each test case.
  // this mock we want to destroy and recreate the mock on each test case.
  if (!pimpl_) {
  if (!pimpl_) {
+1 −3
Original line number Original line Diff line number Diff line
@@ -393,9 +393,7 @@ class StateMachineTest : public Test {
    ASSERT_NE(codec_manager_, nullptr);
    ASSERT_NE(codec_manager_, nullptr);
    std::vector<bluetooth::le_audio::btle_audio_codec_config_t>
    std::vector<bluetooth::le_audio::btle_audio_codec_config_t>
        mock_offloading_preference(0);
        mock_offloading_preference(0);
    std::vector<set_configurations::AudioSetConfiguration>
    codec_manager_->Start(mock_offloading_preference);
        mock_adsp_capabilities(0);
    codec_manager_->Start(mock_offloading_preference, mock_adsp_capabilities);
    mock_codec_manager_ = MockCodecManager::GetInstance();
    mock_codec_manager_ = MockCodecManager::GetInstance();
    ASSERT_NE(mock_codec_manager_, nullptr);
    ASSERT_NE(mock_codec_manager_, nullptr);
    ON_CALL(*mock_codec_manager_, GetCodecLocation())
    ON_CALL(*mock_codec_manager_, GetCodecLocation())