TrackMediaInfoMap: Use rtc::ArrayView in Initialize.

Drive-by improvement as suggested in
https://webrtc-review.googlesource.com/c/src/+/269404.

Bug: webrtc:14289
Change-Id: Ib6579916cb4ab1076c1522275b318859400b731e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269202
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37625}
This commit is contained in:
Henrik Boström 2022-07-27 11:32:14 +02:00 committed by WebRTC LUCI CQ
parent fc67b455e6
commit 808a8fc29e
3 changed files with 15 additions and 8 deletions

View File

@ -1340,6 +1340,7 @@ rtc_source_set("track_media_info_map") {
deps = [ deps = [
":rtp_receiver", ":rtp_receiver",
":rtp_sender", ":rtp_sender",
"../api:array_view",
"../api:media_stream_interface", "../api:media_stream_interface",
"../api:rtp_parameters", "../api:rtp_parameters",
"../api:scoped_refptr", "../api:scoped_refptr",

View File

@ -38,8 +38,8 @@ const V* FindAddressOrNull(const std::map<K, V>& map, const K& key) {
} }
void GetAudioAndVideoTrackBySsrc( void GetAudioAndVideoTrackBySsrc(
const std::vector<rtc::scoped_refptr<RtpSenderInternal>>& rtp_senders, rtc::ArrayView<rtc::scoped_refptr<RtpSenderInternal>> rtp_senders,
const std::vector<rtc::scoped_refptr<RtpReceiverInternal>>& rtp_receivers, rtc::ArrayView<rtc::scoped_refptr<RtpReceiverInternal>> rtp_receivers,
std::map<uint32_t, AudioTrackInterface*>* local_audio_track_by_ssrc, std::map<uint32_t, AudioTrackInterface*>* local_audio_track_by_ssrc,
std::map<uint32_t, VideoTrackInterface*>* local_video_track_by_ssrc, std::map<uint32_t, VideoTrackInterface*>* local_video_track_by_ssrc,
std::map<uint32_t, AudioTrackInterface*>* remote_audio_track_by_ssrc, std::map<uint32_t, AudioTrackInterface*>* remote_audio_track_by_ssrc,
@ -109,8 +109,8 @@ TrackMediaInfoMap::TrackMediaInfoMap() = default;
void TrackMediaInfoMap::Initialize( void TrackMediaInfoMap::Initialize(
absl::optional<cricket::VoiceMediaInfo> voice_media_info, absl::optional<cricket::VoiceMediaInfo> voice_media_info,
absl::optional<cricket::VideoMediaInfo> video_media_info, absl::optional<cricket::VideoMediaInfo> video_media_info,
const std::vector<rtc::scoped_refptr<RtpSenderInternal>>& rtp_senders, rtc::ArrayView<rtc::scoped_refptr<RtpSenderInternal>> rtp_senders,
const std::vector<rtc::scoped_refptr<RtpReceiverInternal>>& rtp_receivers) { rtc::ArrayView<rtc::scoped_refptr<RtpReceiverInternal>> rtp_receivers) {
rtc::Thread::ScopedDisallowBlockingCalls no_blocking_calls; rtc::Thread::ScopedDisallowBlockingCalls no_blocking_calls;
RTC_DCHECK(!is_initialized_); RTC_DCHECK(!is_initialized_);
is_initialized_ = true; is_initialized_ = true;

View File

@ -19,6 +19,7 @@
#include <vector> #include <vector>
#include "absl/types/optional.h" #include "absl/types/optional.h"
#include "api/array_view.h"
#include "api/media_stream_interface.h" #include "api/media_stream_interface.h"
#include "api/scoped_refptr.h" #include "api/scoped_refptr.h"
#include "media/base/media_channel.h" #include "media/base/media_channel.h"
@ -50,12 +51,14 @@ class TrackMediaInfoMap {
public: public:
TrackMediaInfoMap(); TrackMediaInfoMap();
// Takes ownership of the "infos". Does not affect the lifetime of the senders
// or receivers, but TrackMediaInfoMap will keep their associated tracks alive
// through reference counting until the map is destroyed.
void Initialize( void Initialize(
absl::optional<cricket::VoiceMediaInfo> voice_media_info, absl::optional<cricket::VoiceMediaInfo> voice_media_info,
absl::optional<cricket::VideoMediaInfo> video_media_info, absl::optional<cricket::VideoMediaInfo> video_media_info,
const std::vector<rtc::scoped_refptr<RtpSenderInternal>>& rtp_senders, rtc::ArrayView<rtc::scoped_refptr<RtpSenderInternal>> rtp_senders,
const std::vector<rtc::scoped_refptr<RtpReceiverInternal>>& rtc::ArrayView<rtc::scoped_refptr<RtpReceiverInternal>> rtp_receivers);
rtp_receivers);
const absl::optional<cricket::VoiceMediaInfo>& voice_media_info() const { const absl::optional<cricket::VoiceMediaInfo>& voice_media_info() const {
RTC_DCHECK(is_initialized_); RTC_DCHECK(is_initialized_);
@ -104,6 +107,8 @@ class TrackMediaInfoMap {
absl::optional<cricket::VideoMediaInfo> video_media_info_; absl::optional<cricket::VideoMediaInfo> video_media_info_;
// These maps map tracks (identified by a pointer) to their corresponding info // These maps map tracks (identified by a pointer) to their corresponding info
// object of the correct kind. One track can map to multiple info objects. // object of the correct kind. One track can map to multiple info objects.
// Known tracks are guaranteed to be alive because they are also stored as
// entries in the reverse maps below.
std::map<const AudioTrackInterface*, std::vector<cricket::VoiceSenderInfo*>> std::map<const AudioTrackInterface*, std::vector<cricket::VoiceSenderInfo*>>
voice_infos_by_local_track_; voice_infos_by_local_track_;
std::map<const AudioTrackInterface*, cricket::VoiceReceiverInfo*> std::map<const AudioTrackInterface*, cricket::VoiceReceiverInfo*>
@ -114,7 +119,8 @@ class TrackMediaInfoMap {
video_info_by_remote_track_; video_info_by_remote_track_;
// These maps map info objects to their corresponding tracks. They are always // These maps map info objects to their corresponding tracks. They are always
// the inverse of the maps above. One info object always maps to only one // the inverse of the maps above. One info object always maps to only one
// track. // track. The use of scoped_refptr<> here ensures the tracks outlive
// TrackMediaInfoMap.
std::map<const cricket::VoiceSenderInfo*, std::map<const cricket::VoiceSenderInfo*,
rtc::scoped_refptr<AudioTrackInterface>> rtc::scoped_refptr<AudioTrackInterface>>
audio_track_by_sender_info_; audio_track_by_sender_info_;