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

Side by Side Diff: content/renderer/media/media_stream_video_source_unittest.cc

Issue 1617243005: Apply new-style constraints to video_source. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 10 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 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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "content/child/child_process.h" 13 #include "content/child/child_process.h"
14 #include "content/renderer/media/media_stream_video_source.h" 14 #include "content/renderer/media/media_stream_video_source.h"
15 #include "content/renderer/media/media_stream_video_track.h" 15 #include "content/renderer/media/media_stream_video_track.h"
16 #include "content/renderer/media/mock_media_constraint_factory.h" 16 #include "content/renderer/media/mock_constraint_factory.h"
17 #include "content/renderer/media/mock_media_stream_video_sink.h" 17 #include "content/renderer/media/mock_media_stream_video_sink.h"
18 #include "content/renderer/media/mock_media_stream_video_source.h" 18 #include "content/renderer/media/mock_media_stream_video_source.h"
19 #include "media/base/limits.h"
19 #include "media/base/video_frame.h" 20 #include "media/base/video_frame.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 #include "third_party/WebKit/public/web/WebHeap.h" 22 #include "third_party/WebKit/public/web/WebHeap.h"
22 23
23 using ::testing::_; 24 using ::testing::_;
24 using ::testing::DoAll; 25 using ::testing::DoAll;
25 using ::testing::SaveArg; 26 using ::testing::SaveArg;
26 27
27 namespace content { 28 namespace content {
28 29
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); 290 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
290 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); 291 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints);
291 mock_source()->CompleteGetSupportedFormats(); 292 mock_source()->CompleteGetSupportedFormats();
292 mock_source()->StartMockedSource(); 293 mock_source()->StartMockedSource();
293 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); 294 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
294 } 295 }
295 296
296 // Test that the capture output is CIF if we set max constraints to CIF. 297 // Test that the capture output is CIF if we set max constraints to CIF.
297 // and the capture device support CIF. 298 // and the capture device support CIF.
298 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) { 299 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) {
299 MockMediaConstraintFactory factory; 300 MockConstraintFactory factory;
300 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 352); 301 factory.basic().width.setMax(352);
301 factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 288); 302 factory.basic().height.setMax(288);
302 factory.AddMandatory(MediaStreamVideoSource::kMaxFrameRate, 5); 303 factory.basic().frameRate.setMax(5.0);
303 304
304 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 352, 288, 5); 305 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 352, 288, 5);
305 } 306 }
306 307
307 // Test that the capture output is 720P if the camera support it and the 308 // Test that the capture output is 720P if the camera support it and the
308 // optional constraint is set to 720P. 309 // optional constraint is set to 720P.
309 TEST_F(MediaStreamVideoSourceTest, MandatoryMinVgaOptional720P) { 310 TEST_F(MediaStreamVideoSourceTest, MandatoryMinVgaOptional720P) {
310 MockMediaConstraintFactory factory; 311 MockConstraintFactory factory;
311 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); 312 factory.basic().width.setMin(640);
312 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); 313 factory.basic().height.setMin(480);
313 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); 314 factory.AddAdvanced().width.setMin(1280);
314 factory.AddOptional(MediaStreamVideoSource::kMinAspectRatio, 1280.0 / 720); 315 factory.AddAdvanced().aspectRatio.setMin(1280.0 / 720);
315 316
316 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); 317 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30);
317 } 318 }
318 319
319 // Test that the capture output have aspect ratio 4:3 if a mandatory constraint 320 // Test that the capture output have aspect ratio 4:3 if a mandatory constraint
320 // require it even if an optional constraint request a higher resolution 321 // require it even if an optional constraint request a higher resolution
321 // that don't have this aspect ratio. 322 // that don't have this aspect ratio.
322 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) { 323 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) {
323 MockMediaConstraintFactory factory; 324 MockConstraintFactory factory;
324 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); 325 factory.basic().width.setMin(640);
325 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); 326 factory.basic().height.setMin(480);
326 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, 640.0 / 480); 327 factory.basic().aspectRatio.setMax(640.0 / 480);
327 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); 328 factory.AddAdvanced().width.setMin(1280);
328 329
329 TestSourceCropFrame(1280, 720, 330 TestSourceCropFrame(1280, 720,
330 factory.CreateWebMediaConstraints(), 960, 720); 331 factory.CreateWebMediaConstraints(), 960, 720);
331 } 332 }
332 333
333 // Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2. 334 // Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2.
334 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2) { 335 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2) {
335 MockMediaConstraintFactory factory; 336 MockConstraintFactory factory;
336 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2); 337 factory.basic().aspectRatio.setMin(2.0);
337 338
338 TestSourceCropFrame(MediaStreamVideoSource::kDefaultWidth, 339 TestSourceCropFrame(MediaStreamVideoSource::kDefaultWidth,
339 MediaStreamVideoSource::kDefaultHeight, 340 MediaStreamVideoSource::kDefaultHeight,
340 factory.CreateWebMediaConstraints(), 640, 320); 341 factory.CreateWebMediaConstraints(), 640, 320);
341 } 342 }
342 343
343 TEST_F(MediaStreamVideoSourceTest, MinAspectRatioLargerThanMaxAspectRatio) { 344 TEST_F(MediaStreamVideoSourceTest, MinAspectRatioLargerThanMaxAspectRatio) {
344 MockMediaConstraintFactory factory; 345 MockConstraintFactory factory;
345 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2); 346 factory.basic().aspectRatio.setMin(2.0);
346 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, 1); 347 factory.basic().aspectRatio.setMax(1.0);
347 blink::WebMediaStreamTrack track = CreateTrack( 348 blink::WebMediaStreamTrack track = CreateTrack(
348 "123", factory.CreateWebMediaConstraints()); 349 "123", factory.CreateWebMediaConstraints());
349 mock_source()->CompleteGetSupportedFormats(); 350 mock_source()->CompleteGetSupportedFormats();
350 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
351 }
352
353 TEST_F(MediaStreamVideoSourceTest, MaxAspectRatioZero) {
354 MockMediaConstraintFactory factory;
355 factory.AddOptional(MediaStreamVideoSource::kMaxAspectRatio, 0);
356 blink::WebMediaStreamTrack track = CreateTrack(
357 "123", factory.CreateWebMediaConstraints());
358 mock_source()->CompleteGetSupportedFormats();
359 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 351 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
360 } 352 }
361 353
362 TEST_F(MediaStreamVideoSourceTest, MinWidthLargerThanMaxWidth) { 354 TEST_F(MediaStreamVideoSourceTest, MinWidthLargerThanMaxWidth) {
363 MockMediaConstraintFactory factory; 355 MockConstraintFactory factory;
364 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); 356 factory.basic().width.setMin(640);
365 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 320); 357 factory.basic().width.setMax(320);
366 blink::WebMediaStreamTrack track = CreateTrack( 358 blink::WebMediaStreamTrack track = CreateTrack(
367 "123", factory.CreateWebMediaConstraints()); 359 "123", factory.CreateWebMediaConstraints());
368 mock_source()->CompleteGetSupportedFormats(); 360 mock_source()->CompleteGetSupportedFormats();
369 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 361 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
370 } 362 }
371 363
372 TEST_F(MediaStreamVideoSourceTest, MinHeightLargerThanMaxHeight) { 364 TEST_F(MediaStreamVideoSourceTest, MinHeightLargerThanMaxHeight) {
373 MockMediaConstraintFactory factory; 365 MockConstraintFactory factory;
374 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); 366 factory.basic().height.setMin(480);
375 factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 360); 367 factory.basic().height.setMax(360);
368
376 blink::WebMediaStreamTrack track = CreateTrack( 369 blink::WebMediaStreamTrack track = CreateTrack(
377 "123", factory.CreateWebMediaConstraints()); 370 "123", factory.CreateWebMediaConstraints());
378 mock_source()->CompleteGetSupportedFormats(); 371 mock_source()->CompleteGetSupportedFormats();
379 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 372 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
380 } 373 }
381 374
382 TEST_F(MediaStreamVideoSourceTest, MinFrameRateLargerThanMaxFrameRate) { 375 TEST_F(MediaStreamVideoSourceTest, MinFrameRateLargerThanMaxFrameRate) {
383 MockMediaConstraintFactory factory; 376 MockConstraintFactory factory;
384 factory.AddMandatory(MediaStreamVideoSource::kMinFrameRate, 25); 377 factory.basic().frameRate.setMin(25);
385 factory.AddMandatory(MediaStreamVideoSource::kMaxFrameRate, 15); 378 factory.basic().frameRate.setMax(15);
386 blink::WebMediaStreamTrack track = CreateTrack( 379 blink::WebMediaStreamTrack track = CreateTrack(
387 "123", factory.CreateWebMediaConstraints()); 380 "123", factory.CreateWebMediaConstraints());
388 mock_source()->CompleteGetSupportedFormats(); 381 mock_source()->CompleteGetSupportedFormats();
389 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 382 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
390 } 383 }
391 384
392 // Test that its safe to release the last reference of a blink track and the 385 // Test that its safe to release the last reference of a blink track and the
393 // source during the callback if adding a track succeeds. 386 // source during the callback if adding a track succeeds.
394 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) { 387 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) {
395 MockMediaConstraintFactory factory; 388 MockConstraintFactory factory;
396 { 389 {
397 blink::WebMediaStreamTrack track = 390 blink::WebMediaStreamTrack track =
398 CreateTrack("123", factory.CreateWebMediaConstraints()); 391 CreateTrack("123", factory.CreateWebMediaConstraints());
399 ReleaseTrackAndSourceOnAddTrackCallback(track); 392 ReleaseTrackAndSourceOnAddTrackCallback(track);
400 } 393 }
401 mock_source()->CompleteGetSupportedFormats(); 394 mock_source()->CompleteGetSupportedFormats();
402 mock_source()->StartMockedSource(); 395 mock_source()->StartMockedSource();
403 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 396 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
404 } 397 }
405 398
406 // Test that its safe to release the last reference of a blink track and the 399 // Test that its safe to release the last reference of a blink track and the
407 // source during the callback if adding a track fails. 400 // source during the callback if adding a track fails.
408 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnFailureCallBack) { 401 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnFailureCallBack) {
409 MockMediaConstraintFactory factory; 402 MockConstraintFactory factory;
410 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 99999); 403 factory.basic().width.setMin(99999);
411 { 404 {
412 blink::WebMediaStreamTrack track = 405 blink::WebMediaStreamTrack track =
413 CreateTrack("123", factory.CreateWebMediaConstraints()); 406 CreateTrack("123", factory.CreateWebMediaConstraints());
414 ReleaseTrackAndSourceOnAddTrackCallback(track); 407 ReleaseTrackAndSourceOnAddTrackCallback(track);
415 } 408 }
416 mock_source()->CompleteGetSupportedFormats(); 409 mock_source()->CompleteGetSupportedFormats();
417 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 410 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
418 } 411 }
419 412
420 // Test that the source ignores an optional aspect ratio that is higher than 413 // Test that the source ignores an optional aspect ratio that is higher than
421 // supported. 414 // supported.
422 TEST_F(MediaStreamVideoSourceTest, OptionalAspectRatioTooHigh) { 415 TEST_F(MediaStreamVideoSourceTest, OptionalAspectRatioTooHigh) {
423 MockMediaConstraintFactory factory; 416 MockConstraintFactory factory;
424 factory.AddOptional(MediaStreamVideoSource::kMinAspectRatio, 2); 417 factory.AddAdvanced().aspectRatio.setMin(2.0);
425 blink::WebMediaStreamTrack track = CreateTrack( 418 blink::WebMediaStreamTrack track = CreateTrack(
426 "123", factory.CreateWebMediaConstraints()); 419 "123", factory.CreateWebMediaConstraints());
427 mock_source()->CompleteGetSupportedFormats(); 420 mock_source()->CompleteGetSupportedFormats();
428 421
429 const media::VideoCaptureFormat& format = mock_source()->start_format(); 422 const media::VideoCaptureFormat& format = mock_source()->start_format();
430 const double aspect_ratio = static_cast<double>(format.frame_size.width()) / 423 const double aspect_ratio = static_cast<double>(format.frame_size.width()) /
431 format.frame_size.height(); 424 format.frame_size.height();
432 EXPECT_LT(aspect_ratio, 2); 425 EXPECT_LT(aspect_ratio, 2);
433 } 426 }
434 427
(...skipping 10 matching lines...) Expand all
445 438
446 blink::WebMediaConstraints constraints; 439 blink::WebMediaConstraints constraints;
447 constraints.initialize(); 440 constraints.initialize();
448 CreateTrackAndStartSource(constraints, 441 CreateTrackAndStartSource(constraints,
449 MediaStreamVideoSource::kDefaultWidth, 442 MediaStreamVideoSource::kDefaultWidth,
450 MediaStreamVideoSource::kDefaultHeight, 443 MediaStreamVideoSource::kDefaultHeight,
451 30); 444 30);
452 } 445 }
453 446
454 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { 447 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) {
455 MockMediaConstraintFactory factory; 448 MockConstraintFactory factory;
456 factory.AddMandatory("weird key", 640); 449 // Use a constraint that is only known for audio.
450 factory.basic().echoCancellation.setExact(true);
457 blink::WebMediaStreamTrack track = CreateTrack( 451 blink::WebMediaStreamTrack track = CreateTrack(
458 "123", factory.CreateWebMediaConstraints()); 452 "123", factory.CreateWebMediaConstraints());
459 mock_source()->CompleteGetSupportedFormats(); 453 mock_source()->CompleteGetSupportedFormats();
460 EXPECT_EQ(MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED, error_type()); 454 EXPECT_EQ(MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED, error_type());
461 EXPECT_EQ("weird key", error_name()); 455 EXPECT_EQ("echoCancellation", error_name());
462 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 456 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
463 } 457 }
464 458
465 // Test that the source ignores an unknown optional constraint. 459 // Test that the source ignores an unknown optional constraint.
466 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { 460 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) {
467 MockMediaConstraintFactory factory; 461 MockConstraintFactory factory;
468 factory.AddOptional("weird key", 640); 462 factory.AddAdvanced().echoCancellation.setExact(true);
469 463
470 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 464 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(),
471 MediaStreamVideoSource::kDefaultWidth, 465 MediaStreamVideoSource::kDefaultWidth,
472 MediaStreamVideoSource::kDefaultHeight, 466 MediaStreamVideoSource::kDefaultHeight,
473 30); 467 30);
474 } 468 }
475 469
476 // Tests that the source starts video with the max width and height set by 470 // Tests that the source starts video with the max width and height set by
477 // constraints for screencast. 471 // constraints for screencast.
478 TEST_F(MediaStreamVideoSourceTest, ScreencastResolutionWithConstraint) { 472 TEST_F(MediaStreamVideoSourceTest, ScreencastResolutionWithConstraint) {
479 media::VideoCaptureFormats formats; 473 media::VideoCaptureFormats formats;
480 formats.push_back(media::VideoCaptureFormat( 474 formats.push_back(media::VideoCaptureFormat(
481 gfx::Size(480, 270), 30, media::PIXEL_FORMAT_I420)); 475 gfx::Size(480, 270), 30, media::PIXEL_FORMAT_I420));
482 mock_source()->SetSupportedFormats(formats); 476 mock_source()->SetSupportedFormats(formats);
483 MockMediaConstraintFactory factory; 477 MockConstraintFactory factory;
484 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 480); 478 factory.basic().width.setMax(480);
485 factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 270); 479 factory.basic().height.setMax(270);
486 480
487 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( 481 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
488 factory.CreateWebMediaConstraints(), 480, 270, 30); 482 factory.CreateWebMediaConstraints(), 480, 270, 30);
489 EXPECT_EQ(480, mock_source()->max_requested_height()); 483 EXPECT_EQ(480, mock_source()->max_requested_height());
490 EXPECT_EQ(270, mock_source()->max_requested_width()); 484 EXPECT_EQ(270, mock_source()->max_requested_width());
491 } 485 }
492 486
493 // Test that optional constraints are applied in order. 487 // Test that optional constraints are applied in order.
494 TEST_F(MediaStreamVideoSourceTest, OptionalConstraints) { 488 TEST_F(MediaStreamVideoSourceTest, OptionalConstraints) {
495 MockMediaConstraintFactory factory; 489 MockConstraintFactory factory;
496 // Min width of 2056 pixels can not be fulfilled. 490 // Min width of 2056 pixels can not be fulfilled.
497 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 2056); 491 factory.AddAdvanced().width.setMin(2056);
498 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 641); 492 factory.AddAdvanced().width.setMin(641);
499 // Since min width is set to 641 pixels, max width 640 can not be fulfilled. 493 // Since min width is set to 641 pixels, max width 640 can not be fulfilled.
500 factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 640); 494 factory.AddAdvanced().width.setMax(640);
501 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); 495 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30);
502 } 496 }
503 497
504 // Test that the source crops to the requested max width and 498 // Test that the source crops to the requested max width and
505 // height even though the camera delivers a larger frame. 499 // height even though the camera delivers a larger frame.
506 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameOptional640360) { 500 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameOptional640360) {
507 MockMediaConstraintFactory factory; 501 MockConstraintFactory factory;
508 factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 640); 502 factory.AddAdvanced().width.setMax(640);
509 factory.AddOptional(MediaStreamVideoSource::kMaxHeight, 360); 503 factory.AddAdvanced().height.setMax(360);
510 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); 504 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360);
511 } 505 }
512 506
513 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameMandatory640360) { 507 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameMandatory640360) {
514 MockMediaConstraintFactory factory; 508 MockConstraintFactory factory;
515 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 640); 509 factory.basic().width.setMax(640);
516 factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 360); 510 factory.basic().height.setMax(360);
517 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); 511 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360);
518 } 512 }
519 513
520 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameMandatory732489) { 514 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameMandatory732489) {
521 MockMediaConstraintFactory factory; 515 MockConstraintFactory factory;
522 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 732); 516 factory.basic().width.setMax(732);
523 factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 489); 517 factory.basic().height.setMax(489);
524 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 732); 518 factory.basic().width.setMin(732);
525 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 489); 519 factory.basic().height.setMin(489);
526 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 732, 489); 520 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 732, 489);
527 } 521 }
528 522
529 // Test that the source crops to the requested max width and 523 // Test that the source crops to the requested max width and
530 // height even though the requested frame has odd size. 524 // height even though the requested frame has odd size.
531 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame637359) { 525 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame637359) {
532 MockMediaConstraintFactory factory; 526 MockConstraintFactory factory;
533 factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 637); 527 factory.AddAdvanced().width.setMax(637);
534 factory.AddOptional(MediaStreamVideoSource::kMaxHeight, 359); 528 factory.AddAdvanced().height.setMax(359);
535 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 637, 359); 529 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 637, 359);
536 } 530 }
537 531
538 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame320320) { 532 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame320320) {
539 MockMediaConstraintFactory factory; 533 MockConstraintFactory factory;
540 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 320); 534 factory.basic().width.setMax(320);
541 factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 320); 535 factory.basic().height.setMax(320);
542 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 320); 536 factory.basic().height.setMin(320);
543 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 320); 537 factory.basic().width.setMax(320);
544 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 320, 320); 538 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 320, 320);
545 } 539 }
546 540
547 TEST_F(MediaStreamVideoSourceTest, DeliverSmallerSizeWhenTooLargeMax) { 541 TEST_F(MediaStreamVideoSourceTest, DeliverSmallerSizeWhenTooLargeMax) {
548 MockMediaConstraintFactory factory; 542 MockConstraintFactory factory;
549 factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 1920); 543 factory.AddAdvanced().width.setMax(1920);
550 factory.AddOptional(MediaStreamVideoSource::kMaxHeight, 1080); 544 factory.AddAdvanced().height.setMax(1080);
551 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); 545 factory.AddAdvanced().width.setMin(1280);
552 factory.AddOptional(MediaStreamVideoSource::kMinHeight, 720); 546 factory.AddAdvanced().height.setMin(720);
553 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 547 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(),
554 1280, 720); 548 1280, 720);
555 } 549 }
556 550
557 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) { 551 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) {
558 MockMediaConstraintFactory factory1; 552 MockConstraintFactory factory1;
559 factory1.AddOptional(MediaStreamVideoSource::kMaxWidth, 640); 553 factory1.AddAdvanced().width.setMax(640);
560 factory1.AddOptional(MediaStreamVideoSource::kMaxHeight, 480); 554 factory1.AddAdvanced().height.setMax(480);
561 555
562 MockMediaConstraintFactory factory2; 556 MockConstraintFactory factory2;
563 factory2.AddOptional(MediaStreamVideoSource::kMaxHeight, 360); 557 factory2.AddAdvanced().height.setMax(360);
564 558
565 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 559 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
566 factory2.CreateWebMediaConstraints(), 560 factory2.CreateWebMediaConstraints(),
567 640, 480, 561 640, 480,
568 640, 480, 562 640, 480,
569 640, 360); 563 640, 360);
570 } 564 }
571 565
572 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) { 566 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) {
573 MockMediaConstraintFactory factory1; 567 MockConstraintFactory factory1;
574 factory1.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); 568 factory1.AddAdvanced().width.setMin(1280);
575 factory1.AddOptional(MediaStreamVideoSource::kMinHeight, 720); 569 factory1.AddAdvanced().height.setMin(720);
576 570
577 571 MockConstraintFactory factory2;
578 MockMediaConstraintFactory factory2; 572 factory2.basic().width.setMax(640);
579 factory2.AddMandatory(MediaStreamVideoSource::kMaxWidth, 640); 573 factory2.basic().height.setMax(360);
580 factory2.AddMandatory(MediaStreamVideoSource::kMaxHeight, 360);
581 574
582 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 575 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
583 factory2.CreateWebMediaConstraints(), 576 factory2.CreateWebMediaConstraints(),
584 1280, 720, 577 1280, 720,
585 1280, 720, 578 1280, 720,
586 640, 360); 579 640, 360);
587 } 580 }
588 581
589 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndW700H700) { 582 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndW700H700) {
590 MockMediaConstraintFactory factory1; 583 MockConstraintFactory factory1;
591 factory1.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); 584 factory1.AddAdvanced().width.setMin(1280);
592 factory1.AddOptional(MediaStreamVideoSource::kMinHeight, 720); 585 factory1.AddAdvanced().height.setMin(720);
593 586
594 MockMediaConstraintFactory factory2; 587 MockConstraintFactory factory2;
595 factory2.AddMandatory(MediaStreamVideoSource::kMaxWidth, 700); 588 factory2.basic().width.setMax(700);
596 factory2.AddMandatory(MediaStreamVideoSource::kMaxHeight, 700); 589 factory2.basic().height.setMax(700);
597 590
598 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 591 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
599 factory2.CreateWebMediaConstraints(), 592 factory2.CreateWebMediaConstraints(),
600 1280, 720, 593 1280, 720,
601 1280, 720, 594 1280, 720,
602 700, 700); 595 700, 700);
603 } 596 }
604 597
605 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndMaxAspectRatio4To3) { 598 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndMaxAspectRatio4To3) {
606 MockMediaConstraintFactory factory1; 599 MockConstraintFactory factory1;
607 factory1.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); 600 factory1.AddAdvanced().width.setMin(1280);
608 factory1.AddOptional(MediaStreamVideoSource::kMinHeight, 720); 601 factory1.AddAdvanced().height.setMin(720);
609 602
610 MockMediaConstraintFactory factory2; 603 MockConstraintFactory factory2;
611 factory2.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, 640.0 / 480); 604 factory2.basic().aspectRatio.setMax(640.0 / 480);
612 605
613 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 606 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
614 factory2.CreateWebMediaConstraints(), 607 factory2.CreateWebMediaConstraints(),
615 1280, 720, 608 1280, 720,
616 1280, 720, 609 1280, 720,
617 960, 720); 610 960, 720);
618 } 611 }
619 612
620 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVgaAndMinAspectRatio) { 613 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVgaAndMinAspectRatio) {
621 MockMediaConstraintFactory factory1; 614 MockConstraintFactory factory1;
622 factory1.AddOptional(MediaStreamVideoSource::kMaxWidth, 640); 615 factory1.AddAdvanced().width.setMax(640);
623 factory1.AddOptional(MediaStreamVideoSource::kMaxHeight, 480); 616 factory1.AddAdvanced().height.setMax(480);
624 617
625 MockMediaConstraintFactory factory2; 618 MockConstraintFactory factory2;
626 factory2.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 640.0 / 360); 619 factory2.basic().aspectRatio.setMin(640.0 / 360);
627 620
628 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 621 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
629 factory2.CreateWebMediaConstraints(), 622 factory2.CreateWebMediaConstraints(),
630 640, 480, 623 640, 480,
631 640, 480, 624 640, 480,
632 640, 360); 625 640, 360);
633 } 626 }
634 627
635 TEST_F(MediaStreamVideoSourceTest, 628 TEST_F(MediaStreamVideoSourceTest,
636 TwoTracksWithSecondTrackFrameRateHigherThanFirst) { 629 TwoTracksWithSecondTrackFrameRateHigherThanFirst) {
637 MockMediaConstraintFactory factory1; 630 MockConstraintFactory factory1;
638 factory1.AddMandatory(MediaStreamVideoSource::kMinFrameRate, 15); 631 factory1.basic().frameRate.setMin(15);
639 factory1.AddMandatory(MediaStreamVideoSource::kMaxFrameRate, 15); 632 factory1.basic().frameRate.setMax(15);
640 633
641 blink::WebMediaStreamTrack track1 = 634 blink::WebMediaStreamTrack track1 =
642 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(), 635 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(),
643 MediaStreamVideoSource::kDefaultWidth, 636 MediaStreamVideoSource::kDefaultWidth,
644 MediaStreamVideoSource::kDefaultHeight, 637 MediaStreamVideoSource::kDefaultHeight,
645 15); 638 15);
646 639
647 MockMediaConstraintFactory factory2; 640 MockConstraintFactory factory2;
648 factory2.AddMandatory(MediaStreamVideoSource::kMinFrameRate, 30); 641 factory2.basic().frameRate.setMin(30);
649 blink::WebMediaStreamTrack track2 = CreateTrack( 642 blink::WebMediaStreamTrack track2 = CreateTrack(
650 "123", factory2.CreateWebMediaConstraints()); 643 "123", factory2.CreateWebMediaConstraints());
651 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 644 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
652 } 645 }
653 646
654 // Test that a source can change the frame resolution on the fly and that 647 // Test that a source can change the frame resolution on the fly and that
655 // tracks sinks get the new frame size unless constraints force the frame to be 648 // tracks sinks get the new frame size unless constraints force the frame to be
656 // cropped. 649 // cropped.
657 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) { 650 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) {
658 MockMediaConstraintFactory factory; 651 MockConstraintFactory factory;
659 factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 800); 652 factory.AddAdvanced().width.setMax(800);
660 factory.AddOptional(MediaStreamVideoSource::kMaxHeight, 700); 653 factory.AddAdvanced().height.setMax(700);
661 654
662 // Expect the source to start capture with the supported resolution. 655 // Expect the source to start capture with the supported resolution.
663 blink::WebMediaStreamTrack track = 656 blink::WebMediaStreamTrack track =
664 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 657 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(),
665 640, 480, 30); 658 640, 480, 30);
666 659
667 MockMediaStreamVideoSink sink; 660 MockMediaStreamVideoSink sink;
668 MediaStreamVideoSink::AddToVideoTrack( 661 MediaStreamVideoSink::AddToVideoTrack(
669 &sink, sink.GetDeliverFrameCB(), track); 662 &sink, sink.GetDeliverFrameCB(), track);
670 EXPECT_EQ(0, sink.number_of_frames()); 663 EXPECT_EQ(0, sink.number_of_frames());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 // Expect the delivered frame to be passed unchanged since its smaller than 732 // Expect the delivered frame to be passed unchanged since its smaller than
740 // max requested. 733 // max requested.
741 EXPECT_EQ(320, sink.frame_size().width()); 734 EXPECT_EQ(320, sink.frame_size().width());
742 EXPECT_EQ(240, sink.frame_size().height()); 735 EXPECT_EQ(240, sink.frame_size().height());
743 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 736 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
744 } 737 }
745 738
746 // Test that a source producing no frames change the source readyState to muted. 739 // Test that a source producing no frames change the source readyState to muted.
747 // that in a reasonable time frame the muted state turns to false. 740 // that in a reasonable time frame the muted state turns to false.
748 TEST_F(MediaStreamVideoSourceTest, MutedSource) { 741 TEST_F(MediaStreamVideoSourceTest, MutedSource) {
749 // Setup the source for support a frame rate of 2000fps in order to test 742 // Setup the source for support a frame rate of 999 fps in order to test
750 // the muted event faster. This is since the frame monitoring uses 743 // the muted event faster. This is since the frame monitoring uses
751 // PostDelayedTask that is dependent on the source frame rate. 744 // PostDelayedTask that is dependent on the source frame rate.
745 // Note that media::limits::kMaxFramesPerSecond is 1000.
752 media::VideoCaptureFormats formats; 746 media::VideoCaptureFormats formats;
753 formats.push_back(media::VideoCaptureFormat( 747 formats.push_back(media::VideoCaptureFormat(
754 gfx::Size(640, 480), 2000, media::PIXEL_FORMAT_I420)); 748 gfx::Size(640, 480), media::limits::kMaxFramesPerSecond - 1,
749 media::PIXEL_FORMAT_I420));
755 SetSourceSupportedFormats(formats); 750 SetSourceSupportedFormats(formats);
756 751
757 MockMediaConstraintFactory factory; 752 MockConstraintFactory factory;
758 blink::WebMediaStreamTrack track = 753 blink::WebMediaStreamTrack track =
759 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 754 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 640, 480,
760 640, 480, 2000); 755 media::limits::kMaxFramesPerSecond - 1);
761 MockMediaStreamVideoSink sink; 756 MockMediaStreamVideoSink sink;
762 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track); 757 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track);
763 EXPECT_EQ(track.source().readyState(), 758 EXPECT_EQ(track.source().readyState(),
764 blink::WebMediaStreamSource::ReadyStateLive); 759 blink::WebMediaStreamSource::ReadyStateLive);
765 760
766 base::RunLoop run_loop; 761 base::RunLoop run_loop;
767 base::Closure quit_closure = run_loop.QuitClosure(); 762 base::Closure quit_closure = run_loop.QuitClosure();
768 bool muted_state = false; 763 bool muted_state = false;
769 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) 764 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
770 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); 765 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
(...skipping 11 matching lines...) Expand all
782 run_loop2.Run(); 777 run_loop2.Run();
783 778
784 EXPECT_EQ(muted_state, false); 779 EXPECT_EQ(muted_state, false);
785 EXPECT_EQ(track.source().readyState(), 780 EXPECT_EQ(track.source().readyState(),
786 blink::WebMediaStreamSource::ReadyStateLive); 781 blink::WebMediaStreamSource::ReadyStateLive);
787 782
788 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 783 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
789 } 784 }
790 785
791 } // namespace content 786 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_source.cc ('k') | content/renderer/media/mock_constraint_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698