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

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

Issue 155853002: Chrome MediaStream VideoTrack implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More cleanup. Created 6 years, 10 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: content/renderer/media/media_stream_video_track.cc
diff --git a/content/renderer/media/media_stream_video_track.cc b/content/renderer/media/media_stream_video_track.cc
index 70383236bac5f23d6ba73890fca640c6aec05185..cef5b14dc87c192736414bcdbbddc99f7f395456 100644
--- a/content/renderer/media/media_stream_video_track.cc
+++ b/content/renderer/media/media_stream_video_track.cc
@@ -10,50 +10,43 @@
namespace content {
-// 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_;
-};
-
-MediaStreamVideoTrack::MediaStreamVideoTrack(
- webrtc::VideoTrackInterface* track)
- : MediaStreamTrack(track, false),
- factory_(NULL) {
+// static
+MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack(
+ const blink::WebMediaStreamTrack& track) {
+ return static_cast<MediaStreamVideoTrack*>(track.extraData());
}
MediaStreamVideoTrack::MediaStreamVideoTrack(
+ MediaStreamVideoSource* source,
MediaStreamDependencyFactory* factory)
: MediaStreamTrack(NULL, true),
+ enabled_(true),
+ source_(source),
factory_(factory) {
- DCHECK(factory_);
}
Alpha Left Google 2014/02/28 02:49:22 I'd actually call source_->AddTrack(this) here. I
perkj_chrome 2014/03/02 09:20:44 Done.
MediaStreamVideoTrack::~MediaStreamVideoTrack() {
DCHECK(sinks_.empty());
+ if (source_)
Alpha Left Google 2014/02/28 02:49:22 There must be a source isn't it?
perkj_chrome 2014/03/02 09:20:44 Well- Admitingly WebRtcMediaStreamVideoTrack is a
+ source_->RemoveTrack(this);
}
void MediaStreamVideoTrack::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));
+ DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end());
+ sinks_.push_back(sink);
}
void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
DCHECK(thread_checker_.CalledOnValidThread());
- ScopedVector<WebRtcVideoSinkAdapter>::iterator it =
- std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink));
+ std::vector<MediaStreamVideoSink*>::iterator it =
+ std::find(sinks_.begin(), sinks_.end(), sink);
DCHECK(it != sinks_.end());
sinks_.erase(it);
}
webrtc::VideoTrackInterface* MediaStreamVideoTrack::GetVideoAdapter() {
Alpha Left Google 2014/02/28 02:49:22 Should this method be moved to WebRtcMediaStreamVi
perkj_chrome 2014/03/02 09:20:44 No, we still need to be able to create a libjingle
Alpha Left Google 2014/03/03 06:45:04 Then I think there should be a TODO here and a poi
perkj_chrome 2014/03/04 10:44:51 ok- added in the header file.
+ DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_EQ(owner().source().type(), blink::WebMediaStreamSource::TypeVideo);
if (!track_.get()) {
MediaStreamVideoSource* source =
@@ -67,4 +60,69 @@ webrtc::VideoTrackInterface* MediaStreamVideoTrack::GetVideoAdapter() {
return static_cast<webrtc::VideoTrackInterface*>(track_.get());
}
+void MediaStreamVideoTrack::SetEnabled(bool enabled) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ enabled_ = enabled;
+ MediaStreamTrack::SetEnabled(enabled);
+ for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
+ it != sinks_.end(); ++it) {
+ (*it)->OnEnabledChanged(enabled);
+ }
+}
+
+void MediaStreamVideoTrack::OnVideoFrame(
+ const scoped_refptr<media::VideoFrame>& frame) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ if (!enabled_)
+ return;
+ for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
+ it != sinks_.end(); ++it) {
+ (*it)->OnVideoFrame(frame);
+ }
+}
+
+void MediaStreamVideoTrack::OnReadyStateChanged(
+ blink::WebMediaStreamSource::ReadyState state) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
+ it != sinks_.end(); ++it) {
+ (*it)->OnReadyStateChanged(state);
+ }
+}
+
+// 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(
Alpha Left Google 2014/02/28 02:49:22 This should be moved to a different file.
perkj_chrome 2014/03/02 09:20:44 This should all be replaced with a remote MediaStr
Alpha Left Google 2014/03/03 06:45:04 Okay. Just want to call this out. A TODO would be
perkj_chrome 2014/03/04 10:44:51 Its in the header file.
+ webrtc::VideoTrackInterface* track)
+ : MediaStreamVideoTrack(NULL, 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