OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_source.h" | 5 #include "content/renderer/media/media_stream_video_source.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 return std::find(kSupportedConstraints, | 310 return std::find(kSupportedConstraints, |
311 kSupportedConstraints + arraysize(kSupportedConstraints), | 311 kSupportedConstraints + arraysize(kSupportedConstraints), |
312 name) != | 312 name) != |
313 kSupportedConstraints + arraysize(kSupportedConstraints); | 313 kSupportedConstraints + arraysize(kSupportedConstraints); |
314 } | 314 } |
315 | 315 |
316 MediaStreamVideoSource::MediaStreamVideoSource() | 316 MediaStreamVideoSource::MediaStreamVideoSource() |
317 : state_(NEW), | 317 : state_(NEW), |
318 track_adapter_( | 318 track_adapter_( |
319 new VideoTrackAdapter(ChildProcess::current()->io_task_runner())), | 319 new VideoTrackAdapter(ChildProcess::current()->io_task_runner())), |
320 weak_factory_(this) { | 320 secure_tracker_(new CapturingLinkSecureTracker<MediaStreamVideoTrack>()), |
321 } | 321 weak_factory_(this) {} |
322 | 322 |
323 MediaStreamVideoSource::~MediaStreamVideoSource() { | 323 MediaStreamVideoSource::~MediaStreamVideoSource() { |
324 DCHECK(CalledOnValidThread()); | 324 DCHECK(CalledOnValidThread()); |
325 } | 325 } |
326 | 326 |
327 void MediaStreamVideoSource::AddTrack( | 327 void MediaStreamVideoSource::AddTrack( |
328 MediaStreamVideoTrack* track, | 328 MediaStreamVideoTrack* track, |
329 const VideoCaptureDeliverFrameCB& frame_callback, | 329 const VideoCaptureDeliverFrameCB& frame_callback, |
330 const blink::WebMediaConstraints& constraints, | 330 const blink::WebMediaConstraints& constraints, |
331 const ConstraintsCallback& callback) { | 331 const ConstraintsCallback& callback) { |
332 DCHECK(CalledOnValidThread()); | 332 DCHECK(CalledOnValidThread()); |
333 DCHECK(!constraints.isNull()); | 333 DCHECK(!constraints.isNull()); |
334 DCHECK(std::find(tracks_.begin(), tracks_.end(), track) == tracks_.end()); | 334 DCHECK(std::find(tracks_.begin(), tracks_.end(), track) == tracks_.end()); |
335 tracks_.push_back(track); | 335 tracks_.push_back(track); |
| 336 secure_tracker_->AddLinkSecure(track, true); |
336 | 337 |
337 track_descriptors_.push_back( | 338 track_descriptors_.push_back( |
338 TrackDescriptor(track, frame_callback, constraints, callback)); | 339 TrackDescriptor(track, frame_callback, constraints, callback)); |
339 | 340 |
340 switch (state_) { | 341 switch (state_) { |
341 case NEW: { | 342 case NEW: { |
342 // Tab capture and Screen capture needs the maximum requested height | 343 // Tab capture and Screen capture needs the maximum requested height |
343 // and width to decide on the resolution. | 344 // and width to decide on the resolution. |
344 int max_requested_width = 0; | 345 int max_requested_width = 0; |
345 if (constraints.basic().width.hasMax()) | 346 if (constraints.basic().width.hasMax()) |
(...skipping 30 matching lines...) Expand all Loading... |
376 } | 377 } |
377 } | 378 } |
378 } | 379 } |
379 | 380 |
380 void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) { | 381 void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) { |
381 DCHECK(CalledOnValidThread()); | 382 DCHECK(CalledOnValidThread()); |
382 std::vector<MediaStreamVideoTrack*>::iterator it = | 383 std::vector<MediaStreamVideoTrack*>::iterator it = |
383 std::find(tracks_.begin(), tracks_.end(), video_track); | 384 std::find(tracks_.begin(), tracks_.end(), video_track); |
384 DCHECK(it != tracks_.end()); | 385 DCHECK(it != tracks_.end()); |
385 tracks_.erase(it); | 386 tracks_.erase(it); |
| 387 secure_tracker_->RemoveLinkSecure(video_track); |
386 | 388 |
387 for (std::vector<TrackDescriptor>::iterator it = track_descriptors_.begin(); | 389 for (std::vector<TrackDescriptor>::iterator it = track_descriptors_.begin(); |
388 it != track_descriptors_.end(); ++it) { | 390 it != track_descriptors_.end(); ++it) { |
389 if (it->track == video_track) { | 391 if (it->track == video_track) { |
390 track_descriptors_.erase(it); | 392 track_descriptors_.erase(it); |
391 break; | 393 break; |
392 } | 394 } |
393 } | 395 } |
394 | 396 |
395 // Call |frame_adapter_->RemoveTrack| here even if adding the track has | 397 // Call |frame_adapter_->RemoveTrack| here even if adding the track has |
396 // failed and |frame_adapter_->AddCallback| has not been called. | 398 // failed and |frame_adapter_->AddCallback| has not been called. |
397 track_adapter_->RemoveTrack(video_track); | 399 track_adapter_->RemoveTrack(video_track); |
398 | 400 |
399 if (tracks_.empty()) | 401 if (tracks_.empty()) |
400 StopSource(); | 402 StopSource(); |
401 } | 403 } |
402 | 404 |
| 405 void MediaStreamVideoSource::UpdateCapturingLinkSecure( |
| 406 MediaStreamVideoTrack* track, |
| 407 bool is_secure) { |
| 408 secure_tracker_->UpdateLinkSecure(track, is_secure); |
| 409 SetCapturingLinkSecured(secure_tracker_->is_capturing_secure()); |
| 410 } |
| 411 |
403 base::SingleThreadTaskRunner* MediaStreamVideoSource::io_task_runner() const { | 412 base::SingleThreadTaskRunner* MediaStreamVideoSource::io_task_runner() const { |
404 DCHECK(CalledOnValidThread()); | 413 DCHECK(CalledOnValidThread()); |
405 return track_adapter_->io_task_runner(); | 414 return track_adapter_->io_task_runner(); |
406 } | 415 } |
407 | 416 |
408 const media::VideoCaptureFormat* | 417 const media::VideoCaptureFormat* |
409 MediaStreamVideoSource::GetCurrentFormat() const { | 418 MediaStreamVideoSource::GetCurrentFormat() const { |
410 DCHECK(CalledOnValidThread()); | 419 DCHECK(CalledOnValidThread()); |
411 if (state_ == STARTING || state_ == STARTED) | 420 if (state_ == STARTING || state_ == STARTED) |
412 return ¤t_format_; | 421 return ¤t_format_; |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 callback(callback) { | 597 callback(callback) { |
589 } | 598 } |
590 | 599 |
591 MediaStreamVideoSource::TrackDescriptor::TrackDescriptor( | 600 MediaStreamVideoSource::TrackDescriptor::TrackDescriptor( |
592 const TrackDescriptor& other) = default; | 601 const TrackDescriptor& other) = default; |
593 | 602 |
594 MediaStreamVideoSource::TrackDescriptor::~TrackDescriptor() { | 603 MediaStreamVideoSource::TrackDescriptor::~TrackDescriptor() { |
595 } | 604 } |
596 | 605 |
597 } // namespace content | 606 } // namespace content |
OLD | NEW |