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

Side by Side Diff: webrtc/pc/peerconnection.cc

Issue 2977493002: When a track is added/removed directly to MediaStream notify observer->OnRenegotionNeeded (Closed)
Patch Set: Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 // which will connect the sender to the underlying transport. This can 1548 // which will connect the sender to the underlying transport. This can
1549 // occur if a local session description that contains the ID of the sender 1549 // occur if a local session description that contains the ID of the sender
1550 // is set before AddStream is called. It can also occur if the local 1550 // is set before AddStream is called. It can also occur if the local
1551 // session description is not changed and RemoveStream is called, and 1551 // session description is not changed and RemoveStream is called, and
1552 // later AddStream is called again with the same stream. 1552 // later AddStream is called again with the same stream.
1553 const TrackInfo* track_info = 1553 const TrackInfo* track_info =
1554 FindTrackInfo(local_audio_tracks_, stream->label(), track->id()); 1554 FindTrackInfo(local_audio_tracks_, stream->label(), track->id());
1555 if (track_info) { 1555 if (track_info) {
1556 new_sender->internal()->SetSsrc(track_info->ssrc); 1556 new_sender->internal()->SetSsrc(track_info->ssrc);
1557 } 1557 }
1558 observer_->OnRenegotiationNeeded();
1558 } 1559 }
1559 1560
1560 // TODO(deadbeef): Don't destroy RtpSenders here; they should be kept around 1561 // TODO(deadbeef): Don't destroy RtpSenders here; they should be kept around
1561 // indefinitely, when we have unified plan SDP. 1562 // indefinitely, when we have unified plan SDP.
1562 void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track, 1563 void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track,
1563 MediaStreamInterface* stream) { 1564 MediaStreamInterface* stream) {
1564 if (IsClosed()) { 1565 if (IsClosed()) {
1565 return; 1566 return;
1566 } 1567 }
1567 auto sender = FindSenderForTrack(track); 1568 auto sender = FindSenderForTrack(track);
1568 if (sender == senders_.end()) { 1569 if (sender == senders_.end()) {
1569 LOG(LS_WARNING) << "RtpSender for track with id " << track->id() 1570 LOG(LS_WARNING) << "RtpSender for track with id " << track->id()
1570 << " doesn't exist."; 1571 << " doesn't exist.";
1571 return; 1572 return;
1572 } 1573 }
1573 (*sender)->internal()->Stop(); 1574 (*sender)->internal()->Stop();
1574 senders_.erase(sender); 1575 senders_.erase(sender);
1576 observer_->OnRenegotiationNeeded();
1575 } 1577 }
1576 1578
1577 void PeerConnection::OnVideoTrackAdded(VideoTrackInterface* track, 1579 void PeerConnection::OnVideoTrackAdded(VideoTrackInterface* track,
1578 MediaStreamInterface* stream) { 1580 MediaStreamInterface* stream) {
1579 if (IsClosed()) { 1581 if (IsClosed()) {
1580 return; 1582 return;
1581 } 1583 }
1582 auto sender = FindSenderForTrack(track); 1584 auto sender = FindSenderForTrack(track);
1583 if (sender != senders_.end()) { 1585 if (sender != senders_.end()) {
1584 // We already have a sender for this track, so just change the stream_id 1586 // We already have a sender for this track, so just change the stream_id
1585 // so that it's correct in the next call to CreateOffer. 1587 // so that it's correct in the next call to CreateOffer.
1586 (*sender)->internal()->set_stream_id(stream->label()); 1588 (*sender)->internal()->set_stream_id(stream->label());
1587 return; 1589 return;
1588 } 1590 }
1589 1591
1590 // Normal case; we've never seen this track before. 1592 // Normal case; we've never seen this track before.
1591 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender = 1593 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender =
1592 RtpSenderProxyWithInternal<RtpSenderInternal>::Create( 1594 RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
1593 signaling_thread(), new VideoRtpSender(track, stream->label(), 1595 signaling_thread(), new VideoRtpSender(track, stream->label(),
1594 session_->video_channel())); 1596 session_->video_channel()));
1595 senders_.push_back(new_sender); 1597 senders_.push_back(new_sender);
1596 const TrackInfo* track_info = 1598 const TrackInfo* track_info =
1597 FindTrackInfo(local_video_tracks_, stream->label(), track->id()); 1599 FindTrackInfo(local_video_tracks_, stream->label(), track->id());
1598 if (track_info) { 1600 if (track_info) {
1599 new_sender->internal()->SetSsrc(track_info->ssrc); 1601 new_sender->internal()->SetSsrc(track_info->ssrc);
1600 } 1602 }
1603 observer_->OnRenegotiationNeeded();
1601 } 1604 }
1602 1605
1603 void PeerConnection::OnVideoTrackRemoved(VideoTrackInterface* track, 1606 void PeerConnection::OnVideoTrackRemoved(VideoTrackInterface* track,
1604 MediaStreamInterface* stream) { 1607 MediaStreamInterface* stream) {
1605 if (IsClosed()) { 1608 if (IsClosed()) {
1606 return; 1609 return;
1607 } 1610 }
1608 auto sender = FindSenderForTrack(track); 1611 auto sender = FindSenderForTrack(track);
1609 if (sender == senders_.end()) { 1612 if (sender == senders_.end()) {
1610 LOG(LS_WARNING) << "RtpSender for track with id " << track->id() 1613 LOG(LS_WARNING) << "RtpSender for track with id " << track->id()
1611 << " doesn't exist."; 1614 << " doesn't exist.";
1612 return; 1615 return;
1613 } 1616 }
1614 (*sender)->internal()->Stop(); 1617 (*sender)->internal()->Stop();
1615 senders_.erase(sender); 1618 senders_.erase(sender);
1619 observer_->OnRenegotiationNeeded();
1616 } 1620 }
1617 1621
1618 void PeerConnection::PostSetSessionDescriptionFailure( 1622 void PeerConnection::PostSetSessionDescriptionFailure(
1619 SetSessionDescriptionObserver* observer, 1623 SetSessionDescriptionObserver* observer,
1620 const std::string& error) { 1624 const std::string& error) {
1621 SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer); 1625 SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer);
1622 msg->error = error; 1626 msg->error = error;
1623 signaling_thread()->Post(RTC_FROM_HERE, this, 1627 signaling_thread()->Post(RTC_FROM_HERE, this,
1624 MSG_SET_SESSIONDESCRIPTION_FAILED, msg); 1628 MSG_SET_SESSIONDESCRIPTION_FAILED, msg);
1625 } 1629 }
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after
2368 return event_log_->StartLogging(file, max_size_bytes); 2372 return event_log_->StartLogging(file, max_size_bytes);
2369 } 2373 }
2370 2374
2371 void PeerConnection::StopRtcEventLog_w() { 2375 void PeerConnection::StopRtcEventLog_w() {
2372 if (event_log_) { 2376 if (event_log_) {
2373 event_log_->StopLogging(); 2377 event_log_->StopLogging();
2374 } 2378 }
2375 } 2379 }
2376 2380
2377 } // namespace webrtc 2381 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698