OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |