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

Commit b6c40e50 authored by Jack He's avatar Jack He Committed by Android (Google) Code Review
Browse files

Merge "leaudio: Fix crash on metadata update" into main

parents fa36ee6f c8a5763f
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -104,7 +104,8 @@ class LeAudioSinkAudioHalClient {
    virtual ~Callbacks() = default;
    virtual void OnAudioSuspend(void) = 0;
    virtual void OnAudioResume(void) = 0;
    virtual void OnAudioMetadataUpdate(sink_metadata_v7 sink_metadata) = 0;
    virtual void OnAudioMetadataUpdate(
        const std::vector<struct record_track_metadata_v7> sink_metadata) = 0;

    base::WeakPtrFactory<Callbacks> weak_factory_{this};
  };
@@ -144,7 +145,8 @@ class LeAudioSourceAudioHalClient {
    virtual void OnAudioDataReady(const std::vector<uint8_t>& data) = 0;
    virtual void OnAudioSuspend(void) = 0;
    virtual void OnAudioResume(void) = 0;
    virtual void OnAudioMetadataUpdate(source_metadata_v7 source_metadata,
    virtual void OnAudioMetadataUpdate(
        const std::vector<struct playback_track_metadata_v7> source_metadata,
        DsaMode dsa_mode) = 0;

    base::WeakPtrFactory<Callbacks> weak_factory_{this};
+9 −5
Original line number Diff line number Diff line
@@ -220,8 +220,10 @@ class MockLeAudioClientAudioSinkEventReceiver
              (override));
  MOCK_METHOD((void), OnAudioSuspend, (), (override));
  MOCK_METHOD((void), OnAudioResume, (), (override));
  MOCK_METHOD((void), OnAudioMetadataUpdate,
              (source_metadata_v7 source_metadata, DsaMode dsa_mode),
  MOCK_METHOD(
      (void), OnAudioMetadataUpdate,
      (const std::vector<struct playback_track_metadata_v7> source_metadata,
       DsaMode dsa_mode),
      (override));
};

@@ -230,7 +232,9 @@ class MockAudioHalClientEventReceiver
 public:
  MOCK_METHOD((void), OnAudioSuspend, (), (override));
  MOCK_METHOD((void), OnAudioResume, (), (override));
  MOCK_METHOD((void), OnAudioMetadataUpdate, (sink_metadata_v7 sink_metadata),
  MOCK_METHOD(
      (void), OnAudioMetadataUpdate,
      (const std::vector<struct record_track_metadata_v7> sink_metadata),
      (override));
};

+5 −1
Original line number Diff line number Diff line
@@ -160,11 +160,15 @@ bool SinkImpl::OnMetadataUpdateReq(const sink_metadata_v7_t& sink_metadata) {
    return false;
  }

  std::vector<struct record_track_metadata_v7> metadata(
      sink_metadata.tracks, sink_metadata.tracks + sink_metadata.track_count);

  bt_status_t status = do_in_main_thread(
      FROM_HERE,
      base::BindOnce(
          &LeAudioSinkAudioHalClient::Callbacks::OnAudioMetadataUpdate,
          audioSinkCallbacks_->weak_factory_.GetWeakPtr(), sink_metadata));
          audioSinkCallbacks_->weak_factory_.GetWeakPtr(),
          std::move(metadata)));
  if (status == BT_STATUS_SUCCESS) {
    return true;
  }
+6 −2
Original line number Diff line number Diff line
@@ -302,12 +302,16 @@ bool SourceImpl::OnMetadataUpdateReq(
    return false;
  }

  std::vector<struct playback_track_metadata_v7> metadata(
      source_metadata.tracks,
      source_metadata.tracks + source_metadata.track_count);

  bt_status_t status = do_in_main_thread(
      FROM_HERE,
      base::BindOnce(
          &LeAudioSourceAudioHalClient::Callbacks::OnAudioMetadataUpdate,
          audioSourceCallbacks_->weak_factory_.GetWeakPtr(), source_metadata,
          dsa_mode));
          audioSourceCallbacks_->weak_factory_.GetWeakPtr(),
          std::move(metadata), dsa_mode));
  if (status == BT_STATUS_SUCCESS) {
    return true;
  }
+3 −2
Original line number Diff line number Diff line
@@ -1152,7 +1152,8 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
      instance->le_audio_source_hal_client_->ConfirmStreamingRequest();
    }

    virtual void OnAudioMetadataUpdate(source_metadata_v7 source_metadata,
    virtual void OnAudioMetadataUpdate(
        const std::vector<struct playback_track_metadata_v7> source_metadata,
        DsaMode dsa_mode) override {
      LOG_INFO();
      if (!instance) return;
Loading