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

Side by Side Diff: pc/peerconnection.cc

Issue 3007973002: Mark template class RefCountedObject as final.
Patch Set: Rebased. Created 3 years, 3 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 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 if (FindSenderForTrack(track) != senders_.end()) { 614 if (FindSenderForTrack(track) != senders_.end()) {
615 LOG(LS_ERROR) << "Sender for track " << track->id() << " already exists."; 615 LOG(LS_ERROR) << "Sender for track " << track->id() << " already exists.";
616 return nullptr; 616 return nullptr;
617 } 617 }
618 618
619 // TODO(deadbeef): Support adding a track to multiple streams. 619 // TODO(deadbeef): Support adding a track to multiple streams.
620 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender; 620 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender;
621 if (track->kind() == MediaStreamTrackInterface::kAudioKind) { 621 if (track->kind() == MediaStreamTrackInterface::kAudioKind) {
622 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create( 622 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
623 signaling_thread(), 623 signaling_thread(),
624 new AudioRtpSender(static_cast<AudioTrackInterface*>(track), 624 new rtc::RefCountedObject<AudioRtpSender>(
625 session_->voice_channel(), stats_.get())); 625 static_cast<AudioTrackInterface*>(track),
626 session_->voice_channel(), stats_.get()));
626 if (!streams.empty()) { 627 if (!streams.empty()) {
627 new_sender->internal()->set_stream_id(streams[0]->label()); 628 new_sender->internal()->set_stream_id(streams[0]->label());
628 } 629 }
629 const TrackInfo* track_info = FindTrackInfo( 630 const TrackInfo* track_info = FindTrackInfo(
630 local_audio_tracks_, new_sender->internal()->stream_id(), track->id()); 631 local_audio_tracks_, new_sender->internal()->stream_id(), track->id());
631 if (track_info) { 632 if (track_info) {
632 new_sender->internal()->SetSsrc(track_info->ssrc); 633 new_sender->internal()->SetSsrc(track_info->ssrc);
633 } 634 }
634 } else if (track->kind() == MediaStreamTrackInterface::kVideoKind) { 635 } else if (track->kind() == MediaStreamTrackInterface::kVideoKind) {
635 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create( 636 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
636 signaling_thread(), 637 signaling_thread(),
637 new VideoRtpSender(static_cast<VideoTrackInterface*>(track), 638 new rtc::RefCountedObject<VideoRtpSender>(
638 session_->video_channel())); 639 static_cast<VideoTrackInterface*>(track),
640 session_->video_channel()));
639 if (!streams.empty()) { 641 if (!streams.empty()) {
640 new_sender->internal()->set_stream_id(streams[0]->label()); 642 new_sender->internal()->set_stream_id(streams[0]->label());
641 } 643 }
642 const TrackInfo* track_info = FindTrackInfo( 644 const TrackInfo* track_info = FindTrackInfo(
643 local_video_tracks_, new_sender->internal()->stream_id(), track->id()); 645 local_video_tracks_, new_sender->internal()->stream_id(), track->id());
644 if (track_info) { 646 if (track_info) {
645 new_sender->internal()->SetSsrc(track_info->ssrc); 647 new_sender->internal()->SetSsrc(track_info->ssrc);
646 } 648 }
647 } else { 649 } else {
648 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << track->kind(); 650 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << track->kind();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 const std::string& kind, 697 const std::string& kind,
696 const std::string& stream_id) { 698 const std::string& stream_id) {
697 TRACE_EVENT0("webrtc", "PeerConnection::CreateSender"); 699 TRACE_EVENT0("webrtc", "PeerConnection::CreateSender");
698 if (IsClosed()) { 700 if (IsClosed()) {
699 return nullptr; 701 return nullptr;
700 } 702 }
701 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender; 703 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender;
702 if (kind == MediaStreamTrackInterface::kAudioKind) { 704 if (kind == MediaStreamTrackInterface::kAudioKind) {
703 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create( 705 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
704 signaling_thread(), 706 signaling_thread(),
705 new AudioRtpSender(session_->voice_channel(), stats_.get())); 707 new rtc::RefCountedObject<AudioRtpSender>(
708 session_->voice_channel(), stats_.get()));
706 } else if (kind == MediaStreamTrackInterface::kVideoKind) { 709 } else if (kind == MediaStreamTrackInterface::kVideoKind) {
707 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create( 710 new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
708 signaling_thread(), new VideoRtpSender(session_->video_channel())); 711 signaling_thread(), new rtc::RefCountedObject<VideoRtpSender>(
712 session_->video_channel()));
709 } else { 713 } else {
710 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << kind; 714 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << kind;
711 return new_sender; 715 return new_sender;
712 } 716 }
713 if (!stream_id.empty()) { 717 if (!stream_id.empty()) {
714 new_sender->internal()->set_stream_id(stream_id); 718 new_sender->internal()->set_stream_id(stream_id);
715 } 719 }
716 senders_.push_back(new_sender); 720 senders_.push_back(new_sender);
717 return new_sender; 721 return new_sender;
718 } 722 }
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after
1415 break; 1419 break;
1416 } 1420 }
1417 } 1421 }
1418 1422
1419 void PeerConnection::CreateAudioReceiver(MediaStreamInterface* stream, 1423 void PeerConnection::CreateAudioReceiver(MediaStreamInterface* stream,
1420 const std::string& track_id, 1424 const std::string& track_id,
1421 uint32_t ssrc) { 1425 uint32_t ssrc) {
1422 rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>> 1426 rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>
1423 receiver = RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create( 1427 receiver = RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
1424 signaling_thread(), 1428 signaling_thread(),
1425 new AudioRtpReceiver(track_id, ssrc, session_->voice_channel())); 1429 new rtc::RefCountedObject<AudioRtpReceiver>(
1430 track_id, ssrc, session_->voice_channel()));
1426 stream->AddTrack( 1431 stream->AddTrack(
1427 static_cast<AudioTrackInterface*>(receiver->internal()->track().get())); 1432 static_cast<AudioTrackInterface*>(receiver->internal()->track().get()));
1428 receivers_.push_back(receiver); 1433 receivers_.push_back(receiver);
1429 std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams; 1434 std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams;
1430 streams.push_back(rtc::scoped_refptr<MediaStreamInterface>(stream)); 1435 streams.push_back(rtc::scoped_refptr<MediaStreamInterface>(stream));
1431 observer_->OnAddTrack(receiver, streams); 1436 observer_->OnAddTrack(receiver, streams);
1432 } 1437 }
1433 1438
1434 void PeerConnection::CreateVideoReceiver(MediaStreamInterface* stream, 1439 void PeerConnection::CreateVideoReceiver(MediaStreamInterface* stream,
1435 const std::string& track_id, 1440 const std::string& track_id,
1436 uint32_t ssrc) { 1441 uint32_t ssrc) {
1437 rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>> 1442 rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>
1438 receiver = RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create( 1443 receiver = RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
1439 signaling_thread(), 1444 signaling_thread(),
1440 new VideoRtpReceiver(track_id, factory_->worker_thread(), ssrc, 1445 new rtc::RefCountedObject<VideoRtpReceiver>(
1441 session_->video_channel())); 1446 track_id, factory_->worker_thread(), ssrc,
1447 session_->video_channel()));
1442 stream->AddTrack( 1448 stream->AddTrack(
1443 static_cast<VideoTrackInterface*>(receiver->internal()->track().get())); 1449 static_cast<VideoTrackInterface*>(receiver->internal()->track().get()));
1444 receivers_.push_back(receiver); 1450 receivers_.push_back(receiver);
1445 std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams; 1451 std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams;
1446 streams.push_back(rtc::scoped_refptr<MediaStreamInterface>(stream)); 1452 streams.push_back(rtc::scoped_refptr<MediaStreamInterface>(stream));
1447 observer_->OnAddTrack(receiver, streams); 1453 observer_->OnAddTrack(receiver, streams);
1448 } 1454 }
1449 1455
1450 // TODO(deadbeef): Keep RtpReceivers around even if track goes away in remote 1456 // TODO(deadbeef): Keep RtpReceivers around even if track goes away in remote
1451 // description. 1457 // description.
(...skipping 16 matching lines...) Expand all
1468 // We already have a sender for this track, so just change the stream_id 1474 // We already have a sender for this track, so just change the stream_id
1469 // so that it's correct in the next call to CreateOffer. 1475 // so that it's correct in the next call to CreateOffer.
1470 (*sender)->internal()->set_stream_id(stream->label()); 1476 (*sender)->internal()->set_stream_id(stream->label());
1471 return; 1477 return;
1472 } 1478 }
1473 1479
1474 // Normal case; we've never seen this track before. 1480 // Normal case; we've never seen this track before.
1475 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender = 1481 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender =
1476 RtpSenderProxyWithInternal<RtpSenderInternal>::Create( 1482 RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
1477 signaling_thread(), 1483 signaling_thread(),
1478 new AudioRtpSender(track, {stream->label()}, 1484 new rtc::RefCountedObject<AudioRtpSender>(
1479 session_->voice_channel(), stats_.get())); 1485 track, std::vector<std::string>({stream->label()}),
1486 session_->voice_channel(), stats_.get()));
1480 senders_.push_back(new_sender); 1487 senders_.push_back(new_sender);
1481 // If the sender has already been configured in SDP, we call SetSsrc, 1488 // If the sender has already been configured in SDP, we call SetSsrc,
1482 // which will connect the sender to the underlying transport. This can 1489 // which will connect the sender to the underlying transport. This can
1483 // occur if a local session description that contains the ID of the sender 1490 // occur if a local session description that contains the ID of the sender
1484 // is set before AddStream is called. It can also occur if the local 1491 // is set before AddStream is called. It can also occur if the local
1485 // session description is not changed and RemoveStream is called, and 1492 // session description is not changed and RemoveStream is called, and
1486 // later AddStream is called again with the same stream. 1493 // later AddStream is called again with the same stream.
1487 const TrackInfo* track_info = 1494 const TrackInfo* track_info =
1488 FindTrackInfo(local_audio_tracks_, stream->label(), track->id()); 1495 FindTrackInfo(local_audio_tracks_, stream->label(), track->id());
1489 if (track_info) { 1496 if (track_info) {
(...skipping 23 matching lines...) Expand all
1513 if (sender != senders_.end()) { 1520 if (sender != senders_.end()) {
1514 // We already have a sender for this track, so just change the stream_id 1521 // We already have a sender for this track, so just change the stream_id
1515 // so that it's correct in the next call to CreateOffer. 1522 // so that it's correct in the next call to CreateOffer.
1516 (*sender)->internal()->set_stream_id(stream->label()); 1523 (*sender)->internal()->set_stream_id(stream->label());
1517 return; 1524 return;
1518 } 1525 }
1519 1526
1520 // Normal case; we've never seen this track before. 1527 // Normal case; we've never seen this track before.
1521 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender = 1528 rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender =
1522 RtpSenderProxyWithInternal<RtpSenderInternal>::Create( 1529 RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
1523 signaling_thread(), new VideoRtpSender(track, {stream->label()}, 1530 signaling_thread(), new rtc::RefCountedObject<VideoRtpSender>(
1524 session_->video_channel())); 1531 track,
1532 std::vector<std::string>({stream->label()}),
1533 session_->video_channel()));
1525 senders_.push_back(new_sender); 1534 senders_.push_back(new_sender);
1526 const TrackInfo* track_info = 1535 const TrackInfo* track_info =
1527 FindTrackInfo(local_video_tracks_, stream->label(), track->id()); 1536 FindTrackInfo(local_video_tracks_, stream->label(), track->id());
1528 if (track_info) { 1537 if (track_info) {
1529 new_sender->internal()->SetSsrc(track_info->ssrc); 1538 new_sender->internal()->SetSsrc(track_info->ssrc);
1530 } 1539 }
1531 } 1540 }
1532 1541
1533 void PeerConnection::RemoveVideoTrack(VideoTrackInterface* track, 1542 void PeerConnection::RemoveVideoTrack(VideoTrackInterface* track,
1534 MediaStreamInterface* stream) { 1543 MediaStreamInterface* stream) {
(...skipping 991 matching lines...) Expand 10 before | Expand all | Expand 10 after
2526 return event_log_->StartLogging(file, max_size_bytes); 2535 return event_log_->StartLogging(file, max_size_bytes);
2527 } 2536 }
2528 2537
2529 void PeerConnection::StopRtcEventLog_w() { 2538 void PeerConnection::StopRtcEventLog_w() {
2530 if (event_log_) { 2539 if (event_log_) {
2531 event_log_->StopLogging(); 2540 event_log_->StopLogging();
2532 } 2541 }
2533 } 2542 }
2534 2543
2535 } // namespace webrtc 2544 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698