| Index: content/renderer/media/user_media_client_impl.cc
|
| diff --git a/content/renderer/media/user_media_client_impl.cc b/content/renderer/media/user_media_client_impl.cc
|
| index 771ed274a147638e3a8f74e7ed8914c47c76a900..fe0917a5a0b65d645541812d0cbe1bb932147385 100644
|
| --- a/content/renderer/media/user_media_client_impl.cc
|
| +++ b/content/renderer/media/user_media_client_impl.cc
|
| @@ -247,8 +247,7 @@ class UserMediaClientImpl::UserMediaRequestInfo
|
| bool is_pending);
|
|
|
| blink::WebMediaStreamTrack CreateAndStartVideoTrack(
|
| - const blink::WebMediaStreamSource& source,
|
| - const blink::WebMediaConstraints& constraints);
|
| + const blink::WebMediaStreamSource& source);
|
|
|
| // Triggers |callback| when all sources used in this request have either
|
| // successfully started, or a source has failed to start.
|
| @@ -272,6 +271,15 @@ class UserMediaClientImpl::UserMediaRequestInfo
|
| void set_enable_automatic_output_device_selection(bool value) {
|
| enable_automatic_output_device_selection_ = value;
|
| }
|
| + const VideoCaptureSettings& video_capture_settings() const {
|
| + return video_capture_settings_;
|
| + }
|
| + void SetVideoCaptureSettings(const VideoCaptureSettings& settings,
|
| + bool is_content_capture) {
|
| + DCHECK(settings.HasValue());
|
| + is_video_content_capture_ = is_content_capture;
|
| + video_capture_settings_ = settings;
|
| + }
|
|
|
| blink::WebMediaStream* web_stream() { return &web_stream_; }
|
|
|
| @@ -298,6 +306,8 @@ class UserMediaClientImpl::UserMediaRequestInfo
|
| const int request_id_;
|
| State state_;
|
| bool enable_automatic_output_device_selection_;
|
| + VideoCaptureSettings video_capture_settings_;
|
| + bool is_video_content_capture_;
|
| blink::WebMediaStream web_stream_;
|
| const blink::WebUserMediaRequest request_;
|
| StreamControls stream_controls_;
|
| @@ -513,6 +523,8 @@ void UserMediaClientImpl::FinalizeSelectVideoDeviceSettings(
|
| }
|
| current_request_info_->stream_controls()->video.device_id =
|
| settings.device_id();
|
| + current_request_info_->SetVideoCaptureSettings(
|
| + settings, false /* is_content_capture */);
|
| GenerateStreamForCurrentRequestInfo();
|
| }
|
|
|
| @@ -536,6 +548,8 @@ void UserMediaClientImpl::FinalizeSelectVideoContentSettings(
|
| }
|
| current_request_info_->stream_controls()->video.device_id =
|
| settings.device_id();
|
| + current_request_info_->SetVideoCaptureSettings(settings,
|
| + true /* is_content_capture */);
|
| GenerateStreamForCurrentRequestInfo();
|
| }
|
|
|
| @@ -651,9 +665,7 @@ void UserMediaClientImpl::OnStreamGenerated(
|
|
|
| blink::WebVector<blink::WebMediaStreamTrack> video_track_vector(
|
| video_array.size());
|
| - CreateVideoTracks(video_array,
|
| - current_request_info_->request().videoConstraints(),
|
| - &video_track_vector);
|
| + CreateVideoTracks(video_array, &video_track_vector);
|
|
|
| blink::WebString blink_id = blink::WebString::fromUTF8(label);
|
| current_request_info_->web_stream()->initialize(blink_id, audio_track_vector,
|
| @@ -790,9 +802,9 @@ void UserMediaClientImpl::OnDeviceStopped(
|
| }
|
|
|
| blink::WebMediaStreamSource UserMediaClientImpl::InitializeVideoSourceObject(
|
| - const StreamDeviceInfo& device,
|
| - const blink::WebMediaConstraints& constraints) {
|
| + const StreamDeviceInfo& device) {
|
| DCHECK(CalledOnValidThread());
|
| + DCHECK(current_request_info_);
|
|
|
| blink::WebMediaStreamSource source = FindOrInitializeSourceObject(device);
|
| if (!source.getExtraData()) {
|
| @@ -868,15 +880,21 @@ MediaStreamVideoSource* UserMediaClientImpl::CreateVideoSource(
|
| const StreamDeviceInfo& device,
|
| const MediaStreamSource::SourceStoppedCallback& stop_callback) {
|
| DCHECK(CalledOnValidThread());
|
| - content::MediaStreamVideoCapturerSource* ret =
|
| - new content::MediaStreamVideoCapturerSource(stop_callback, device,
|
| - render_frame());
|
| - return ret;
|
| + DCHECK(current_request_info_);
|
| + if (IsOldVideoConstraints()) {
|
| + return new MediaStreamVideoCapturerSource(stop_callback, device,
|
| + render_frame());
|
| + }
|
| +
|
| + DCHECK(current_request_info_->video_capture_settings().HasValue());
|
| + return new MediaStreamVideoCapturerSource(
|
| + stop_callback, device,
|
| + current_request_info_->video_capture_settings().capture_params(),
|
| + render_frame());
|
| }
|
|
|
| void UserMediaClientImpl::CreateVideoTracks(
|
| const StreamDeviceInfoArray& devices,
|
| - const blink::WebMediaConstraints& constraints,
|
| blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(current_request_info_);
|
| @@ -884,9 +902,9 @@ void UserMediaClientImpl::CreateVideoTracks(
|
|
|
| for (size_t i = 0; i < devices.size(); ++i) {
|
| blink::WebMediaStreamSource source =
|
| - InitializeVideoSourceObject(devices[i], constraints);
|
| + InitializeVideoSourceObject(devices[i]);
|
| (*webkit_tracks)[i] =
|
| - current_request_info_->CreateAndStartVideoTrack(source, constraints);
|
| + current_request_info_->CreateAndStartVideoTrack(source);
|
| }
|
| }
|
|
|
| @@ -1275,6 +1293,7 @@ UserMediaClientImpl::UserMediaRequestInfo::UserMediaRequestInfo(
|
| : request_id_(request_id),
|
| state_(State::NOT_SENT_FOR_GENERATION),
|
| enable_automatic_output_device_selection_(false),
|
| + is_video_content_capture_(false),
|
| request_(request),
|
| is_processing_user_gesture_(is_processing_user_gesture),
|
| security_origin_(security_origin),
|
| @@ -1301,18 +1320,28 @@ void UserMediaClientImpl::UserMediaRequestInfo::StartAudioTrack(
|
|
|
| blink::WebMediaStreamTrack
|
| UserMediaClientImpl::UserMediaRequestInfo::CreateAndStartVideoTrack(
|
| - const blink::WebMediaStreamSource& source,
|
| - const blink::WebMediaConstraints& constraints) {
|
| + const blink::WebMediaStreamSource& source) {
|
| DCHECK(source.getType() == blink::WebMediaStreamSource::TypeVideo);
|
| + DCHECK(request_.video());
|
| + DCHECK(video_capture_settings_.HasValue());
|
| MediaStreamVideoSource* native_source =
|
| MediaStreamVideoSource::GetVideoSource(source);
|
| DCHECK(native_source);
|
| sources_.push_back(source);
|
| sources_waiting_for_callback_.push_back(native_source);
|
| + if (IsOldVideoConstraints()) {
|
| + return MediaStreamVideoTrack::CreateVideoTrack(
|
| + native_source, request_.videoConstraints(),
|
| + base::Bind(&UserMediaClientImpl::UserMediaRequestInfo::OnTrackStarted,
|
| + AsWeakPtr()),
|
| + true);
|
| + }
|
| return MediaStreamVideoTrack::CreateVideoTrack(
|
| - native_source, constraints, base::Bind(
|
| - &UserMediaClientImpl::UserMediaRequestInfo::OnTrackStarted,
|
| - AsWeakPtr()),
|
| + native_source, video_capture_settings_.track_adapter_settings(),
|
| + video_capture_settings_.noise_reduction(), is_video_content_capture_,
|
| + video_capture_settings_.min_frame_rate(),
|
| + base::Bind(&UserMediaClientImpl::UserMediaRequestInfo::OnTrackStarted,
|
| + AsWeakPtr()),
|
| true);
|
| }
|
|
|
|
|