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

Unified Diff: talk/app/webrtc/peerconnection.cc

Issue 1428243005: Fix for scenario where m-line is revived after being set to port 0. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month 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
Index: talk/app/webrtc/peerconnection.cc
diff --git a/talk/app/webrtc/peerconnection.cc b/talk/app/webrtc/peerconnection.cc
index 0d519b280b9f77485e4e648cf1697274bbd448fa..801b69b6147540b6c41cc86b68dfb35301902958 100644
--- a/talk/app/webrtc/peerconnection.cc
+++ b/talk/app/webrtc/peerconnection.cc
@@ -949,6 +949,15 @@ void PeerConnection::SetLocalDescription(
const cricket::ContentInfo* audio_content =
GetFirstAudioContent(desc->description());
if (audio_content) {
+ if (audio_content->rejected) {
+ audio_rejected_ = true;
+ } else if (audio_rejected_) {
pthatcher1 2015/11/11 00:45:02 Can we get the equivalent of audio_rejected_ by lo
Taylor Brandstetter 2015/11/11 01:33:29 It gets more complex if we go that route. We have
+ // If going from rejected to unrejected, need to reconfigure senders and
+ // receivers.
+ audio_rejected_ = false;
+ ReconfigureSenders(cricket::MEDIA_TYPE_AUDIO);
+ ReconfigureReceivers(cricket::MEDIA_TYPE_AUDIO);
pthatcher1 2015/11/11 00:45:02 Should we have a ReconfigureSenderAndReceivers met
Taylor Brandstetter 2015/11/11 01:33:29 Done.
+ }
const cricket::AudioContentDescription* audio_desc =
static_cast<const cricket::AudioContentDescription*>(
audio_content->description);
@@ -958,6 +967,15 @@ void PeerConnection::SetLocalDescription(
const cricket::ContentInfo* video_content =
GetFirstVideoContent(desc->description());
if (video_content) {
+ if (video_content->rejected) {
+ video_rejected_ = true;
+ } else if (video_rejected_) {
+ // If going from rejected to unrejected, need to reconfigure senders and
+ // receivers.
+ video_rejected_ = false;
+ ReconfigureSenders(cricket::MEDIA_TYPE_VIDEO);
+ ReconfigureReceivers(cricket::MEDIA_TYPE_VIDEO);
+ }
const cricket::VideoContentDescription* video_desc =
static_cast<const cricket::VideoContentDescription*>(
video_content->description);
@@ -1023,6 +1041,15 @@ void PeerConnection::SetRemoteDescription(
// and MediaStreams.
const cricket::ContentInfo* audio_content = GetFirstAudioContent(remote_desc);
if (audio_content) {
+ if (audio_content->rejected) {
+ audio_rejected_ = true;
+ } else if (audio_rejected_) {
+ // If going from rejected to unrejected, need to reconfigure senders and
+ // receivers.
+ audio_rejected_ = false;
+ ReconfigureSenders(cricket::MEDIA_TYPE_AUDIO);
+ ReconfigureReceivers(cricket::MEDIA_TYPE_AUDIO);
+ }
const cricket::AudioContentDescription* desc =
static_cast<const cricket::AudioContentDescription*>(
audio_content->description);
@@ -1036,6 +1063,15 @@ void PeerConnection::SetRemoteDescription(
// and MediaStreams.
const cricket::ContentInfo* video_content = GetFirstVideoContent(remote_desc);
if (video_content) {
+ if (video_content->rejected) {
+ video_rejected_ = true;
+ } else if (video_rejected_) {
+ // If going from rejected to unrejected, need to reconfigure senders and
+ // receivers.
+ video_rejected_ = false;
+ ReconfigureSenders(cricket::MEDIA_TYPE_VIDEO);
+ ReconfigureReceivers(cricket::MEDIA_TYPE_VIDEO);
+ }
const cricket::VideoContentDescription* desc =
static_cast<const cricket::VideoContentDescription*>(
video_content->description);
@@ -1934,6 +1970,22 @@ PeerConnection::FindReceiverForTrack(MediaStreamTrackInterface* track) {
});
}
+void PeerConnection::ReconfigureSenders(cricket::MediaType media_type) {
+ for (const auto& sender : senders_) {
+ if (sender->media_type() == media_type) {
+ sender->Reconfigure();
+ }
+ }
+}
+
+void PeerConnection::ReconfigureReceivers(cricket::MediaType media_type) {
+ for (const auto& receiver : receivers_) {
+ if (receiver->media_type() == media_type) {
+ receiver->Reconfigure();
+ }
+ }
+}
+
PeerConnection::TrackInfos* PeerConnection::GetRemoteTracks(
cricket::MediaType media_type) {
RTC_DCHECK(media_type == cricket::MEDIA_TYPE_AUDIO ||

Powered by Google App Engine
This is Rietveld 408576698