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 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 MediaStreamVideoTrack::MediaStreamVideoTrack( | 222 MediaStreamVideoTrack::MediaStreamVideoTrack( |
223 MediaStreamVideoSource* source, | 223 MediaStreamVideoSource* source, |
224 const blink::WebMediaConstraints& constraints, | 224 const blink::WebMediaConstraints& constraints, |
225 const MediaStreamVideoSource::ConstraintsCallback& callback, | 225 const MediaStreamVideoSource::ConstraintsCallback& callback, |
226 bool enabled) | 226 bool enabled) |
227 : MediaStreamTrack(true), | 227 : MediaStreamTrack(true), |
228 frame_deliverer_( | 228 frame_deliverer_( |
229 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), | 229 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), |
230 enabled)), | 230 enabled)), |
231 constraints_(constraints), | 231 constraints_(constraints), |
232 source_(source) { | 232 source_(source), |
| 233 secure_tracker_(new CapturingLinkSecureTracker<MediaStreamVideoSink>()) { |
233 DCHECK(!constraints.isNull()); | 234 DCHECK(!constraints.isNull()); |
234 source->AddTrack(this, | 235 source->AddTrack(this, |
235 base::Bind( | 236 base::Bind( |
236 &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, | 237 &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, |
237 frame_deliverer_), | 238 frame_deliverer_), |
238 constraints, callback); | 239 constraints, callback); |
239 } | 240 } |
240 | 241 |
241 MediaStreamVideoTrack::~MediaStreamVideoTrack() { | 242 MediaStreamVideoTrack::~MediaStreamVideoTrack() { |
242 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 243 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
243 DCHECK(sinks_.empty()); | 244 DCHECK(sinks_.empty()); |
244 Stop(); | 245 Stop(); |
245 DVLOG(3) << "~MediaStreamVideoTrack()"; | 246 DVLOG(3) << "~MediaStreamVideoTrack()"; |
246 } | 247 } |
247 | 248 |
248 void MediaStreamVideoTrack::AddSink( | 249 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink, |
249 MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) { | 250 const VideoCaptureDeliverFrameCB& callback, |
| 251 bool is_sink_secure) { |
250 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 252 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
251 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); | 253 DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()); |
252 sinks_.push_back(sink); | 254 sinks_.push_back(sink); |
253 frame_deliverer_->AddCallback(sink, callback); | 255 frame_deliverer_->AddCallback(sink, callback); |
| 256 secure_tracker_->AddLinkSecure(sink, is_sink_secure); |
254 // Request source to deliver a frame because a new sink is added. | 257 // Request source to deliver a frame because a new sink is added. |
255 if (source_) | 258 if (source_) { |
256 source_->RequestRefreshFrame(); | 259 source_->RequestRefreshFrame(); |
| 260 source_->UpdateCapturingLinkSecure(this, |
| 261 secure_tracker_->is_capturing_secure()); |
| 262 } |
257 } | 263 } |
258 | 264 |
259 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { | 265 void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { |
260 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 266 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
261 std::vector<MediaStreamVideoSink*>::iterator it = | 267 std::vector<MediaStreamVideoSink*>::iterator it = |
262 std::find(sinks_.begin(), sinks_.end(), sink); | 268 std::find(sinks_.begin(), sinks_.end(), sink); |
263 DCHECK(it != sinks_.end()); | 269 DCHECK(it != sinks_.end()); |
264 sinks_.erase(it); | 270 sinks_.erase(it); |
265 frame_deliverer_->RemoveCallback(sink); | 271 frame_deliverer_->RemoveCallback(sink); |
| 272 secure_tracker_->RemoveLinkSecure(sink); |
| 273 if (source_) |
| 274 source_->UpdateCapturingLinkSecure(this, |
| 275 secure_tracker_->is_capturing_secure()); |
266 } | 276 } |
267 | 277 |
268 void MediaStreamVideoTrack::SetEnabled(bool enabled) { | 278 void MediaStreamVideoTrack::SetEnabled(bool enabled) { |
269 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 279 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
270 frame_deliverer_->SetEnabled(enabled); | 280 frame_deliverer_->SetEnabled(enabled); |
271 for (auto* sink : sinks_) | 281 for (auto* sink : sinks_) |
272 sink->OnEnabledChanged(enabled); | 282 sink->OnEnabledChanged(enabled); |
273 } | 283 } |
274 | 284 |
275 void MediaStreamVideoTrack::Stop() { | 285 void MediaStreamVideoTrack::Stop() { |
276 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 286 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
277 if (source_) { | 287 if (source_) { |
278 source_->RemoveTrack(this); | 288 source_->RemoveTrack(this); |
279 source_ = NULL; | 289 source_ = NULL; |
280 } | 290 } |
281 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); | 291 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); |
282 } | 292 } |
283 | 293 |
284 void MediaStreamVideoTrack::OnReadyStateChanged( | 294 void MediaStreamVideoTrack::OnReadyStateChanged( |
285 blink::WebMediaStreamSource::ReadyState state) { | 295 blink::WebMediaStreamSource::ReadyState state) { |
286 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 296 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
287 for (auto* sink : sinks_) | 297 for (auto* sink : sinks_) |
288 sink->OnReadyStateChanged(state); | 298 sink->OnReadyStateChanged(state); |
289 } | 299 } |
290 | 300 |
291 } // namespace content | 301 } // namespace content |
OLD | NEW |