Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Unified Diff: webrtc/pc/trackmediainfomap.cc

Issue 2703783002: TrackMediaInfoMap: Allow same SSRC for send and receive side. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | webrtc/pc/trackmediainfomap_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/pc/trackmediainfomap.cc
diff --git a/webrtc/pc/trackmediainfomap.cc b/webrtc/pc/trackmediainfomap.cc
index d296c7f70e7fa60ae367bef8416f677107021e34..33880b9380bcf7e7751af58b60331d68c2fb6eb7 100644
--- a/webrtc/pc/trackmediainfomap.cc
+++ b/webrtc/pc/trackmediainfomap.cc
@@ -31,10 +31,14 @@ const V* FindAddressOrNull(const std::map<K, V>& map, const K& key) {
void GetAudioAndVideoTrackBySsrc(
const std::vector<rtc::scoped_refptr<RtpSenderInterface>>& rtp_senders,
const std::vector<rtc::scoped_refptr<RtpReceiverInterface>>& rtp_receivers,
- std::map<uint32_t, AudioTrackInterface*>* audio_track_by_ssrc,
- std::map<uint32_t, VideoTrackInterface*>* video_track_by_ssrc) {
- RTC_DCHECK(audio_track_by_ssrc->empty());
- RTC_DCHECK(video_track_by_ssrc->empty());
+ std::map<uint32_t, AudioTrackInterface*>* local_audio_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, VideoTrackInterface*>* remote_video_track_by_ssrc) {
+ RTC_DCHECK(local_audio_track_by_ssrc->empty());
+ RTC_DCHECK(local_video_track_by_ssrc->empty());
+ RTC_DCHECK(remote_audio_track_by_ssrc->empty());
+ RTC_DCHECK(remote_video_track_by_ssrc->empty());
// TODO(hbos): RTP senders/receivers uses a proxy to the signaling thread, and
// our sender/receiver implementations invokes on the worker thread. (This
// means one thread jump if on signaling thread and two thread jumps if on any
@@ -53,13 +57,15 @@ void GetAudioAndVideoTrackBySsrc(
uint32_t ssrc = rtp_sender->ssrc();
if (ssrc != 0) {
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
- RTC_DCHECK(audio_track_by_ssrc->find(ssrc) ==
- audio_track_by_ssrc->end());
- (*audio_track_by_ssrc)[ssrc] = static_cast<AudioTrackInterface*>(track);
+ RTC_DCHECK(local_audio_track_by_ssrc->find(ssrc) ==
+ local_audio_track_by_ssrc->end());
+ (*local_audio_track_by_ssrc)[ssrc] =
+ static_cast<AudioTrackInterface*>(track);
} else {
- RTC_DCHECK(video_track_by_ssrc->find(ssrc) ==
- video_track_by_ssrc->end());
- (*video_track_by_ssrc)[ssrc] = static_cast<VideoTrackInterface*>(track);
+ RTC_DCHECK(local_video_track_by_ssrc->find(ssrc) ==
+ local_video_track_by_ssrc->end());
+ (*local_video_track_by_ssrc)[ssrc] =
+ static_cast<VideoTrackInterface*>(track);
}
}
}
@@ -77,14 +83,14 @@ void GetAudioAndVideoTrackBySsrc(
continue;
}
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
- RTC_DCHECK(audio_track_by_ssrc->find(*encoding.ssrc) ==
- audio_track_by_ssrc->end());
- (*audio_track_by_ssrc)[*encoding.ssrc] =
+ RTC_DCHECK(remote_audio_track_by_ssrc->find(*encoding.ssrc) ==
+ remote_audio_track_by_ssrc->end());
+ (*remote_audio_track_by_ssrc)[*encoding.ssrc] =
static_cast<AudioTrackInterface*>(track);
} else {
- RTC_DCHECK(video_track_by_ssrc->find(*encoding.ssrc) ==
- video_track_by_ssrc->end());
- (*video_track_by_ssrc)[*encoding.ssrc] =
+ RTC_DCHECK(remote_video_track_by_ssrc->find(*encoding.ssrc) ==
+ remote_video_track_by_ssrc->end());
+ (*remote_video_track_by_ssrc)[*encoding.ssrc] =
static_cast<VideoTrackInterface*>(track);
}
}
@@ -100,14 +106,20 @@ TrackMediaInfoMap::TrackMediaInfoMap(
const std::vector<rtc::scoped_refptr<RtpReceiverInterface>>& rtp_receivers)
: voice_media_info_(std::move(voice_media_info)),
video_media_info_(std::move(video_media_info)) {
- std::map<uint32_t, AudioTrackInterface*> audio_track_by_ssrc;
- std::map<uint32_t, VideoTrackInterface*> video_track_by_ssrc;
- GetAudioAndVideoTrackBySsrc(rtp_senders, rtp_receivers, &audio_track_by_ssrc,
- &video_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, AudioTrackInterface*> remote_audio_track_by_ssrc;
+ std::map<uint32_t, VideoTrackInterface*> remote_video_track_by_ssrc;
+ GetAudioAndVideoTrackBySsrc(rtp_senders,
+ rtp_receivers,
+ &local_audio_track_by_ssrc,
+ &local_video_track_by_ssrc,
+ &remote_audio_track_by_ssrc,
+ &remote_video_track_by_ssrc);
if (voice_media_info_) {
for (auto& sender_info : voice_media_info_->senders) {
AudioTrackInterface* associated_track =
- FindValueOrNull(audio_track_by_ssrc, sender_info.ssrc());
+ FindValueOrNull(local_audio_track_by_ssrc, sender_info.ssrc());
if (associated_track) {
// One sender is associated with at most one track.
// One track may be associated with multiple senders.
@@ -117,7 +129,7 @@ TrackMediaInfoMap::TrackMediaInfoMap(
}
for (auto& receiver_info : voice_media_info_->receivers) {
AudioTrackInterface* associated_track =
- FindValueOrNull(audio_track_by_ssrc, receiver_info.ssrc());
+ FindValueOrNull(remote_audio_track_by_ssrc, receiver_info.ssrc());
if (associated_track) {
// One receiver is associated with at most one track, which is uniquely
// associated with that receiver.
@@ -131,7 +143,7 @@ TrackMediaInfoMap::TrackMediaInfoMap(
if (video_media_info_) {
for (auto& sender_info : video_media_info_->senders) {
VideoTrackInterface* associated_track =
- FindValueOrNull(video_track_by_ssrc, sender_info.ssrc());
+ FindValueOrNull(local_video_track_by_ssrc, sender_info.ssrc());
if (associated_track) {
// One sender is associated with at most one track.
// One track may be associated with multiple senders.
@@ -141,7 +153,7 @@ TrackMediaInfoMap::TrackMediaInfoMap(
}
for (auto& receiver_info : video_media_info_->receivers) {
VideoTrackInterface* associated_track =
- FindValueOrNull(video_track_by_ssrc, receiver_info.ssrc());
+ FindValueOrNull(remote_video_track_by_ssrc, receiver_info.ssrc());
if (associated_track) {
// One receiver is associated with at most one track, which is uniquely
// associated with that receiver.
« no previous file with comments | « no previous file | webrtc/pc/trackmediainfomap_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698