| 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 |
| 11 #include "base/debug/trace_event.h" | 11 #include "base/debug/trace_event.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 14 #include "content/child/child_process.h" | 14 #include "content/child/child_process.h" |
| 15 #include "content/renderer/media/media_stream_constraints_util.h" | 15 #include "content/renderer/media/media_stream_constraints_util.h" |
| 16 #include "content/renderer/media/media_stream_video_track.h" | 16 #include "content/renderer/media/media_stream_video_track.h" |
| 17 #include "content/renderer/media/video_track_adapter.h" | 17 #include "content/renderer/media/video_track_adapter.h" |
| 18 #include "media/base/bind_to_current_loop.h" |
| 18 | 19 |
| 19 namespace content { | 20 namespace content { |
| 20 | 21 |
| 21 // Constraint keys. Specified by draft-alvestrand-constraints-resolution-00b | 22 // Constraint keys. Specified by draft-alvestrand-constraints-resolution-00b |
| 22 const char MediaStreamVideoSource::kMinAspectRatio[] = "minAspectRatio"; | 23 const char MediaStreamVideoSource::kMinAspectRatio[] = "minAspectRatio"; |
| 23 const char MediaStreamVideoSource::kMaxAspectRatio[] = "maxAspectRatio"; | 24 const char MediaStreamVideoSource::kMaxAspectRatio[] = "maxAspectRatio"; |
| 24 const char MediaStreamVideoSource::kMaxWidth[] = "maxWidth"; | 25 const char MediaStreamVideoSource::kMaxWidth[] = "maxWidth"; |
| 25 const char MediaStreamVideoSource::kMinWidth[] = "minWidth"; | 26 const char MediaStreamVideoSource::kMinWidth[] = "minWidth"; |
| 26 const char MediaStreamVideoSource::kMaxHeight[] = "maxHeight"; | 27 const char MediaStreamVideoSource::kMaxHeight[] = "maxHeight"; |
| 27 const char MediaStreamVideoSource::kMinHeight[] = "minHeight"; | 28 const char MediaStreamVideoSource::kMinHeight[] = "minHeight"; |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 bool MediaStreamVideoSource::IsConstraintSupported(const std::string& name) { | 344 bool MediaStreamVideoSource::IsConstraintSupported(const std::string& name) { |
| 344 for (size_t i = 0; i < arraysize(kSupportedConstraints); ++i) { | 345 for (size_t i = 0; i < arraysize(kSupportedConstraints); ++i) { |
| 345 if (kSupportedConstraints[i] == name) | 346 if (kSupportedConstraints[i] == name) |
| 346 return true; | 347 return true; |
| 347 } | 348 } |
| 348 return false; | 349 return false; |
| 349 } | 350 } |
| 350 | 351 |
| 351 MediaStreamVideoSource::MediaStreamVideoSource() | 352 MediaStreamVideoSource::MediaStreamVideoSource() |
| 352 : state_(NEW), | 353 : state_(NEW), |
| 354 muted_state_(false), |
| 353 track_adapter_(new VideoTrackAdapter( | 355 track_adapter_(new VideoTrackAdapter( |
| 354 ChildProcess::current()->io_message_loop_proxy())), | 356 ChildProcess::current()->io_message_loop_proxy())), |
| 355 weak_factory_(this) { | 357 weak_factory_(this) { |
| 356 } | 358 } |
| 357 | 359 |
| 358 MediaStreamVideoSource::~MediaStreamVideoSource() { | 360 MediaStreamVideoSource::~MediaStreamVideoSource() { |
| 359 } | 361 } |
| 360 | 362 |
| 361 void MediaStreamVideoSource::AddTrack( | 363 void MediaStreamVideoSource::AddTrack( |
| 362 MediaStreamVideoTrack* track, | 364 MediaStreamVideoTrack* track, |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 int max_height; | 547 int max_height; |
| 546 GetDesiredMaxWidthAndHeight(it->constraints, &max_width, &max_height); | 548 GetDesiredMaxWidthAndHeight(it->constraints, &max_width, &max_height); |
| 547 double max_aspect_ratio; | 549 double max_aspect_ratio; |
| 548 double min_aspect_ratio; | 550 double min_aspect_ratio; |
| 549 GetDesiredMinAndMaxAspectRatio(it->constraints, | 551 GetDesiredMinAndMaxAspectRatio(it->constraints, |
| 550 &min_aspect_ratio, | 552 &min_aspect_ratio, |
| 551 &max_aspect_ratio); | 553 &max_aspect_ratio); |
| 552 double max_frame_rate = 0.0f; | 554 double max_frame_rate = 0.0f; |
| 553 GetConstraintValueAsDouble(it->constraints, | 555 GetConstraintValueAsDouble(it->constraints, |
| 554 kMaxFrameRate, &max_frame_rate); | 556 kMaxFrameRate, &max_frame_rate); |
| 557 |
| 558 VideoTrackAdapter::OnMutedCallback on_mute_callback = |
| 559 media::BindToCurrentLoop(base::Bind( |
| 560 &MediaStreamVideoSource::SetMutedState, |
| 561 weak_factory_.GetWeakPtr())); |
| 555 track_adapter_->AddTrack(it->track, it->frame_callback, | 562 track_adapter_->AddTrack(it->track, it->frame_callback, |
| 556 max_width, max_height, | 563 max_width, max_height, |
| 557 min_aspect_ratio, max_aspect_ratio, | 564 min_aspect_ratio, max_aspect_ratio, |
| 558 max_frame_rate); | 565 max_frame_rate, current_format_.frame_rate, |
| 566 on_mute_callback); |
| 559 } | 567 } |
| 560 | 568 |
| 561 DVLOG(3) << "FinalizeAddTrack() success " << success; | 569 DVLOG(3) << "FinalizeAddTrack() success " << success; |
| 562 | 570 |
| 563 if (!it->callback.is_null()) | 571 if (!it->callback.is_null()) |
| 564 it->callback.Run(this, success); | 572 it->callback.Run(this, success); |
| 565 } | 573 } |
| 566 } | 574 } |
| 567 | 575 |
| 568 void MediaStreamVideoSource::SetReadyState( | 576 void MediaStreamVideoSource::SetReadyState( |
| 569 blink::WebMediaStreamSource::ReadyState state) { | 577 blink::WebMediaStreamSource::ReadyState state) { |
| 570 DVLOG(3) << "MediaStreamVideoSource::SetReadyState state " << state; | 578 DVLOG(3) << "MediaStreamVideoSource::SetReadyState state " << state; |
| 571 if (!owner().isNull()) { | 579 if (!owner().isNull()) { |
| 572 owner().setReadyState(state); | 580 owner().setReadyState(state); |
| 573 } | 581 } |
| 574 for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin(); | 582 for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin(); |
| 575 it != tracks_.end(); ++it) { | 583 it != tracks_.end(); ++it) { |
| 576 (*it)->OnReadyStateChanged(state); | 584 (*it)->OnReadyStateChanged(state); |
| 577 } | 585 } |
| 578 } | 586 } |
| 579 | 587 |
| 588 void MediaStreamVideoSource::SetMutedState(bool muted_state) { |
| 589 DCHECK(CalledOnValidThread()); |
| 590 DVLOG(3) << "MediaStreamVideoSource::SetMutedState state=" << muted_state; |
| 591 // WebMediaStreamSource doesn't have a muted state, the tracks do. |
| 592 for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin(); |
| 593 it != tracks_.end(); ++it) { |
| 594 (*it)->SetMutedState(muted_state); |
| 595 } |
| 596 } |
| 597 |
| 580 MediaStreamVideoSource::RequestedConstraints::RequestedConstraints( | 598 MediaStreamVideoSource::RequestedConstraints::RequestedConstraints( |
| 581 MediaStreamVideoTrack* track, | 599 MediaStreamVideoTrack* track, |
| 582 const VideoCaptureDeliverFrameCB& frame_callback, | 600 const VideoCaptureDeliverFrameCB& frame_callback, |
| 583 const blink::WebMediaConstraints& constraints, | 601 const blink::WebMediaConstraints& constraints, |
| 584 const ConstraintsCallback& callback) | 602 const ConstraintsCallback& callback) |
| 585 : track(track), | 603 : track(track), |
| 586 frame_callback(frame_callback), | 604 frame_callback(frame_callback), |
| 587 constraints(constraints), | 605 constraints(constraints), |
| 588 callback(callback) { | 606 callback(callback) { |
| 589 } | 607 } |
| 590 | 608 |
| 591 MediaStreamVideoSource::RequestedConstraints::~RequestedConstraints() { | 609 MediaStreamVideoSource::RequestedConstraints::~RequestedConstraints() { |
| 592 } | 610 } |
| 593 | 611 |
| 594 } // namespace content | 612 } // namespace content |
| OLD | NEW |