Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2284)

Unified Diff: content/renderer/media/user_media_client_impl.cc

Issue 2790823002: Spec compliant video constraints for getUserMedia behind flag. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/user_media_client_impl.h ('k') | content/renderer/media/video_track_adapter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « content/renderer/media/user_media_client_impl.h ('k') | content/renderer/media/video_track_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698