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

Side by Side 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 if (session_->data_channel_type() == cricket::DCT_SCTP && 942 if (session_->data_channel_type() == cricket::DCT_SCTP &&
943 session_->GetSslRole(&role)) { 943 session_->GetSslRole(&role)) {
944 AllocateSctpSids(role); 944 AllocateSctpSids(role);
945 } 945 }
946 946
947 // Update state and SSRC of local MediaStreams and DataChannels based on the 947 // Update state and SSRC of local MediaStreams and DataChannels based on the
948 // local session description. 948 // local session description.
949 const cricket::ContentInfo* audio_content = 949 const cricket::ContentInfo* audio_content =
950 GetFirstAudioContent(desc->description()); 950 GetFirstAudioContent(desc->description());
951 if (audio_content) { 951 if (audio_content) {
952 if (audio_content->rejected) {
953 audio_rejected_ = true;
954 } 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
955 // If going from rejected to unrejected, need to reconfigure senders and
956 // receivers.
957 audio_rejected_ = false;
958 ReconfigureSenders(cricket::MEDIA_TYPE_AUDIO);
959 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.
960 }
952 const cricket::AudioContentDescription* audio_desc = 961 const cricket::AudioContentDescription* audio_desc =
953 static_cast<const cricket::AudioContentDescription*>( 962 static_cast<const cricket::AudioContentDescription*>(
954 audio_content->description); 963 audio_content->description);
955 UpdateLocalTracks(audio_desc->streams(), audio_desc->type()); 964 UpdateLocalTracks(audio_desc->streams(), audio_desc->type());
956 } 965 }
957 966
958 const cricket::ContentInfo* video_content = 967 const cricket::ContentInfo* video_content =
959 GetFirstVideoContent(desc->description()); 968 GetFirstVideoContent(desc->description());
960 if (video_content) { 969 if (video_content) {
970 if (video_content->rejected) {
971 video_rejected_ = true;
972 } else if (video_rejected_) {
973 // If going from rejected to unrejected, need to reconfigure senders and
974 // receivers.
975 video_rejected_ = false;
976 ReconfigureSenders(cricket::MEDIA_TYPE_VIDEO);
977 ReconfigureReceivers(cricket::MEDIA_TYPE_VIDEO);
978 }
961 const cricket::VideoContentDescription* video_desc = 979 const cricket::VideoContentDescription* video_desc =
962 static_cast<const cricket::VideoContentDescription*>( 980 static_cast<const cricket::VideoContentDescription*>(
963 video_content->description); 981 video_content->description);
964 UpdateLocalTracks(video_desc->streams(), video_desc->type()); 982 UpdateLocalTracks(video_desc->streams(), video_desc->type());
965 } 983 }
966 984
967 const cricket::ContentInfo* data_content = 985 const cricket::ContentInfo* data_content =
968 GetFirstDataContent(desc->description()); 986 GetFirstDataContent(desc->description());
969 if (data_content) { 987 if (data_content) {
970 const cricket::DataContentDescription* data_desc = 988 const cricket::DataContentDescription* data_desc =
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 const cricket::SessionDescription* remote_desc = desc->description(); 1034 const cricket::SessionDescription* remote_desc = desc->description();
1017 1035
1018 // We wait to signal new streams until we finish processing the description, 1036 // We wait to signal new streams until we finish processing the description,
1019 // since only at that point will new streams have all their tracks. 1037 // since only at that point will new streams have all their tracks.
1020 rtc::scoped_refptr<StreamCollection> new_streams(StreamCollection::Create()); 1038 rtc::scoped_refptr<StreamCollection> new_streams(StreamCollection::Create());
1021 1039
1022 // Find all audio rtp streams and create corresponding remote AudioTracks 1040 // Find all audio rtp streams and create corresponding remote AudioTracks
1023 // and MediaStreams. 1041 // and MediaStreams.
1024 const cricket::ContentInfo* audio_content = GetFirstAudioContent(remote_desc); 1042 const cricket::ContentInfo* audio_content = GetFirstAudioContent(remote_desc);
1025 if (audio_content) { 1043 if (audio_content) {
1044 if (audio_content->rejected) {
1045 audio_rejected_ = true;
1046 } else if (audio_rejected_) {
1047 // If going from rejected to unrejected, need to reconfigure senders and
1048 // receivers.
1049 audio_rejected_ = false;
1050 ReconfigureSenders(cricket::MEDIA_TYPE_AUDIO);
1051 ReconfigureReceivers(cricket::MEDIA_TYPE_AUDIO);
1052 }
1026 const cricket::AudioContentDescription* desc = 1053 const cricket::AudioContentDescription* desc =
1027 static_cast<const cricket::AudioContentDescription*>( 1054 static_cast<const cricket::AudioContentDescription*>(
1028 audio_content->description); 1055 audio_content->description);
1029 UpdateRemoteStreamsList(GetActiveStreams(desc), desc->type(), new_streams); 1056 UpdateRemoteStreamsList(GetActiveStreams(desc), desc->type(), new_streams);
1030 remote_info_.default_audio_track_needed = 1057 remote_info_.default_audio_track_needed =
1031 !remote_desc->msid_supported() && desc->streams().empty() && 1058 !remote_desc->msid_supported() && desc->streams().empty() &&
1032 MediaContentDirectionHasSend(desc->direction()); 1059 MediaContentDirectionHasSend(desc->direction());
1033 } 1060 }
1034 1061
1035 // Find all video rtp streams and create corresponding remote VideoTracks 1062 // Find all video rtp streams and create corresponding remote VideoTracks
1036 // and MediaStreams. 1063 // and MediaStreams.
1037 const cricket::ContentInfo* video_content = GetFirstVideoContent(remote_desc); 1064 const cricket::ContentInfo* video_content = GetFirstVideoContent(remote_desc);
1038 if (video_content) { 1065 if (video_content) {
1066 if (video_content->rejected) {
1067 video_rejected_ = true;
1068 } else if (video_rejected_) {
1069 // If going from rejected to unrejected, need to reconfigure senders and
1070 // receivers.
1071 video_rejected_ = false;
1072 ReconfigureSenders(cricket::MEDIA_TYPE_VIDEO);
1073 ReconfigureReceivers(cricket::MEDIA_TYPE_VIDEO);
1074 }
1039 const cricket::VideoContentDescription* desc = 1075 const cricket::VideoContentDescription* desc =
1040 static_cast<const cricket::VideoContentDescription*>( 1076 static_cast<const cricket::VideoContentDescription*>(
1041 video_content->description); 1077 video_content->description);
1042 UpdateRemoteStreamsList(GetActiveStreams(desc), desc->type(), new_streams); 1078 UpdateRemoteStreamsList(GetActiveStreams(desc), desc->type(), new_streams);
1043 remote_info_.default_video_track_needed = 1079 remote_info_.default_video_track_needed =
1044 !remote_desc->msid_supported() && desc->streams().empty() && 1080 !remote_desc->msid_supported() && desc->streams().empty() &&
1045 MediaContentDirectionHasSend(desc->direction()); 1081 MediaContentDirectionHasSend(desc->direction());
1046 } 1082 }
1047 1083
1048 // Update the DataChannels with the information from the remote peer. 1084 // Update the DataChannels with the information from the remote peer.
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after
1927 1963
1928 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>::iterator 1964 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>::iterator
1929 PeerConnection::FindReceiverForTrack(MediaStreamTrackInterface* track) { 1965 PeerConnection::FindReceiverForTrack(MediaStreamTrackInterface* track) {
1930 return std::find_if( 1966 return std::find_if(
1931 receivers_.begin(), receivers_.end(), 1967 receivers_.begin(), receivers_.end(),
1932 [track](const rtc::scoped_refptr<RtpReceiverInterface>& receiver) { 1968 [track](const rtc::scoped_refptr<RtpReceiverInterface>& receiver) {
1933 return receiver->track() == track; 1969 return receiver->track() == track;
1934 }); 1970 });
1935 } 1971 }
1936 1972
1973 void PeerConnection::ReconfigureSenders(cricket::MediaType media_type) {
1974 for (const auto& sender : senders_) {
1975 if (sender->media_type() == media_type) {
1976 sender->Reconfigure();
1977 }
1978 }
1979 }
1980
1981 void PeerConnection::ReconfigureReceivers(cricket::MediaType media_type) {
1982 for (const auto& receiver : receivers_) {
1983 if (receiver->media_type() == media_type) {
1984 receiver->Reconfigure();
1985 }
1986 }
1987 }
1988
1937 PeerConnection::TrackInfos* PeerConnection::GetRemoteTracks( 1989 PeerConnection::TrackInfos* PeerConnection::GetRemoteTracks(
1938 cricket::MediaType media_type) { 1990 cricket::MediaType media_type) {
1939 RTC_DCHECK(media_type == cricket::MEDIA_TYPE_AUDIO || 1991 RTC_DCHECK(media_type == cricket::MEDIA_TYPE_AUDIO ||
1940 media_type == cricket::MEDIA_TYPE_VIDEO); 1992 media_type == cricket::MEDIA_TYPE_VIDEO);
1941 return (media_type == cricket::MEDIA_TYPE_AUDIO) ? &remote_audio_tracks_ 1993 return (media_type == cricket::MEDIA_TYPE_AUDIO) ? &remote_audio_tracks_
1942 : &remote_video_tracks_; 1994 : &remote_video_tracks_;
1943 } 1995 }
1944 1996
1945 PeerConnection::TrackInfos* PeerConnection::GetLocalTracks( 1997 PeerConnection::TrackInfos* PeerConnection::GetLocalTracks(
1946 cricket::MediaType media_type) { 1998 cricket::MediaType media_type) {
(...skipping 19 matching lines...) Expand all
1966 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { 2018 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const {
1967 for (const auto& channel : sctp_data_channels_) { 2019 for (const auto& channel : sctp_data_channels_) {
1968 if (channel->id() == sid) { 2020 if (channel->id() == sid) {
1969 return channel; 2021 return channel;
1970 } 2022 }
1971 } 2023 }
1972 return nullptr; 2024 return nullptr;
1973 } 2025 }
1974 2026
1975 } // namespace webrtc 2027 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698