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

Commit 94789391 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Minor refactor for updateSourceMetadata and updateSinkMetadata" into main

parents 01ef9e2c b5a7c678
Loading
Loading
Loading
Loading
+40 −19
Original line number Diff line number Diff line
@@ -115,6 +115,7 @@ ndk::ScopedAStatus BluetoothAudioPortImpl::updateSourceMetadata(
    if (num_of_tags != 0) {
      int copied_size = 0;
      int max_tags_size = sizeof(desc_track.tags);
      std::string separator(1, AUDIO_ATTRIBUTES_TAGS_SEPARATOR);
      for (size_t i = 0; i < num_of_tags - 1; i++) {
        int string_len = track.tags[i].length();

@@ -126,8 +127,9 @@ ndk::ScopedAStatus BluetoothAudioPortImpl::updateSourceMetadata(
        }

        track.tags[i].copy(desc_track.tags + copied_size, string_len, 0);
        strncat(desc_track.tags, ";", 1);
        copied_size += string_len + 1;
        copied_size += string_len;
        separator.copy(desc_track.tags + copied_size, 1, 0);
        copied_size += 1;
      }

      int string_len = track.tags[num_of_tags - 1].length();
@@ -156,38 +158,57 @@ ndk::ScopedAStatus BluetoothAudioPortImpl::updateSinkMetadata(
  StopWatchLegacy stop_watch(__func__);
  LOG(INFO) << __func__ << ": " << sink_metadata.tracks.size() << " track(s)";

  std::vector<record_track_metadata_v7> metadata_vec;
  metadata_vec.reserve(sink_metadata.tracks.size());
  for (const auto& metadata : sink_metadata.tracks) {
    record_track_metadata_v7 desc_meta = {
  std::vector<record_track_metadata_v7> tracks_vec;
  tracks_vec.reserve(sink_metadata.tracks.size());
  for (const auto& track : sink_metadata.tracks) {
    auto num_of_tags = track.tags.size();
    LOG(INFO) << __func__ << " metadata tags size: " << num_of_tags;

    record_track_metadata_v7 desc_track = {
        .base =
            {
                .source = static_cast<audio_source_t>(metadata.source),
                .gain = metadata.gain,
                .source = static_cast<audio_source_t>(track.source),
                .gain = track.gain,
            },
    };

    if (num_of_tags != 0) {
      int copied_size = 0;
    int max_tags_size = sizeof(desc_meta.tags);
    for (auto tag : metadata.tags) {
      int string_len = tag.length();
      int max_tags_size = sizeof(desc_track.tags);
      std::string separator(1, AUDIO_ATTRIBUTES_TAGS_SEPARATOR);
      for (size_t i = 0; i < num_of_tags - 1; i++) {
        int string_len = track.tags[i].length();

        if ((copied_size >= max_tags_size) ||
            (copied_size + string_len >= max_tags_size)) {
        LOG(ERROR) << __func__ << "Too many tags, copied size: " << copied_size;
          LOG(ERROR) << __func__
                     << "Too many tags, copied size: " << copied_size;
          break;
        }

      tag.copy(desc_meta.tags + copied_size, string_len, 0);
      strncat(desc_meta.tags, ",", 1);
      copied_size += string_len + 1;
        track.tags[i].copy(desc_track.tags + copied_size, string_len, 0);
        copied_size += string_len;
        separator.copy(desc_track.tags + copied_size, 1, 0);
        copied_size += 1;
      }

    metadata_vec.push_back(desc_meta);
      int string_len = track.tags[num_of_tags - 1].length();
      if ((copied_size >= max_tags_size) ||
          (copied_size + string_len >= max_tags_size)) {
        LOG(ERROR) << __func__ << "Too many tags, copied size: " << copied_size;
      } else {
        track.tags[num_of_tags - 1].copy(desc_track.tags + copied_size,
                                         string_len, 0);
      }
    } else {
      memset(desc_track.tags, 0, sizeof(desc_track.tags));
    }

    tracks_vec.push_back(desc_track);
  }

  const sink_metadata_v7_t legacy_sink_metadata = {
      .track_count = metadata_vec.size(), .tracks = metadata_vec.data()};
      .track_count = tracks_vec.size(), .tracks = tracks_vec.data()};
  transport_instance_->SinkMetadataChanged(legacy_sink_metadata);
  return ndk::ScopedAStatus::ok();
}