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

Commit a348d6f2 authored by Jakub Pawłowski's avatar Jakub Pawłowski Committed by Gerrit Code Review
Browse files

Merge changes I4a340ec0,Ic54032d4

* changes:
  leaudio: Fix unnecessary reconfiguration for Ringtone
  leaudio: Make update metadata asynchronous
parents de31b5a2 a548f216
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -874,8 +874,7 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
    }

    virtual void OnAudioMetadataUpdate(
        std::promise<void> do_update_metadata_promise,
        const source_metadata_t& source_metadata) override {
        std::vector<struct playback_track_metadata> source_metadata) override {
      LOG_INFO();
      if (!instance) return;

@@ -894,8 +893,6 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
         */
        instance->UpdateStreamingContextTypeOnAllSubgroups(contexts.to_ulong());
      }

      do_update_metadata_promise.set_value();
    }

   private:
+8 −15
Original line number Diff line number Diff line
@@ -512,21 +512,14 @@ TEST_F(BroadcasterTest, UpdateMetadataFromAudioTrackMetadata) {
  ON_CALL(*sm, GetBroadcastAnnouncement())
      .WillByDefault(ReturnRef(announcement));

  std::promise<void> do_update_metadata_promise;
  struct playback_track_metadata tracks_[] = {
      {AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_SONIFICATION, 0},
  std::vector<struct playback_track_metadata> multitrack_source_metadata = {
      {{AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_SONIFICATION, 0},
       {AUDIO_USAGE_MEDIA, AUDIO_CONTENT_TYPE_MUSIC, 0},
       {AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING, AUDIO_CONTENT_TYPE_SPEECH,
        0},
      {AUDIO_USAGE_UNKNOWN, AUDIO_CONTENT_TYPE_UNKNOWN, 0}};
       {AUDIO_USAGE_UNKNOWN, AUDIO_CONTENT_TYPE_UNKNOWN, 0}}};

  source_metadata_t multitrack_source_metadata = {.track_count = 4,
                                                  .tracks = &tracks_[0]};

  auto do_update_metadata_future = do_update_metadata_promise.get_future();
  audio_receiver->OnAudioMetadataUpdate(std::move(do_update_metadata_promise),
                                        multitrack_source_metadata);
  do_update_metadata_future.wait_for(3s);
  audio_receiver->OnAudioMetadataUpdate(multitrack_source_metadata);

  // Verify ccid
  ASSERT_NE(ccid_list.size(), 0u);
+16 −18
Original line number Diff line number Diff line
@@ -3110,8 +3110,12 @@ class LeAudioClientImpl : public LeAudioClient {

    if ((available_contexts &
         AudioContexts(static_cast<T>(LeAudioContextType::RINGTONE)))
            .any())
            .any()) {
      if (!in_call_) {
        return LeAudioContextType::MEDIA;
      }
      return LeAudioContextType::RINGTONE;
    }

    if ((available_contexts &
         AudioContexts(static_cast<T>(LeAudioContextType::MEDIA)))
@@ -3163,7 +3167,8 @@ class LeAudioClientImpl : public LeAudioClient {
    return true;
  }

  void OnAudioMetadataUpdate(const source_metadata_t& source_metadata) {
  void OnAudioMetadataUpdate(
      std::vector<struct playback_track_metadata> source_metadata) {
    if (active_group_id_ == bluetooth::groups::kGroupUnknown) {
      LOG(WARNING) << ", cannot start streaming if no active group set";
      return;
@@ -3240,24 +3245,20 @@ class LeAudioClientImpl : public LeAudioClient {
    }
  }

  void OnAudioSourceMetadataUpdate(const sink_metadata_t& sink_metadata) {
    auto tracks = sink_metadata.tracks;
    auto track_count = sink_metadata.track_count;
  void OnAudioSourceMetadataUpdate(
      std::vector<struct record_track_metadata> sink_metadata) {
    bool is_audio_source_invalid = true;

    while (track_count) {
    for (auto& track : sink_metadata) {
      LOG_INFO(
          "%s: source=%d, gain=%f, destination device=%d, "
          "destination device address=%.32s",
          __func__, tracks->source, tracks->gain, tracks->dest_device,
          tracks->dest_device_address);
          __func__, track.source, track.gain, track.dest_device,
          track.dest_device_address);

      /* Don't differentiate source types, just check if it's valid */
      if (is_audio_source_invalid && tracks->source != AUDIO_SOURCE_INVALID)
      if (is_audio_source_invalid && track.source != AUDIO_SOURCE_INVALID)
        is_audio_source_invalid = false;

      --track_count;
      ++tracks;
    }

    auto group = aseGroups_.FindById(active_group_id_);
@@ -3822,10 +3823,8 @@ class LeAudioClientAudioSinkReceiverImpl
  }

  void OnAudioMetadataUpdate(
      std::promise<void> do_metadata_update_promise,
      const source_metadata_t& source_metadata) override {
      std::vector<struct playback_track_metadata> source_metadata) override {
    if (instance) instance->OnAudioMetadataUpdate(source_metadata);
    do_metadata_update_promise.set_value();
  }
};

@@ -3840,10 +3839,9 @@ class LeAudioClientAudioSourceReceiverImpl
    if (instance) instance->OnAudioSourceResume();
  }

  void OnAudioMetadataUpdate(std::promise<void> do_metadata_update_promise,
                             const sink_metadata_t& sink_metadata) override {
  void OnAudioMetadataUpdate(
      std::vector<struct record_track_metadata> sink_metadata) override {
    if (instance) instance->OnAudioSourceMetadataUpdate(sink_metadata);
    do_metadata_update_promise.set_value();
  }
};

+12 −13
Original line number Diff line number Diff line
@@ -191,18 +191,18 @@ bool LeAudioClientAudioSource::SinkOnMetadataUpdateReq(
    return false;
  }

  std::vector<struct playback_track_metadata> metadata;
  for (size_t i = 0; i < source_metadata.track_count; i++) {
    metadata.push_back(source_metadata.tracks[i]);
  }

  // Call OnAudioSuspend and block till it returns.
  std::promise<void> do_update_metadata_promise;
  std::future<void> do_update_metadata_future =
      do_update_metadata_promise.get_future();
  bt_status_t status = do_in_main_thread(
      FROM_HERE,
      base::BindOnce(&LeAudioClientAudioSinkReceiver::OnAudioMetadataUpdate,
                     base::Unretained(audioSinkReceiver_),
                     std::move(do_update_metadata_promise), source_metadata));
                     base::Unretained(audioSinkReceiver_), metadata));

  if (status == BT_STATUS_SUCCESS) {
    do_update_metadata_future.wait();
    return true;
  }

@@ -262,18 +262,17 @@ bool LeAudioUnicastClientAudioSink::SourceOnMetadataUpdateReq(
    return false;
  }

  // Call OnAudioSuspend and block till it returns.
  std::promise<void> do_update_metadata_promise;
  std::future<void> do_update_metadata_future =
      do_update_metadata_promise.get_future();
  std::vector<struct record_track_metadata> metadata;
  for (size_t i = 0; i < sink_metadata.track_count; i++) {
    metadata.push_back(sink_metadata.tracks[i]);
  }

  bt_status_t status = do_in_main_thread(
      FROM_HERE,
      base::BindOnce(&LeAudioClientAudioSourceReceiver::OnAudioMetadataUpdate,
                     base::Unretained(audioSourceReceiver_),
                     std::move(do_update_metadata_promise), sink_metadata));
                     base::Unretained(audioSourceReceiver_), metadata));

  if (status == BT_STATUS_SUCCESS) {
    do_update_metadata_future.wait();
    return true;
  }

+2 −4
Original line number Diff line number Diff line
@@ -29,8 +29,7 @@ class LeAudioClientAudioSinkReceiver {
  virtual void OnAudioSuspend(std::promise<void> do_suspend_promise) = 0;
  virtual void OnAudioResume(void) = 0;
  virtual void OnAudioMetadataUpdate(
      std::promise<void> do_update_metadata_promise,
      const source_metadata_t& source_metadata) = 0;
      std::vector<struct playback_track_metadata> source_metadata) = 0;
};
class LeAudioClientAudioSourceReceiver {
 public:
@@ -38,8 +37,7 @@ class LeAudioClientAudioSourceReceiver {
  virtual void OnAudioSuspend(std::promise<void> do_suspend_promise) = 0;
  virtual void OnAudioResume(void) = 0;
  virtual void OnAudioMetadataUpdate(
      std::promise<void> do_update_metadata_promise,
      const sink_metadata_t& sink_metadata) = 0;
      std::vector<struct record_track_metadata> sink_metadata) = 0;
};

/* Represents configuration of audio codec, as exchanged between le audio and
Loading