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

Commit b5a7c678 authored by Alice Kuo's avatar Alice Kuo
Browse files

Minor refactor for updateSourceMetadata and updateSinkMetadata

Bug: 274106369
Test: atest bluetooth_le_audio_client_test
Change-Id: I2f93a9b46c80807e0947c9555e34aa9b2e837bdb
parent 4887ee95
Loading
Loading
Loading
Loading
+40 −19
Original line number Original line Diff line number Diff line
@@ -115,6 +115,7 @@ ndk::ScopedAStatus BluetoothAudioPortImpl::updateSourceMetadata(
    if (num_of_tags != 0) {
    if (num_of_tags != 0) {
      int copied_size = 0;
      int copied_size = 0;
      int max_tags_size = sizeof(desc_track.tags);
      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++) {
      for (size_t i = 0; i < num_of_tags - 1; i++) {
        int string_len = track.tags[i].length();
        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);
        track.tags[i].copy(desc_track.tags + copied_size, string_len, 0);
        strncat(desc_track.tags, ";", 1);
        copied_size += string_len;
        copied_size += string_len + 1;
        separator.copy(desc_track.tags + copied_size, 1, 0);
        copied_size += 1;
      }
      }


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


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

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


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


        if ((copied_size >= max_tags_size) ||
        if ((copied_size >= max_tags_size) ||
            (copied_size + string_len >= 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;
          break;
        }
        }


      tag.copy(desc_meta.tags + copied_size, string_len, 0);
        track.tags[i].copy(desc_track.tags + copied_size, string_len, 0);
      strncat(desc_meta.tags, ",", 1);
        copied_size += string_len;
      copied_size += string_len + 1;
        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 = {
  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);
  transport_instance_->SinkMetadataChanged(legacy_sink_metadata);
  return ndk::ScopedAStatus::ok();
  return ndk::ScopedAStatus::ok();
}
}