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

Commit d0a5a350 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix crash for getting offload capability" into tm-dev

parents 0d5006a9 c2056d0a
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())