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

Side by Side Diff: content/renderer/media/media_stream_video_track.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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_track.h" 5 #include "content/renderer/media/media_stream_video_track.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ptr_util.h"
12 #include "base/single_thread_task_runner.h" 13 #include "base/single_thread_task_runner.h"
13 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
14 #include "content/renderer/media/media_stream_constraints_util_video_device.h" 15 #include "content/renderer/media/media_stream_constraints_util_video_device.h"
16 #include "media/capture/video_capture_types.h"
15 17
16 namespace content { 18 namespace content {
17 19
18 namespace { 20 namespace {
19 void ResetCallback(std::unique_ptr<VideoCaptureDeliverFrameCB> callback) { 21 void ResetCallback(std::unique_ptr<VideoCaptureDeliverFrameCB> callback) {
20 // |callback| will be deleted when this exits. 22 // |callback| will be deleted when this exits.
21 } 23 }
22 24
23 // Empty method used for keeping a reference to the original media::VideoFrame. 25 // Empty method used for keeping a reference to the original media::VideoFrame.
24 // The reference to |frame| is kept in the closure that calls this method. 26 // The reference to |frame| is kept in the closure that calls this method.
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 196
195 return wrapped_black_frame; 197 return wrapped_black_frame;
196 } 198 }
197 199
198 // static 200 // static
199 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( 201 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack(
200 MediaStreamVideoSource* source, 202 MediaStreamVideoSource* source,
201 const blink::WebMediaConstraints& constraints, 203 const blink::WebMediaConstraints& constraints,
202 const MediaStreamVideoSource::ConstraintsCallback& callback, 204 const MediaStreamVideoSource::ConstraintsCallback& callback,
203 bool enabled) { 205 bool enabled) {
206 DCHECK(IsOldVideoConstraints());
204 blink::WebMediaStreamTrack track; 207 blink::WebMediaStreamTrack track;
205 track.initialize(source->owner()); 208 track.initialize(source->owner());
206 track.setTrackData( 209 track.setTrackData(
207 new MediaStreamVideoTrack(source, constraints, callback, enabled)); 210 new MediaStreamVideoTrack(source, constraints, callback, enabled));
208 return track; 211 return track;
209 } 212 }
210 213
211 // static 214 // static
215 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack(
216 MediaStreamVideoSource* source,
217 const MediaStreamVideoSource::ConstraintsCallback& callback,
218 bool enabled) {
219 blink::WebMediaStreamTrack track;
220 track.initialize(source->owner());
221 track.setTrackData(new MediaStreamVideoTrack(source, callback, enabled));
222 return track;
223 }
224
225 // static
226 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack(
227 MediaStreamVideoSource* source,
228 const VideoTrackAdapterSettings& adapter_settings,
229 const base::Optional<bool>& noise_reduction,
230 bool is_screencast,
231 double min_frame_rate,
232 const MediaStreamVideoSource::ConstraintsCallback& callback,
233 bool enabled) {
234 blink::WebMediaStreamTrack track;
235 track.initialize(source->owner());
236 track.setTrackData(new MediaStreamVideoTrack(
237 source, adapter_settings, noise_reduction, is_screencast, min_frame_rate,
238 callback, enabled));
239 return track;
240 }
241
242 // static
212 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack( 243 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack(
213 const blink::WebMediaStreamTrack& track) { 244 const blink::WebMediaStreamTrack& track) {
214 if (track.isNull() || 245 if (track.isNull() ||
215 track.source().getType() != blink::WebMediaStreamSource::TypeVideo) { 246 track.source().getType() != blink::WebMediaStreamSource::TypeVideo) {
216 return nullptr; 247 return nullptr;
217 } 248 }
218 return static_cast<MediaStreamVideoTrack*>(track.getTrackData()); 249 return static_cast<MediaStreamVideoTrack*>(track.getTrackData());
219 } 250 }
220 251
221 MediaStreamVideoTrack::MediaStreamVideoTrack( 252 MediaStreamVideoTrack::MediaStreamVideoTrack(
222 MediaStreamVideoSource* source, 253 MediaStreamVideoSource* source,
254 const MediaStreamVideoSource::ConstraintsCallback& callback,
255 bool enabled)
256 : MediaStreamTrack(true),
257 frame_deliverer_(
258 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(),
259 enabled)),
260 adapter_settings_(base::MakeUnique<VideoTrackAdapterSettings>(
261 VideoTrackAdapterSettings())),
262 is_screencast_(false),
263 min_frame_rate_(0.0),
264 source_(source->GetWeakPtr()) {
265 if (IsOldVideoConstraints()) {
266 blink::WebMediaConstraints constraints;
267 constraints.initialize();
268 source->AddTrackLegacy(
269 this,
270 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
271 frame_deliverer_),
272 constraints, callback);
273 } else {
274 source->AddTrack(
275 this, VideoTrackAdapterSettings(),
276 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
277 frame_deliverer_),
278 callback);
279 }
280 }
281
282 MediaStreamVideoTrack::MediaStreamVideoTrack(
283 MediaStreamVideoSource* source,
223 const blink::WebMediaConstraints& constraints, 284 const blink::WebMediaConstraints& constraints,
224 const MediaStreamVideoSource::ConstraintsCallback& callback, 285 const MediaStreamVideoSource::ConstraintsCallback& callback,
225 bool enabled) 286 bool enabled)
226 : MediaStreamTrack(true), 287 : MediaStreamTrack(true),
227 frame_deliverer_( 288 frame_deliverer_(
228 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), 289 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(),
229 enabled)), 290 enabled)),
230 constraints_(constraints), 291 constraints_(constraints),
231 source_(source->GetWeakPtr()) { 292 source_(source->GetWeakPtr()) {
293 DCHECK(IsOldVideoConstraints());
232 DCHECK(!constraints.isNull()); 294 DCHECK(!constraints.isNull());
233 source->AddTrack(this, 295 source->AddTrackLegacy(
234 base::Bind( 296 this,
235 &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, 297 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
236 frame_deliverer_), 298 frame_deliverer_),
237 constraints, callback); 299 constraints, callback);
300 }
301
302 MediaStreamVideoTrack::MediaStreamVideoTrack(
303 MediaStreamVideoSource* source,
304 const VideoTrackAdapterSettings& adapter_settings,
305 const base::Optional<bool>& noise_reduction,
306 bool is_screen_cast,
307 double min_frame_rate,
308 const MediaStreamVideoSource::ConstraintsCallback& callback,
309 bool enabled)
310 : MediaStreamTrack(true),
311 frame_deliverer_(
312 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(),
313 enabled)),
314 adapter_settings_(
315 base::MakeUnique<VideoTrackAdapterSettings>(adapter_settings)),
316 noise_reduction_(noise_reduction),
317 is_screencast_(is_screen_cast),
318 min_frame_rate_(min_frame_rate),
319 source_(source->GetWeakPtr()) {
320 DCHECK(!IsOldVideoConstraints());
321 source->AddTrack(
322 this, adapter_settings,
323 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
324 frame_deliverer_),
325 callback);
238 } 326 }
239 327
240 MediaStreamVideoTrack::~MediaStreamVideoTrack() { 328 MediaStreamVideoTrack::~MediaStreamVideoTrack() {
241 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 329 DCHECK(main_render_thread_checker_.CalledOnValidThread());
242 DCHECK(sinks_.empty()); 330 DCHECK(sinks_.empty());
243 Stop(); 331 Stop();
244 DVLOG(3) << "~MediaStreamVideoTrack()"; 332 DVLOG(3) << "~MediaStreamVideoTrack()";
245 } 333 }
246 334
247 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink, 335 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 383 DCHECK(main_render_thread_checker_.CalledOnValidThread());
296 if (source_) { 384 if (source_) {
297 source_->RemoveTrack(this); 385 source_->RemoveTrack(this);
298 source_ = NULL; 386 source_ = NULL;
299 } 387 }
300 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); 388 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded);
301 } 389 }
302 390
303 void MediaStreamVideoTrack::getSettings( 391 void MediaStreamVideoTrack::getSettings(
304 blink::WebMediaStreamTrack::Settings& settings) { 392 blink::WebMediaStreamTrack::Settings& settings) {
305 const media::VideoCaptureFormat* format = source_->GetCurrentFormat(); 393 base::Optional<media::VideoCaptureFormat> format =
394 source_->GetCurrentFormat();
306 if (format) { 395 if (format) {
307 settings.frameRate = format->frame_rate; 396 settings.frameRate = format->frame_rate;
308 settings.videoKind = GetVideoKindForFormat(*format); 397 settings.videoKind = GetVideoKindForFormat(*format);
309 } 398 }
310 if (width_ && height_) { 399 if (width_ && height_) {
311 settings.width = width_; 400 settings.width = width_;
312 settings.height = height_; 401 settings.height = height_;
313 } 402 }
314 switch (source_->device_info().device.video_facing) { 403 switch (source_->device_info().device.video_facing) {
315 case media::MEDIA_VIDEO_FACING_NONE: 404 case media::MEDIA_VIDEO_FACING_NONE:
(...skipping 20 matching lines...) Expand all
336 } 425 }
337 426
338 void MediaStreamVideoTrack::OnReadyStateChanged( 427 void MediaStreamVideoTrack::OnReadyStateChanged(
339 blink::WebMediaStreamSource::ReadyState state) { 428 blink::WebMediaStreamSource::ReadyState state) {
340 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 429 DCHECK(main_render_thread_checker_.CalledOnValidThread());
341 for (auto* sink : sinks_) 430 for (auto* sink : sinks_)
342 sink->OnReadyStateChanged(state); 431 sink->OnReadyStateChanged(state);
343 } 432 }
344 433
345 } // namespace content 434 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_track.h ('k') | content/renderer/media/media_stream_video_track_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698