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

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: Renaming "ProxyTo<X>" to "ProxyWithInternal<X>" Created 4 years, 6 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
« no previous file with comments | « webrtc/api/peerconnection.h ('k') | webrtc/api/peerconnectioninterface_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/peerconnection.cc
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
index 5f8acca5669c0c1aabb8a568e9d8a4d46a5c22f9..6b5cc69b955a832810cfd8e8dd0053c899028b4b 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -45,7 +45,10 @@ using webrtc::DataChannel;
using webrtc::MediaConstraintsInterface;
using webrtc::MediaStreamInterface;
using webrtc::PeerConnectionInterface;
+using webrtc::RtpSenderInternal;
using webrtc::RtpSenderInterface;
+using webrtc::RtpSenderProxy;
+using webrtc::RtpSenderProxyWithInternal;
using webrtc::StreamCollection;
static const char kDefaultStreamLabel[] = "default";
@@ -349,13 +352,14 @@ 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<
+ RtpSenderProxyWithInternal<RtpSenderInternal>>>& 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->internal()->stream_id());
}
// Check for data channels.
@@ -547,10 +551,10 @@ 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->internal()->Stop();
}
for (const auto& receiver : receivers_) {
- receiver->Stop();
+ receiver->internal()->Stop();
}
// Destroy stats_ because it depends on session_.
stats_.reset(nullptr);
@@ -702,32 +706,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<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender;
if (track->kind() == MediaStreamTrackInterface::kAudioKind) {
- new_sender = RtpSenderProxy::Create(
+ new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::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->internal()->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->internal()->stream_id(), track->id());
if (track_info) {
- new_sender->SetSsrc(track_info->ssrc);
+ new_sender->internal()->SetSsrc(track_info->ssrc);
}
} else if (track->kind() == MediaStreamTrackInterface::kVideoKind) {
- new_sender = RtpSenderProxy::Create(
+ new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
signaling_thread(),
new VideoRtpSender(static_cast<VideoTrackInterface*>(track),
session_.get()));
if (!streams.empty()) {
- new_sender->set_stream_id(streams[0]->label());
+ new_sender->internal()->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->internal()->stream_id(), track->id());
if (track_info) {
- new_sender->SetSsrc(track_info->ssrc);
+ new_sender->internal()->SetSsrc(track_info->ssrc);
}
} else {
LOG(LS_ERROR) << "CreateSender called with invalid kind: " << track->kind();
@@ -750,7 +754,7 @@ bool PeerConnection::RemoveTrack(RtpSenderInterface* sender) {
LOG(LS_ERROR) << "Couldn't find sender " << sender->id() << " to remove.";
return false;
}
- (*it)->Stop();
+ (*it)->internal()->Stop();
senders_.erase(it);
observer_->OnRenegotiationNeeded();
@@ -782,19 +786,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<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender;
if (kind == MediaStreamTrackInterface::kAudioKind) {
- new_sender = RtpSenderProxy::Create(
+ new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
signaling_thread(), new AudioRtpSender(session_.get(), stats_.get()));
} else if (kind == MediaStreamTrackInterface::kVideoKind) {
- new_sender = RtpSenderProxy::Create(signaling_thread(),
- new VideoRtpSender(session_.get()));
+ new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::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->internal()->set_stream_id(stream_id);
}
senders_.push_back(new_sender);
return new_sender;
@@ -802,12 +806,20 @@ 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>>
PeerConnection::GetReceivers() const {
- return receivers_;
+ std::vector<rtc::scoped_refptr<RtpReceiverInterface>> ret;
+ for (const auto& receiver : receivers_) {
+ ret.push_back(receiver.get());
+ }
+ return ret;
}
bool PeerConnection::GetStats(StatsObserver* observer,
@@ -1303,18 +1315,20 @@ void PeerConnection::OnMessage(rtc::Message* msg) {
void PeerConnection::CreateAudioReceiver(MediaStreamInterface* stream,
const std::string& track_id,
uint32_t ssrc) {
- receivers_.push_back(RtpReceiverProxy::Create(
- signaling_thread(),
- new AudioRtpReceiver(stream, track_id, ssrc, session_.get())));
+ receivers_.push_back(
+ RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
+ signaling_thread(),
+ new AudioRtpReceiver(stream, track_id, ssrc, session_.get())));
}
void PeerConnection::CreateVideoReceiver(MediaStreamInterface* stream,
const std::string& track_id,
uint32_t ssrc) {
- receivers_.push_back(RtpReceiverProxy::Create(
- signaling_thread(),
- new VideoRtpReceiver(stream, track_id, factory_->worker_thread(), ssrc,
- session_.get())));
+ receivers_.push_back(
+ RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
+ signaling_thread(),
+ new VideoRtpReceiver(stream, track_id, factory_->worker_thread(),
+ ssrc, session_.get())));
}
// TODO(deadbeef): Keep RtpReceivers around even if track goes away in remote
@@ -1325,7 +1339,7 @@ void PeerConnection::DestroyReceiver(const std::string& track_id) {
LOG(LS_WARNING) << "RtpReceiver for track with id " << track_id
<< " doesn't exist.";
} else {
- (*it)->Stop();
+ (*it)->internal()->Stop();
receivers_.erase(it);
}
}
@@ -1338,7 +1352,7 @@ void PeerConnection::StopReceivers(cricket::MediaType media_type) {
LOG(LS_WARNING) << "RtpReceiver for track with id " << track_info.track_id
<< " doesn't exist.";
} else {
- (*it)->Stop();
+ (*it)->internal()->Stop();
}
}
}
@@ -1401,14 +1415,15 @@ 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)->internal()->set_stream_id(stream->label());
return;
}
// Normal case; we've never seen this track before.
- rtc::scoped_refptr<RtpSenderInterface> new_sender = RtpSenderProxy::Create(
- signaling_thread(),
- new AudioRtpSender(track, stream->label(), session_.get(), stats_.get()));
+ rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender =
+ RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
+ signaling_thread(), new AudioRtpSender(track, stream->label(),
+ session_.get(), stats_.get()));
senders_.push_back(new_sender);
// If the sender has already been configured in SDP, we call SetSsrc,
// which will connect the sender to the underlying transport. This can
@@ -1419,7 +1434,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->internal()->SetSsrc(track_info->ssrc);
}
}
@@ -1433,7 +1448,7 @@ void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track,
<< " doesn't exist.";
return;
}
- (*sender)->Stop();
+ (*sender)->internal()->Stop();
senders_.erase(sender);
}
@@ -1443,19 +1458,20 @@ 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)->internal()->set_stream_id(stream->label());
return;
}
// Normal case; we've never seen this track before.
- rtc::scoped_refptr<RtpSenderInterface> new_sender = RtpSenderProxy::Create(
- signaling_thread(),
- new VideoRtpSender(track, stream->label(), session_.get()));
+ rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender =
+ RtpSenderProxyWithInternal<RtpSenderInternal>::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->internal()->SetSsrc(track_info->ssrc);
}
}
@@ -1467,7 +1483,7 @@ void PeerConnection::OnVideoTrackRemoved(VideoTrackInterface* track,
<< " doesn't exist.";
return;
}
- (*sender)->Stop();
+ (*sender)->internal()->Stop();
senders_.erase(sender);
}
@@ -1769,7 +1785,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);
+ RtpSenderInternal* sender = FindSenderById(track_id);
if (!sender) {
LOG(LS_WARNING) << "An unknown RtpSender with id " << track_id
<< " has been configured in the local description.";
@@ -1790,7 +1806,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);
+ RtpSenderInternal* sender = FindSenderById(track_id);
if (!sender) {
// This is the normal case. I.e., RemoveStream has been called and the
// SessionDescriptions has been renegotiated.
@@ -1894,7 +1910,8 @@ void PeerConnection::CreateRemoteRtpDataChannel(const std::string& label,
return;
}
channel->SetReceiveSsrc(remote_ssrc);
- auto proxy_channel = DataChannelProxy::Create(signaling_thread(), channel);
+ rtc::scoped_refptr<DataChannelInterface> proxy_channel =
+ DataChannelProxy::Create(signaling_thread(), channel);
// Call both the raw pointer and scoped_refptr versions of the method
// for compatibility.
observer_->OnDataChannel(proxy_channel.get());
@@ -2028,36 +2045,42 @@ void PeerConnection::OnDataChannelOpenMessage(
return;
}
- auto proxy_channel = DataChannelProxy::Create(signaling_thread(), channel);
+ rtc::scoped_refptr<DataChannelInterface> proxy_channel =
+ DataChannelProxy::Create(signaling_thread(), channel);
// Call both the raw pointer and scoped_refptr versions of the method
// for compatibility.
observer_->OnDataChannel(proxy_channel.get());
observer_->OnDataChannel(std::move(proxy_channel));
}
-RtpSenderInterface* PeerConnection::FindSenderById(const std::string& id) {
- auto it =
- std::find_if(senders_.begin(), senders_.end(),
- [id](const rtc::scoped_refptr<RtpSenderInterface>& sender) {
- return sender->id() == id;
- });
- return it != senders_.end() ? it->get() : nullptr;
+RtpSenderInternal* PeerConnection::FindSenderById(const std::string& id) {
+ auto it = std::find_if(
+ senders_.begin(), senders_.end(),
+ [id](const rtc::scoped_refptr<
+ RtpSenderProxyWithInternal<RtpSenderInternal>>& sender) {
+ return sender->id() == id;
+ });
+ return it != senders_.end() ? (*it)->internal() : nullptr;
}
-std::vector<rtc::scoped_refptr<RtpSenderInterface>>::iterator
+std::vector<
+ rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>>>::iterator
PeerConnection::FindSenderForTrack(MediaStreamTrackInterface* track) {
return std::find_if(
senders_.begin(), senders_.end(),
- [track](const rtc::scoped_refptr<RtpSenderInterface>& sender) {
+ [track](const rtc::scoped_refptr<
+ RtpSenderProxyWithInternal<RtpSenderInternal>>& sender) {
return sender->track() == track;
});
}
-std::vector<rtc::scoped_refptr<RtpReceiverInterface>>::iterator
+std::vector<rtc::scoped_refptr<
+ RtpReceiverProxyWithInternal<RtpReceiverInternal>>>::iterator
PeerConnection::FindReceiverForTrack(const std::string& track_id) {
return std::find_if(
receivers_.begin(), receivers_.end(),
- [track_id](const rtc::scoped_refptr<RtpReceiverInterface>& receiver) {
+ [track_id](const rtc::scoped_refptr<
+ RtpReceiverProxyWithInternal<RtpReceiverInternal>>& receiver) {
return receiver->id() == track_id;
});
}
« no previous file with comments | « webrtc/api/peerconnection.h ('k') | webrtc/api/peerconnectioninterface_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698