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

Unified Diff: webrtc/api/peerconnection.cc

Issue 2023373002: Separating internal and external methods of RtpSender/RtpReceiver. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 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
Index: webrtc/api/peerconnection.cc
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
index 7f1f4523781685f062bfa0f7e8b639fd1cc1b8d4..249b94b232e8a79f862556ee82b7f25216622262 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -46,7 +46,10 @@ using webrtc::DataChannel;
using webrtc::MediaConstraintsInterface;
using webrtc::MediaStreamInterface;
using webrtc::PeerConnectionInterface;
+using webrtc::RtpSender;
using webrtc::RtpSenderInterface;
+using webrtc::RtpSenderProxy;
+using webrtc::RtpSenderProxyEx;
using webrtc::StreamCollection;
static const char kDefaultStreamLabel[] = "default";
@@ -347,13 +350,13 @@ bool IsValidOfferToReceiveMedia(int value) {
// Add the stream and RTP data channel info to |session_options|.
void AddSendStreams(
cricket::MediaSessionOptions* session_options,
- const std::vector<rtc::scoped_refptr<RtpSenderInterface>>& senders,
+ const std::vector<rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>>>& senders,
const std::map<std::string, rtc::scoped_refptr<DataChannel>>&
rtp_data_channels) {
session_options->streams.clear();
for (const auto& sender : senders) {
session_options->AddSendStream(sender->media_type(), sender->id(),
- sender->stream_id());
+ sender->get()->stream_id());
}
// Check for data channels.
@@ -517,7 +520,7 @@ PeerConnection::~PeerConnection() {
// Need to detach RTP senders/receivers from WebRtcSession,
// since it's about to be destroyed.
for (const auto& sender : senders_) {
- sender->Stop();
+ sender->get()->Stop();
}
for (const auto& receiver : receivers_) {
receiver->Stop();
@@ -686,32 +689,32 @@ rtc::scoped_refptr<RtpSenderInterface> PeerConnection::AddTrack(
}
// TODO(deadbeef): Support adding a track to multiple streams.
- rtc::scoped_refptr<RtpSenderInterface> new_sender;
+ rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender;
if (track->kind() == MediaStreamTrackInterface::kAudioKind) {
- new_sender = RtpSenderProxy::Create(
+ new_sender = RtpSenderProxyEx<RtpSender>::Create(
signaling_thread(),
new AudioRtpSender(static_cast<AudioTrackInterface*>(track),
session_.get(), stats_.get()));
if (!streams.empty()) {
- new_sender->set_stream_id(streams[0]->label());
+ new_sender->get()->set_stream_id(streams[0]->label());
}
const TrackInfo* track_info = FindTrackInfo(
- local_audio_tracks_, new_sender->stream_id(), track->id());
+ local_audio_tracks_, new_sender->get()->stream_id(), track->id());
if (track_info) {
- new_sender->SetSsrc(track_info->ssrc);
+ new_sender->get()->SetSsrc(track_info->ssrc);
}
} else if (track->kind() == MediaStreamTrackInterface::kVideoKind) {
- new_sender = RtpSenderProxy::Create(
+ new_sender = RtpSenderProxyEx<RtpSender>::Create(
signaling_thread(),
new VideoRtpSender(static_cast<VideoTrackInterface*>(track),
session_.get()));
if (!streams.empty()) {
- new_sender->set_stream_id(streams[0]->label());
+ new_sender->get()->set_stream_id(streams[0]->label());
}
const TrackInfo* track_info = FindTrackInfo(
- local_video_tracks_, new_sender->stream_id(), track->id());
+ local_video_tracks_, new_sender->get()->stream_id(), track->id());
if (track_info) {
- new_sender->SetSsrc(track_info->ssrc);
+ new_sender->get()->SetSsrc(track_info->ssrc);
}
} else {
LOG(LS_ERROR) << "CreateSender called with invalid kind: " << track->kind();
@@ -734,7 +737,7 @@ bool PeerConnection::RemoveTrack(RtpSenderInterface* sender) {
LOG(LS_ERROR) << "Couldn't find sender " << sender->id() << " to remove.";
return false;
}
- (*it)->Stop();
+ (*it)->get()->Stop();
senders_.erase(it);
observer_->OnRenegotiationNeeded();
@@ -766,19 +769,19 @@ rtc::scoped_refptr<RtpSenderInterface> PeerConnection::CreateSender(
const std::string& kind,
const std::string& stream_id) {
TRACE_EVENT0("webrtc", "PeerConnection::CreateSender");
- rtc::scoped_refptr<RtpSenderInterface> new_sender;
+ rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender;
if (kind == MediaStreamTrackInterface::kAudioKind) {
- new_sender = RtpSenderProxy::Create(
+ new_sender = RtpSenderProxyEx<RtpSender>::Create(
signaling_thread(), new AudioRtpSender(session_.get(), stats_.get()));
} else if (kind == MediaStreamTrackInterface::kVideoKind) {
- new_sender = RtpSenderProxy::Create(signaling_thread(),
+ new_sender = RtpSenderProxyEx<RtpSender>::Create(signaling_thread(),
new VideoRtpSender(session_.get()));
} else {
LOG(LS_ERROR) << "CreateSender called with invalid kind: " << kind;
return new_sender;
}
if (!stream_id.empty()) {
- new_sender->set_stream_id(stream_id);
+ new_sender->get()->set_stream_id(stream_id);
}
senders_.push_back(new_sender);
return new_sender;
@@ -786,7 +789,11 @@ rtc::scoped_refptr<RtpSenderInterface> PeerConnection::CreateSender(
std::vector<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::GetSenders()
const {
- return senders_;
+ std::vector<rtc::scoped_refptr<RtpSenderInterface>> ret;
+ for (const auto& sender : senders_) {
+ ret.push_back(sender.get());
+ }
+ return ret;
}
std::vector<rtc::scoped_refptr<RtpReceiverInterface>>
@@ -1380,12 +1387,12 @@ void PeerConnection::OnAudioTrackAdded(AudioTrackInterface* track,
if (sender != senders_.end()) {
// We already have a sender for this track, so just change the stream_id
// so that it's correct in the next call to CreateOffer.
- (*sender)->set_stream_id(stream->label());
+ (*sender)->get()->set_stream_id(stream->label());
return;
}
// Normal case; we've never seen this track before.
- rtc::scoped_refptr<RtpSenderInterface> new_sender = RtpSenderProxy::Create(
+ rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender = RtpSenderProxyEx<RtpSender>::Create(
signaling_thread(),
new AudioRtpSender(track, stream->label(), session_.get(), stats_.get()));
senders_.push_back(new_sender);
@@ -1398,7 +1405,7 @@ void PeerConnection::OnAudioTrackAdded(AudioTrackInterface* track,
const TrackInfo* track_info =
FindTrackInfo(local_audio_tracks_, stream->label(), track->id());
if (track_info) {
- new_sender->SetSsrc(track_info->ssrc);
+ new_sender->get()->SetSsrc(track_info->ssrc);
}
}
@@ -1412,7 +1419,7 @@ void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track,
<< " doesn't exist.";
return;
}
- (*sender)->Stop();
+ (*sender)->get()->Stop();
senders_.erase(sender);
}
@@ -1422,19 +1429,19 @@ void PeerConnection::OnVideoTrackAdded(VideoTrackInterface* track,
if (sender != senders_.end()) {
// We already have a sender for this track, so just change the stream_id
// so that it's correct in the next call to CreateOffer.
- (*sender)->set_stream_id(stream->label());
+ (*sender)->get()->set_stream_id(stream->label());
return;
}
// Normal case; we've never seen this track before.
- rtc::scoped_refptr<RtpSenderInterface> new_sender = RtpSenderProxy::Create(
+ rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender = RtpSenderProxyEx<RtpSender>::Create(
signaling_thread(),
new VideoRtpSender(track, stream->label(), session_.get()));
senders_.push_back(new_sender);
const TrackInfo* track_info =
FindTrackInfo(local_video_tracks_, stream->label(), track->id());
if (track_info) {
- new_sender->SetSsrc(track_info->ssrc);
+ new_sender->get()->SetSsrc(track_info->ssrc);
}
}
@@ -1446,7 +1453,7 @@ void PeerConnection::OnVideoTrackRemoved(VideoTrackInterface* track,
<< " doesn't exist.";
return;
}
- (*sender)->Stop();
+ (*sender)->get()->Stop();
senders_.erase(sender);
}
@@ -1739,7 +1746,7 @@ void PeerConnection::OnLocalTrackSeen(const std::string& stream_label,
const std::string& track_id,
uint32_t ssrc,
cricket::MediaType media_type) {
- RtpSenderInterface* sender = FindSenderById(track_id);
+ RtpSender* sender = FindSenderById(track_id);
if (!sender) {
LOG(LS_WARNING) << "An unknown RtpSender with id " << track_id
<< " has been configured in the local description.";
@@ -1760,7 +1767,7 @@ void PeerConnection::OnLocalTrackRemoved(const std::string& stream_label,
const std::string& track_id,
uint32_t ssrc,
cricket::MediaType media_type) {
- RtpSenderInterface* sender = FindSenderById(track_id);
+ RtpSender* sender = FindSenderById(track_id);
if (!sender) {
// This is the normal case. I.e., RemoveStream has been called and the
// SessionDescriptions has been renegotiated.
@@ -1999,16 +2006,16 @@ void PeerConnection::OnDataChannelOpenMessage(
DataChannelProxy::Create(signaling_thread(), channel));
}
-RtpSenderInterface* PeerConnection::FindSenderById(const std::string& id) {
+RtpSender* PeerConnection::FindSenderById(const std::string& id) {
auto it =
std::find_if(senders_.begin(), senders_.end(),
- [id](const rtc::scoped_refptr<RtpSenderInterface>& sender) {
+ [id](const rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>>& sender) {
return sender->id() == id;
});
- return it != senders_.end() ? it->get() : nullptr;
+ return it != senders_.end() ? it->get()->get() : nullptr;
}
-std::vector<rtc::scoped_refptr<RtpSenderInterface>>::iterator
+std::vector<rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>>>::iterator
PeerConnection::FindSenderForTrack(MediaStreamTrackInterface* track) {
return std::find_if(
senders_.begin(), senders_.end(),

Powered by Google App Engine
This is Rietveld 408576698