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 weak_factory_(this) {} |
321 } | |
322 | 321 |
323 MediaStreamVideoSource::~MediaStreamVideoSource() { | 322 MediaStreamVideoSource::~MediaStreamVideoSource() { |
324 DCHECK(CalledOnValidThread()); | 323 DCHECK(CalledOnValidThread()); |
325 } | 324 } |
326 | 325 |
327 void MediaStreamVideoSource::AddTrack( | 326 void MediaStreamVideoSource::AddTrack( |
328 MediaStreamVideoTrack* track, | 327 MediaStreamVideoTrack* track, |
329 const VideoCaptureDeliverFrameCB& frame_callback, | 328 const VideoCaptureDeliverFrameCB& frame_callback, |
330 const blink::WebMediaConstraints& constraints, | 329 const blink::WebMediaConstraints& constraints, |
331 const ConstraintsCallback& callback) { | 330 const ConstraintsCallback& callback) { |
332 DCHECK(CalledOnValidThread()); | 331 DCHECK(CalledOnValidThread()); |
333 DCHECK(!constraints.isNull()); | 332 DCHECK(!constraints.isNull()); |
334 DCHECK(std::find(tracks_.begin(), tracks_.end(), track) == tracks_.end()); | 333 DCHECK(std::find(tracks_.begin(), tracks_.end(), track) == tracks_.end()); |
335 tracks_.push_back(track); | 334 tracks_.push_back(track); |
| 335 secure_tracker_.Add(track, true); |
336 | 336 |
337 track_descriptors_.push_back( | 337 track_descriptors_.push_back( |
338 TrackDescriptor(track, frame_callback, constraints, callback)); | 338 TrackDescriptor(track, frame_callback, constraints, callback)); |
339 | 339 |
340 switch (state_) { | 340 switch (state_) { |
341 case NEW: { | 341 case NEW: { |
342 // Tab capture and Screen capture needs the maximum requested height | 342 // Tab capture and Screen capture needs the maximum requested height |
343 // and width to decide on the resolution. | 343 // and width to decide on the resolution. |
344 // NOTE: Optional constraints are deliberately ignored. | 344 // NOTE: Optional constraints are deliberately ignored. |
345 int max_requested_width = 0; | 345 int max_requested_width = 0; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 } | 377 } |
378 } | 378 } |
379 } | 379 } |
380 | 380 |
381 void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) { | 381 void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) { |
382 DCHECK(CalledOnValidThread()); | 382 DCHECK(CalledOnValidThread()); |
383 std::vector<MediaStreamVideoTrack*>::iterator it = | 383 std::vector<MediaStreamVideoTrack*>::iterator it = |
384 std::find(tracks_.begin(), tracks_.end(), video_track); | 384 std::find(tracks_.begin(), tracks_.end(), video_track); |
385 DCHECK(it != tracks_.end()); | 385 DCHECK(it != tracks_.end()); |
386 tracks_.erase(it); | 386 tracks_.erase(it); |
| 387 secure_tracker_.Remove(video_track); |
387 | 388 |
388 for (std::vector<TrackDescriptor>::iterator it = track_descriptors_.begin(); | 389 for (std::vector<TrackDescriptor>::iterator it = track_descriptors_.begin(); |
389 it != track_descriptors_.end(); ++it) { | 390 it != track_descriptors_.end(); ++it) { |
390 if (it->track == video_track) { | 391 if (it->track == video_track) { |
391 track_descriptors_.erase(it); | 392 track_descriptors_.erase(it); |
392 break; | 393 break; |
393 } | 394 } |
394 } | 395 } |
395 | 396 |
396 // Call |frame_adapter_->RemoveTrack| here even if adding the track has | 397 // Call |frame_adapter_->RemoveTrack| here even if adding the track has |
397 // failed and |frame_adapter_->AddCallback| has not been called. | 398 // failed and |frame_adapter_->AddCallback| has not been called. |
398 track_adapter_->RemoveTrack(video_track); | 399 track_adapter_->RemoveTrack(video_track); |
399 | 400 |
400 if (tracks_.empty()) | 401 if (tracks_.empty()) |
401 StopSource(); | 402 StopSource(); |
402 } | 403 } |
403 | 404 |
| 405 void MediaStreamVideoSource::UpdateCapturingLinkSecure( |
| 406 MediaStreamVideoTrack* track, |
| 407 bool is_secure) { |
| 408 secure_tracker_.Update(track, is_secure); |
| 409 SetCapturingLinkSecured(secure_tracker_.is_capturing_secure()); |
| 410 } |
| 411 |
404 base::SingleThreadTaskRunner* MediaStreamVideoSource::io_task_runner() const { | 412 base::SingleThreadTaskRunner* MediaStreamVideoSource::io_task_runner() const { |
405 DCHECK(CalledOnValidThread()); | 413 DCHECK(CalledOnValidThread()); |
406 return track_adapter_->io_task_runner(); | 414 return track_adapter_->io_task_runner(); |
407 } | 415 } |
408 | 416 |
409 const media::VideoCaptureFormat* | 417 const media::VideoCaptureFormat* |
410 MediaStreamVideoSource::GetCurrentFormat() const { | 418 MediaStreamVideoSource::GetCurrentFormat() const { |
411 DCHECK(CalledOnValidThread()); | 419 DCHECK(CalledOnValidThread()); |
412 if (state_ == STARTING || state_ == STARTED) | 420 if (state_ == STARTING || state_ == STARTED) |
413 return ¤t_format_; | 421 return ¤t_format_; |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 callback(callback) { | 599 callback(callback) { |
592 } | 600 } |
593 | 601 |
594 MediaStreamVideoSource::TrackDescriptor::TrackDescriptor( | 602 MediaStreamVideoSource::TrackDescriptor::TrackDescriptor( |
595 const TrackDescriptor& other) = default; | 603 const TrackDescriptor& other) = default; |
596 | 604 |
597 MediaStreamVideoSource::TrackDescriptor::~TrackDescriptor() { | 605 MediaStreamVideoSource::TrackDescriptor::~TrackDescriptor() { |
598 } | 606 } |
599 | 607 |
600 } // namespace content | 608 } // namespace content |
OLD | NEW |