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

Side by Side Diff: content/renderer/media/media_stream_video_track.cc

Issue 201583003: Implement a source for remote video tracks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/media_stream_video_track.h" 5 #include "content/renderer/media/media_stream_video_track.h"
6 6
7 #include "content/renderer/media/media_stream_dependency_factory.h" 7 #include "content/renderer/media/media_stream_dependency_factory.h"
8 #include "content/renderer/media/webrtc/webrtc_video_sink_adapter.h"
9 8
10 namespace content { 9 namespace content {
11 10
12 // Empty method used for keeping a reference to the original media::VideoFrame 11 // Empty method used for keeping a reference to the original media::VideoFrame
13 // in RTCVideoRenderer::OnVideoFrame if a color conversion between I420 and 12 // in RTCVideoRenderer::OnVideoFrame if a color conversion between I420 and
14 // YV12 is needed. 13 // YV12 is needed.
15 static void ReleaseOriginalFrame( 14 static void ReleaseOriginalFrame(
16 const scoped_refptr<media::VideoFrame>& frame) { 15 const scoped_refptr<media::VideoFrame>& frame) {
17 } 16 }
18 17
(...skipping 23 matching lines...) Expand all
42 MediaStreamVideoTrack::MediaStreamVideoTrack( 41 MediaStreamVideoTrack::MediaStreamVideoTrack(
43 MediaStreamVideoSource* source, 42 MediaStreamVideoSource* source,
44 const blink::WebMediaConstraints& constraints, 43 const blink::WebMediaConstraints& constraints,
45 const MediaStreamVideoSource::ConstraintsCallback& callback, 44 const MediaStreamVideoSource::ConstraintsCallback& callback,
46 bool enabled, 45 bool enabled,
47 MediaStreamDependencyFactory* factory) 46 MediaStreamDependencyFactory* factory)
48 : MediaStreamTrack(NULL, true), 47 : MediaStreamTrack(NULL, true),
49 enabled_(enabled), 48 enabled_(enabled),
50 source_(source), 49 source_(source),
51 factory_(factory) { 50 factory_(factory) {
52 // TODO(perkj): source can be NULL if this is actually a remote video track. 51 source->AddTrack(this, constraints, callback);
53 // Remove as soon as we only have one implementation of video tracks.
54 if (source)
55 source->AddTrack(this, constraints, callback);
56 } 52 }
57 53
58 MediaStreamVideoTrack::~MediaStreamVideoTrack() { 54 MediaStreamVideoTrack::~MediaStreamVideoTrack() {
59 DCHECK(sinks_.empty()); 55 DCHECK(sinks_.empty());
60 // TODO(perkj): source can be NULL if this is actually a remote video track. 56 source_->RemoveTrack(this);
61 // Remove as soon as we only have one implementation of video tracks.
62 if (source_)
63 source_->RemoveTrack(this);
64 } 57 }
65 58
66 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) { 59 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
67 DCHECK(thread_checker_.CalledOnValidThread()); 60 DCHECK(thread_checker_.CalledOnValidThread());
68 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); 61 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end());
69 sinks_.push_back(sink); 62 sinks_.push_back(sink);
70 } 63 }
71 64
72 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { 65 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
73 DCHECK(thread_checker_.CalledOnValidThread()); 66 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 130
138 void MediaStreamVideoTrack::OnReadyStateChanged( 131 void MediaStreamVideoTrack::OnReadyStateChanged(
139 blink::WebMediaStreamSource::ReadyState state) { 132 blink::WebMediaStreamSource::ReadyState state) {
140 DCHECK(thread_checker_.CalledOnValidThread()); 133 DCHECK(thread_checker_.CalledOnValidThread());
141 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin(); 134 for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
142 it != sinks_.end(); ++it) { 135 it != sinks_.end(); ++it) {
143 (*it)->OnReadyStateChanged(state); 136 (*it)->OnReadyStateChanged(state);
144 } 137 }
145 } 138 }
146 139
147 // Wrapper which allows to use std::find_if() when adding and removing
148 // sinks to/from |sinks_|.
149 struct SinkWrapper {
150 explicit SinkWrapper(MediaStreamVideoSink* sink) : sink_(sink) {}
151 bool operator()(
152 const WebRtcVideoSinkAdapter* owner) {
153 return owner->sink() == sink_;
154 }
155 MediaStreamVideoSink* sink_;
156 };
157
158 WebRtcMediaStreamVideoTrack::WebRtcMediaStreamVideoTrack(
159 webrtc::VideoTrackInterface* track)
160 : MediaStreamVideoTrack(NULL,
161 blink::WebMediaConstraints(),
162 MediaStreamVideoSource::ConstraintsCallback(),
163 track->enabled(),
164 NULL) {
165 track_ = track;
166 }
167
168 WebRtcMediaStreamVideoTrack::~WebRtcMediaStreamVideoTrack() {
169 }
170
171 void WebRtcMediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
172 DCHECK(thread_checker_.CalledOnValidThread());
173 DCHECK(std::find_if(sinks_.begin(), sinks_.end(),
174 SinkWrapper(sink)) == sinks_.end());
175 sinks_.push_back(new WebRtcVideoSinkAdapter(GetVideoAdapter(), sink));
176 }
177
178 void WebRtcMediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
179 DCHECK(thread_checker_.CalledOnValidThread());
180 ScopedVector<WebRtcVideoSinkAdapter>::iterator it =
181 std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink));
182 DCHECK(it != sinks_.end());
183 sinks_.erase(it);
184 }
185
186 } // namespace content 140 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698