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

Unified Diff: trunk/src/content/renderer/media/media_stream_video_track.cc

Issue 231963002: Revert 262050 "Implement a source for remote video tracks." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 8 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: trunk/src/content/renderer/media/media_stream_video_track.cc
===================================================================
--- trunk/src/content/renderer/media/media_stream_video_track.cc (revision 262817)
+++ trunk/src/content/renderer/media/media_stream_video_track.cc (working copy)
@@ -5,6 +5,7 @@
#include "content/renderer/media/media_stream_video_track.h"
#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/media/webrtc/webrtc_video_sink_adapter.h"
namespace content {
@@ -41,12 +42,18 @@
enabled_(enabled),
source_(source),
factory_(factory) {
- source->AddTrack(this, constraints, callback);
+ // TODO(perkj): source can be NULL if this is actually a remote video track.
+ // Remove as soon as we only have one implementation of video tracks.
+ if (source)
+ source->AddTrack(this, constraints, callback);
}
MediaStreamVideoTrack::~MediaStreamVideoTrack() {
DCHECK(sinks_.empty());
- source_->RemoveTrack(this);
+ // TODO(perkj): source can be NULL if this is actually a remote video track.
+ // Remove as soon as we only have one implementation of video tracks.
+ if (source_)
+ source_->RemoveTrack(this);
}
void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
@@ -109,4 +116,43 @@
}
}
+// Wrapper which allows to use std::find_if() when adding and removing
+// sinks to/from |sinks_|.
+struct SinkWrapper {
+ explicit SinkWrapper(MediaStreamVideoSink* sink) : sink_(sink) {}
+ bool operator()(
+ const WebRtcVideoSinkAdapter* owner) {
+ return owner->sink() == sink_;
+ }
+ MediaStreamVideoSink* sink_;
+};
+
+WebRtcMediaStreamVideoTrack::WebRtcMediaStreamVideoTrack(
+ webrtc::VideoTrackInterface* track)
+ : MediaStreamVideoTrack(NULL,
+ blink::WebMediaConstraints(),
+ MediaStreamVideoSource::ConstraintsCallback(),
+ track->enabled(),
+ NULL) {
+ track_ = track;
+}
+
+WebRtcMediaStreamVideoTrack::~WebRtcMediaStreamVideoTrack() {
+}
+
+void WebRtcMediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(std::find_if(sinks_.begin(), sinks_.end(),
+ SinkWrapper(sink)) == sinks_.end());
+ sinks_.push_back(new WebRtcVideoSinkAdapter(GetVideoAdapter(), sink));
+}
+
+void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ ScopedVector<WebRtcVideoSinkAdapter>::iterator it =
+ std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink));
+ DCHECK(it != sinks_.end());
+ sinks_.erase(it);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698