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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
205 track.setExtraData(new MediaStreamVideoTrack(source, | 205 track.setExtraData(new MediaStreamVideoTrack(source, |
206 constraints, | 206 constraints, |
207 callback, | 207 callback, |
208 enabled)); | 208 enabled)); |
209 return track; | 209 return track; |
210 } | 210 } |
211 | 211 |
212 // static | 212 // static |
213 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack( | 213 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack( |
214 const blink::WebMediaStreamTrack& track) { | 214 const blink::WebMediaStreamTrack& track) { |
215 if (track.isNull() || | |
216 track.source().getType() != blink::WebMediaStreamSource::TypeVideo) { | |
217 return nullptr; | |
218 } | |
215 return static_cast<MediaStreamVideoTrack*>(track.getExtraData()); | 219 return static_cast<MediaStreamVideoTrack*>(track.getExtraData()); |
216 } | 220 } |
217 | 221 |
218 MediaStreamVideoTrack::MediaStreamVideoTrack( | 222 MediaStreamVideoTrack::MediaStreamVideoTrack( |
219 MediaStreamVideoSource* source, | 223 MediaStreamVideoSource* source, |
220 const blink::WebMediaConstraints& constraints, | 224 const blink::WebMediaConstraints& constraints, |
221 const MediaStreamVideoSource::ConstraintsCallback& callback, | 225 const MediaStreamVideoSource::ConstraintsCallback& callback, |
222 bool enabled) | 226 bool enabled) |
223 : MediaStreamTrack(true), | 227 : MediaStreamTrack(true), |
224 frame_deliverer_( | 228 frame_deliverer_( |
(...skipping 16 matching lines...) Expand all Loading... | |
241 DVLOG(3) << "~MediaStreamVideoTrack()"; | 245 DVLOG(3) << "~MediaStreamVideoTrack()"; |
242 } | 246 } |
243 | 247 |
244 void MediaStreamVideoTrack::AddSink( | 248 void MediaStreamVideoTrack::AddSink( |
245 MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) { | 249 MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) { |
246 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 250 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
247 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); | 251 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); |
248 sinks_.push_back(sink); | 252 sinks_.push_back(sink); |
249 frame_deliverer_->AddCallback(sink, callback); | 253 frame_deliverer_->AddCallback(sink, callback); |
250 // Request source to deliver a frame because a new sink is added. | 254 // Request source to deliver a frame because a new sink is added. |
251 if (source_) | 255 if (source_) |
xjz
2016/04/01 19:10:04
nit: maybe just call RequestRefreshFrame() now?
miu
2016/04/01 23:24:27
Done.
| |
252 source_->RequestRefreshFrame(); | 256 source_->RequestRefreshFrame(); |
253 } | 257 } |
254 | 258 |
255 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { | 259 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { |
256 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 260 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
257 std::vector<MediaStreamVideoSink*>::iterator it = | 261 std::vector<MediaStreamVideoSink*>::iterator it = |
258 std::find(sinks_.begin(), sinks_.end(), sink); | 262 std::find(sinks_.begin(), sinks_.end(), sink); |
259 DCHECK(it != sinks_.end()); | 263 DCHECK(it != sinks_.end()); |
260 sinks_.erase(it); | 264 sinks_.erase(it); |
261 frame_deliverer_->RemoveCallback(sink); | 265 frame_deliverer_->RemoveCallback(sink); |
262 } | 266 } |
263 | 267 |
264 void MediaStreamVideoTrack::SetEnabled(bool enabled) { | 268 void MediaStreamVideoTrack::SetEnabled(bool enabled) { |
265 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 269 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
266 frame_deliverer_->SetEnabled(enabled); | 270 frame_deliverer_->SetEnabled(enabled); |
267 for (auto* sink : sinks_) | 271 for (auto* sink : sinks_) |
268 sink->OnEnabledChanged(enabled); | 272 sink->OnEnabledChanged(enabled); |
269 } | 273 } |
270 | 274 |
275 void MediaStreamVideoTrack::RequestRefreshFrame() { | |
276 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | |
277 if (source_) | |
278 source_->RequestRefreshFrame(); | |
279 } | |
280 | |
271 void MediaStreamVideoTrack::Stop() { | 281 void MediaStreamVideoTrack::Stop() { |
272 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 282 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
273 if (source_) { | 283 if (source_) { |
274 source_->RemoveTrack(this); | 284 source_->RemoveTrack(this); |
275 source_ = NULL; | 285 source_ = NULL; |
276 } | 286 } |
277 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); | 287 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); |
278 } | 288 } |
279 | 289 |
280 void MediaStreamVideoTrack::OnReadyStateChanged( | 290 void MediaStreamVideoTrack::OnReadyStateChanged( |
281 blink::WebMediaStreamSource::ReadyState state) { | 291 blink::WebMediaStreamSource::ReadyState state) { |
282 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 292 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
283 for (auto* sink : sinks_) | 293 for (auto* sink : sinks_) |
284 sink->OnReadyStateChanged(state); | 294 sink->OnReadyStateChanged(state); |
285 } | 295 } |
286 | 296 |
287 } // namespace content | 297 } // namespace content |
OLD | NEW |