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

Unified Diff: webrtc/api/peerconnection.cc

Issue 1765423005: Change VideoRtpReceiver to create remote VideoTrack and VideoTrackSource. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: self review Created 4 years, 9 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 c2039aeea414321e612e461d635df72e486904a3..e1ef6e2d67d42d2572a4933bf765f53d6f3ba570 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -381,10 +381,8 @@ namespace webrtc {
// Factory class for creating remote MediaStreams and MediaStreamTracks.
class RemoteMediaStreamFactory {
public:
- explicit RemoteMediaStreamFactory(rtc::Thread* signaling_thread,
- rtc::Thread* worker_thread)
- : signaling_thread_(signaling_thread),
- worker_thread_(worker_thread) {}
+ explicit RemoteMediaStreamFactory(rtc::Thread* signaling_thread)
+ : signaling_thread_(signaling_thread) {}
rtc::scoped_refptr<MediaStreamInterface> CreateMediaStream(
const std::string& stream_label) {
@@ -400,15 +398,6 @@ class RemoteMediaStreamFactory {
stream, track_id, RemoteAudioSource::Create(ssrc, provider));
}
- VideoTrackInterface* AddVideoTrack(webrtc::MediaStreamInterface* stream,
- const std::string& track_id) {
- return AddTrack<VideoTrackInterface, VideoTrack, VideoTrackProxy>(
- stream, track_id,
- VideoCapturerTrackSource::Create(
- worker_thread_, new RemoteVideoCapturer(), nullptr, true)
- .get());
- }
-
private:
template <typename TI, typename T, typename TP, typename S>
TI* AddTrack(MediaStreamInterface* stream,
@@ -424,7 +413,6 @@ class RemoteMediaStreamFactory {
}
rtc::Thread* signaling_thread_;
- rtc::Thread* worker_thread_;
};
bool ExtractMediaSessionOptions(
@@ -611,8 +599,8 @@ bool PeerConnection::Initialize(
media_controller_.reset(factory_->CreateMediaController(media_config));
- remote_stream_factory_.reset(new RemoteMediaStreamFactory(
- factory_->signaling_thread(), factory_->worker_thread()));
+ remote_stream_factory_.reset(
+ new RemoteMediaStreamFactory(factory_->signaling_thread()));
session_.reset(
new WebRtcSession(media_controller_.get(), factory_->signaling_thread(),
@@ -1324,12 +1312,15 @@ void PeerConnection::CreateAudioReceiver(MediaStreamInterface* stream,
new AudioRtpReceiver(audio_track, ssrc, session_.get())));
}
-void PeerConnection::CreateVideoReceiver(MediaStreamInterface* stream,
- VideoTrackInterface* video_track,
- uint32_t ssrc) {
- receivers_.push_back(RtpReceiverProxy::Create(
- signaling_thread(),
- new VideoRtpReceiver(video_track, ssrc, session_.get())));
+VideoRtpReceiver* PeerConnection::CreateVideoReceiver(
+ const std::string& track_id,
+ uint32_t ssrc) {
+ VideoRtpReceiver* video_receiver = new VideoRtpReceiver(
+ track_id, factory_->worker_thread(), ssrc, session_.get());
+ // RtpReceiverProxy takes ownership of |video_receiver|;
+ receivers_.push_back(
+ RtpReceiverProxy::Create(signaling_thread(), video_receiver));
+ return video_receiver;
pthatcher1 2016/03/09 18:16:49 Why do we keep ownership of the proxy but then ret
perkj_webrtc 2016/03/09 21:22:59 That is my attempt to avoid a static cast and to b
Taylor Brandstetter 2016/03/09 22:10:41 I assume you mean "return an RtpReceiverInterface"
perkj_webrtc 2016/03/10 00:26:38 that is a very good idea.
}
// TODO(deadbeef): Keep RtpReceivers around even if track goes away in remote
@@ -1677,9 +1668,8 @@ void PeerConnection::OnRemoteTrackSeen(const std::string& stream_label,
ssrc, session_.get(), stream, track_id);
CreateAudioReceiver(stream, audio_track, ssrc);
} else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
- VideoTrackInterface* video_track =
- remote_stream_factory_->AddVideoTrack(stream, track_id);
- CreateVideoReceiver(stream, video_track, ssrc);
+ VideoRtpReceiver* receiver = CreateVideoReceiver(track_id, ssrc);
+ stream->AddTrack(receiver->video_track());
} else {
RTC_DCHECK(false && "Invalid media type");
}
@@ -1702,7 +1692,6 @@ void PeerConnection::OnRemoteTrackRemoved(const std::string& stream_label,
rtc::scoped_refptr<VideoTrackInterface> video_track =
stream->FindVideoTrack(track_id);
if (video_track) {
- video_track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
stream->RemoveTrack(video_track);
DestroyVideoReceiver(stream, video_track);
pthatcher1 2016/03/09 18:16:49 Can you put a comment here saying "Stopping or des
perkj_webrtc 2016/03/09 21:22:59 Done.
}

Powered by Google App Engine
This is Rietveld 408576698