OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 void OnFrameCaptured(VideoCapturer* capturer, | 65 void OnFrameCaptured(VideoCapturer* capturer, |
66 const CapturedFrame* captured_frame) { | 66 const CapturedFrame* captured_frame) { |
67 rtc::CritScope lock(&crit_); | 67 rtc::CritScope lock(&crit_); |
68 const int in_width = captured_frame->width; | 68 const int in_width = captured_frame->width; |
69 const int in_height = abs(captured_frame->height); | 69 const int in_height = abs(captured_frame->height); |
70 int cropped_width; | 70 int cropped_width; |
71 int cropped_height; | 71 int cropped_height; |
72 int out_width; | 72 int out_width; |
73 int out_height; | 73 int out_height; |
74 video_adapter_->AdaptFrameResolution(in_width, in_height, | 74 if (video_adapter_->AdaptFrameResolution(in_width, in_height, |
75 captured_frame->time_stamp, | 75 captured_frame->time_stamp, |
76 &cropped_width, &cropped_height, | 76 &cropped_width, &cropped_height, |
77 &out_width, &out_height); | 77 &out_width, &out_height)) { |
78 if (out_width != 0 && out_height != 0) { | |
79 cropped_width_ = cropped_width; | 78 cropped_width_ = cropped_width; |
80 cropped_height_ = cropped_height; | 79 cropped_height_ = cropped_height; |
81 out_width_ = out_width; | 80 out_width_ = out_width; |
82 out_height_ = out_height; | 81 out_height_ = out_height; |
83 last_adapt_was_no_op_ = | 82 last_adapt_was_no_op_ = |
84 (in_width == cropped_width && in_height == cropped_height && | 83 (in_width == cropped_width && in_height == cropped_height && |
85 in_width == out_width && in_height == out_height); | 84 in_width == out_width && in_height == out_height); |
86 } else { | 85 } else { |
87 ++dropped_frames_; | 86 ++dropped_frames_; |
88 } | 87 } |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 EXPECT_GT(listener_->GetStats().dropped_frames, 0); | 382 EXPECT_GT(listener_->GetStats().dropped_frames, 0); |
384 } | 383 } |
385 | 384 |
386 // Set a very high output pixel resolution. Expect no cropping or resolution | 385 // Set a very high output pixel resolution. Expect no cropping or resolution |
387 // change. | 386 // change. |
388 TEST_F(VideoAdapterTest, AdaptFrameResolutionHighLimit) { | 387 TEST_F(VideoAdapterTest, AdaptFrameResolutionHighLimit) { |
389 VideoFormat output_format = capture_format_; | 388 VideoFormat output_format = capture_format_; |
390 output_format.width *= 10; | 389 output_format.width *= 10; |
391 output_format.height *= 10; | 390 output_format.height *= 10; |
392 adapter_.OnOutputFormatRequest(output_format); | 391 adapter_.OnOutputFormatRequest(output_format); |
393 adapter_.AdaptFrameResolution(capture_format_.width, capture_format_.height, | 392 EXPECT_TRUE(adapter_.AdaptFrameResolution( |
394 0, &cropped_width_, &cropped_height_, | 393 capture_format_.width, capture_format_.height, 0, |
395 &out_width_, &out_height_); | 394 &cropped_width_, &cropped_height_, |
| 395 &out_width_, &out_height_)); |
396 EXPECT_EQ(capture_format_.width, cropped_width_); | 396 EXPECT_EQ(capture_format_.width, cropped_width_); |
397 EXPECT_EQ(capture_format_.height, cropped_height_); | 397 EXPECT_EQ(capture_format_.height, cropped_height_); |
398 EXPECT_EQ(capture_format_.width, out_width_); | 398 EXPECT_EQ(capture_format_.width, out_width_); |
399 EXPECT_EQ(capture_format_.height, out_height_); | 399 EXPECT_EQ(capture_format_.height, out_height_); |
400 } | 400 } |
401 | 401 |
402 // Adapt the frame resolution to be the same as capture resolution. Expect no | 402 // Adapt the frame resolution to be the same as capture resolution. Expect no |
403 // cropping or resolution change. | 403 // cropping or resolution change. |
404 TEST_F(VideoAdapterTest, AdaptFrameResolutionIdentical) { | 404 TEST_F(VideoAdapterTest, AdaptFrameResolutionIdentical) { |
405 adapter_.OnOutputFormatRequest(capture_format_); | 405 adapter_.OnOutputFormatRequest(capture_format_); |
406 adapter_.AdaptFrameResolution(capture_format_.width, capture_format_.height, | 406 EXPECT_TRUE(adapter_.AdaptFrameResolution( |
407 0, &cropped_width_, &cropped_height_, | 407 capture_format_.width, capture_format_.height, 0, |
408 &out_width_, &out_height_); | 408 &cropped_width_, &cropped_height_, |
| 409 &out_width_, &out_height_)); |
409 EXPECT_EQ(capture_format_.width, cropped_width_); | 410 EXPECT_EQ(capture_format_.width, cropped_width_); |
410 EXPECT_EQ(capture_format_.height, cropped_height_); | 411 EXPECT_EQ(capture_format_.height, cropped_height_); |
411 EXPECT_EQ(capture_format_.width, out_width_); | 412 EXPECT_EQ(capture_format_.width, out_width_); |
412 EXPECT_EQ(capture_format_.height, out_height_); | 413 EXPECT_EQ(capture_format_.height, out_height_); |
413 } | 414 } |
414 | 415 |
415 // Adapt the frame resolution to be a quarter of the capture resolution. Expect | 416 // Adapt the frame resolution to be a quarter of the capture resolution. Expect |
416 // no cropping, but a resolution change. | 417 // no cropping, but a resolution change. |
417 TEST_F(VideoAdapterTest, AdaptFrameResolutionQuarter) { | 418 TEST_F(VideoAdapterTest, AdaptFrameResolutionQuarter) { |
418 VideoFormat request_format = capture_format_; | 419 VideoFormat request_format = capture_format_; |
419 request_format.width /= 2; | 420 request_format.width /= 2; |
420 request_format.height /= 2; | 421 request_format.height /= 2; |
421 adapter_.OnOutputFormatRequest(request_format); | 422 adapter_.OnOutputFormatRequest(request_format); |
422 adapter_.AdaptFrameResolution(capture_format_.width, capture_format_.height, | 423 EXPECT_TRUE(adapter_.AdaptFrameResolution( |
423 0, &cropped_width_, &cropped_height_, | 424 capture_format_.width, capture_format_.height, 0, |
424 &out_width_, &out_height_); | 425 &cropped_width_, &cropped_height_, |
| 426 &out_width_, &out_height_)); |
425 EXPECT_EQ(capture_format_.width, cropped_width_); | 427 EXPECT_EQ(capture_format_.width, cropped_width_); |
426 EXPECT_EQ(capture_format_.height, cropped_height_); | 428 EXPECT_EQ(capture_format_.height, cropped_height_); |
427 EXPECT_EQ(request_format.width, out_width_); | 429 EXPECT_EQ(request_format.width, out_width_); |
428 EXPECT_EQ(request_format.height, out_height_); | 430 EXPECT_EQ(request_format.height, out_height_); |
429 } | 431 } |
430 | 432 |
431 // Adapt the pixel resolution to 0. Expect frame drop. | 433 // Adapt the pixel resolution to 0. Expect frame drop. |
432 TEST_F(VideoAdapterTest, AdaptFrameResolutionDrop) { | 434 TEST_F(VideoAdapterTest, AdaptFrameResolutionDrop) { |
433 VideoFormat output_format = capture_format_; | 435 VideoFormat output_format = capture_format_; |
434 output_format.width = 0; | 436 output_format.width = 0; |
435 output_format.height = 0; | 437 output_format.height = 0; |
436 adapter_.OnOutputFormatRequest(output_format); | 438 adapter_.OnOutputFormatRequest(output_format); |
437 adapter_.AdaptFrameResolution(capture_format_.width, capture_format_.height, | 439 EXPECT_FALSE(adapter_.AdaptFrameResolution( |
438 0, &cropped_width_, &cropped_height_, | 440 capture_format_.width, capture_format_.height, 0, |
439 &out_width_, &out_height_); | 441 &cropped_width_, &cropped_height_, |
440 EXPECT_EQ(0, out_width_); | 442 &out_width_, &out_height_)); |
441 EXPECT_EQ(0, out_height_); | |
442 } | 443 } |
443 | 444 |
444 // Adapt the frame resolution to be a quarter of the capture resolution at the | 445 // Adapt the frame resolution to be a quarter of the capture resolution at the |
445 // beginning. Expect no cropping but a resolution change. | 446 // beginning. Expect no cropping but a resolution change. |
446 TEST_F(VideoAdapterTest, AdaptResolution) { | 447 TEST_F(VideoAdapterTest, AdaptResolution) { |
447 VideoFormat request_format = capture_format_; | 448 VideoFormat request_format = capture_format_; |
448 request_format.width /= 2; | 449 request_format.width /= 2; |
449 request_format.height /= 2; | 450 request_format.height /= 2; |
450 adapter_.OnOutputFormatRequest(request_format); | 451 adapter_.OnOutputFormatRequest(request_format); |
451 EXPECT_EQ(CS_RUNNING, capturer_->Start(capture_format_)); | 452 EXPECT_EQ(CS_RUNNING, capturer_->Start(capture_format_)); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 capturer_->CaptureFrame(); | 497 capturer_->CaptureFrame(); |
497 | 498 |
498 // Verify all frames are dropped. | 499 // Verify all frames are dropped. |
499 VideoCapturerListener::Stats stats = listener_->GetStats(); | 500 VideoCapturerListener::Stats stats = listener_->GetStats(); |
500 EXPECT_GE(stats.captured_frames, 10); | 501 EXPECT_GE(stats.captured_frames, 10); |
501 EXPECT_EQ(stats.captured_frames, stats.dropped_frames); | 502 EXPECT_EQ(stats.captured_frames, stats.dropped_frames); |
502 } | 503 } |
503 | 504 |
504 TEST_F(VideoAdapterTest, TestOnOutputFormatRequest) { | 505 TEST_F(VideoAdapterTest, TestOnOutputFormatRequest) { |
505 VideoFormat format(640, 400, 0, 0); | 506 VideoFormat format(640, 400, 0, 0); |
506 adapter_.AdaptFrameResolution(640, 400, 0, | 507 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
507 &cropped_width_, &cropped_height_, | 508 &cropped_width_, &cropped_height_, |
508 &out_width_, &out_height_); | 509 &out_width_, &out_height_)); |
509 EXPECT_EQ(640, cropped_width_); | 510 EXPECT_EQ(640, cropped_width_); |
510 EXPECT_EQ(400, cropped_height_); | 511 EXPECT_EQ(400, cropped_height_); |
511 EXPECT_EQ(640, out_width_); | 512 EXPECT_EQ(640, out_width_); |
512 EXPECT_EQ(400, out_height_); | 513 EXPECT_EQ(400, out_height_); |
513 | 514 |
514 // Format request 640x400. | 515 // Format request 640x400. |
515 format.height = 400; | 516 format.height = 400; |
516 adapter_.OnOutputFormatRequest(format); | 517 adapter_.OnOutputFormatRequest(format); |
517 adapter_.AdaptFrameResolution(640, 400, 0, | 518 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
518 &cropped_width_, &cropped_height_, | 519 &cropped_width_, &cropped_height_, |
519 &out_width_, &out_height_); | 520 &out_width_, &out_height_)); |
520 EXPECT_EQ(640, cropped_width_); | 521 EXPECT_EQ(640, cropped_width_); |
521 EXPECT_EQ(400, cropped_height_); | 522 EXPECT_EQ(400, cropped_height_); |
522 EXPECT_EQ(640, out_width_); | 523 EXPECT_EQ(640, out_width_); |
523 EXPECT_EQ(400, out_height_); | 524 EXPECT_EQ(400, out_height_); |
524 | 525 |
525 // Request 1280x720, higher than input, but aspect 16:9. Expect cropping but | 526 // Request 1280x720, higher than input, but aspect 16:9. Expect cropping but |
526 // no scaling. | 527 // no scaling. |
527 format.width = 1280; | 528 format.width = 1280; |
528 format.height = 720; | 529 format.height = 720; |
529 adapter_.OnOutputFormatRequest(format); | 530 adapter_.OnOutputFormatRequest(format); |
530 adapter_.AdaptFrameResolution(640, 400, 0, | 531 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
531 &cropped_width_, &cropped_height_, | 532 &cropped_width_, &cropped_height_, |
532 &out_width_, &out_height_); | 533 &out_width_, &out_height_)); |
533 EXPECT_EQ(640, cropped_width_); | 534 EXPECT_EQ(640, cropped_width_); |
534 EXPECT_EQ(360, cropped_height_); | 535 EXPECT_EQ(360, cropped_height_); |
535 EXPECT_EQ(640, out_width_); | 536 EXPECT_EQ(640, out_width_); |
536 EXPECT_EQ(360, out_height_); | 537 EXPECT_EQ(360, out_height_); |
537 | 538 |
538 // Request 0x0. | 539 // Request 0x0. |
539 format.width = 0; | 540 format.width = 0; |
540 format.height = 0; | 541 format.height = 0; |
541 adapter_.OnOutputFormatRequest(format); | 542 adapter_.OnOutputFormatRequest(format); |
542 adapter_.AdaptFrameResolution(640, 400, 0, | 543 EXPECT_FALSE(adapter_.AdaptFrameResolution(640, 400, 0, |
543 &cropped_width_, &cropped_height_, | 544 &cropped_width_, &cropped_height_, |
544 &out_width_, &out_height_); | 545 &out_width_, &out_height_)); |
545 EXPECT_EQ(0, out_width_); | |
546 EXPECT_EQ(0, out_height_); | |
547 | 546 |
548 // Request 320x200. Expect scaling, but no cropping. | 547 // Request 320x200. Expect scaling, but no cropping. |
549 format.width = 320; | 548 format.width = 320; |
550 format.height = 200; | 549 format.height = 200; |
551 adapter_.OnOutputFormatRequest(format); | 550 adapter_.OnOutputFormatRequest(format); |
552 adapter_.AdaptFrameResolution(640, 400, 0, | 551 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
553 &cropped_width_, &cropped_height_, | 552 &cropped_width_, &cropped_height_, |
554 &out_width_, &out_height_); | 553 &out_width_, &out_height_)); |
555 EXPECT_EQ(640, cropped_width_); | 554 EXPECT_EQ(640, cropped_width_); |
556 EXPECT_EQ(400, cropped_height_); | 555 EXPECT_EQ(400, cropped_height_); |
557 EXPECT_EQ(320, out_width_); | 556 EXPECT_EQ(320, out_width_); |
558 EXPECT_EQ(200, out_height_); | 557 EXPECT_EQ(200, out_height_); |
559 | 558 |
560 // Request resolution close to 2/3 scale. Expect adapt down. Scaling to 2/3 | 559 // Request resolution close to 2/3 scale. Expect adapt down. Scaling to 2/3 |
561 // is not optimized and not allowed, therefore 1/2 scaling will be used | 560 // is not optimized and not allowed, therefore 1/2 scaling will be used |
562 // instead. | 561 // instead. |
563 format.width = 424; | 562 format.width = 424; |
564 format.height = 265; | 563 format.height = 265; |
565 adapter_.OnOutputFormatRequest(format); | 564 adapter_.OnOutputFormatRequest(format); |
566 adapter_.AdaptFrameResolution(640, 400, 0, | 565 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
567 &cropped_width_, &cropped_height_, | 566 &cropped_width_, &cropped_height_, |
568 &out_width_, &out_height_); | 567 &out_width_, &out_height_)); |
569 EXPECT_EQ(640, cropped_width_); | 568 EXPECT_EQ(640, cropped_width_); |
570 EXPECT_EQ(400, cropped_height_); | 569 EXPECT_EQ(400, cropped_height_); |
571 EXPECT_EQ(320, out_width_); | 570 EXPECT_EQ(320, out_width_); |
572 EXPECT_EQ(200, out_height_); | 571 EXPECT_EQ(200, out_height_); |
573 | 572 |
574 // Request resolution of 3 / 8. Expect adapt down. | 573 // Request resolution of 3 / 8. Expect adapt down. |
575 format.width = 640 * 3 / 8; | 574 format.width = 640 * 3 / 8; |
576 format.height = 400 * 3 / 8; | 575 format.height = 400 * 3 / 8; |
577 adapter_.OnOutputFormatRequest(format); | 576 adapter_.OnOutputFormatRequest(format); |
578 adapter_.AdaptFrameResolution(640, 400, 0, | 577 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
579 &cropped_width_, &cropped_height_, | 578 &cropped_width_, &cropped_height_, |
580 &out_width_, &out_height_); | 579 &out_width_, &out_height_)); |
581 EXPECT_EQ(640, cropped_width_); | 580 EXPECT_EQ(640, cropped_width_); |
582 EXPECT_EQ(400, cropped_height_); | 581 EXPECT_EQ(400, cropped_height_); |
583 EXPECT_EQ(640 * 3 / 8, out_width_); | 582 EXPECT_EQ(640 * 3 / 8, out_width_); |
584 EXPECT_EQ(400 * 3 / 8, out_height_); | 583 EXPECT_EQ(400 * 3 / 8, out_height_); |
585 | 584 |
586 // Switch back up. Expect adapt. | 585 // Switch back up. Expect adapt. |
587 format.width = 320; | 586 format.width = 320; |
588 format.height = 200; | 587 format.height = 200; |
589 adapter_.OnOutputFormatRequest(format); | 588 adapter_.OnOutputFormatRequest(format); |
590 adapter_.AdaptFrameResolution(640, 400, 0, | 589 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
591 &cropped_width_, &cropped_height_, | 590 &cropped_width_, &cropped_height_, |
592 &out_width_, &out_height_); | 591 &out_width_, &out_height_)); |
593 EXPECT_EQ(640, cropped_width_); | 592 EXPECT_EQ(640, cropped_width_); |
594 EXPECT_EQ(400, cropped_height_); | 593 EXPECT_EQ(400, cropped_height_); |
595 EXPECT_EQ(320, out_width_); | 594 EXPECT_EQ(320, out_width_); |
596 EXPECT_EQ(200, out_height_); | 595 EXPECT_EQ(200, out_height_); |
597 | 596 |
598 // Format request 480x300. | 597 // Format request 480x300. |
599 format.width = 480; | 598 format.width = 480; |
600 format.height = 300; | 599 format.height = 300; |
601 adapter_.OnOutputFormatRequest(format); | 600 adapter_.OnOutputFormatRequest(format); |
602 adapter_.AdaptFrameResolution(640, 400, 0, | 601 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
603 &cropped_width_, &cropped_height_, | 602 &cropped_width_, &cropped_height_, |
604 &out_width_, &out_height_); | 603 &out_width_, &out_height_)); |
605 EXPECT_EQ(640, cropped_width_); | 604 EXPECT_EQ(640, cropped_width_); |
606 EXPECT_EQ(400, cropped_height_); | 605 EXPECT_EQ(400, cropped_height_); |
607 EXPECT_EQ(480, out_width_); | 606 EXPECT_EQ(480, out_width_); |
608 EXPECT_EQ(300, out_height_); | 607 EXPECT_EQ(300, out_height_); |
609 } | 608 } |
610 | 609 |
611 TEST_F(VideoAdapterTest, TestViewRequestPlusCameraSwitch) { | 610 TEST_F(VideoAdapterTest, TestViewRequestPlusCameraSwitch) { |
612 // Start at HD. | 611 // Start at HD. |
613 VideoFormat format(1280, 720, 0, 0); | 612 VideoFormat format(1280, 720, 0, 0); |
614 adapter_.AdaptFrameResolution(1280, 720, 0, | 613 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
615 &cropped_width_, &cropped_height_, | 614 &cropped_width_, &cropped_height_, |
616 &out_width_, &out_height_); | 615 &out_width_, &out_height_)); |
617 EXPECT_EQ(1280, cropped_width_); | 616 EXPECT_EQ(1280, cropped_width_); |
618 EXPECT_EQ(720, cropped_height_); | 617 EXPECT_EQ(720, cropped_height_); |
619 EXPECT_EQ(1280, out_width_); | 618 EXPECT_EQ(1280, out_width_); |
620 EXPECT_EQ(720, out_height_); | 619 EXPECT_EQ(720, out_height_); |
621 | 620 |
622 // Format request for VGA. | 621 // Format request for VGA. |
623 format.width = 640; | 622 format.width = 640; |
624 format.height = 360; | 623 format.height = 360; |
625 adapter_.OnOutputFormatRequest(format); | 624 adapter_.OnOutputFormatRequest(format); |
626 adapter_.AdaptFrameResolution(1280, 720, 0, | 625 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
627 &cropped_width_, &cropped_height_, | 626 &cropped_width_, &cropped_height_, |
628 &out_width_, &out_height_); | 627 &out_width_, &out_height_)); |
629 EXPECT_EQ(1280, cropped_width_); | 628 EXPECT_EQ(1280, cropped_width_); |
630 EXPECT_EQ(720, cropped_height_); | 629 EXPECT_EQ(720, cropped_height_); |
631 EXPECT_EQ(640, out_width_); | 630 EXPECT_EQ(640, out_width_); |
632 EXPECT_EQ(360, out_height_); | 631 EXPECT_EQ(360, out_height_); |
633 | 632 |
634 // Now, the camera reopens at VGA. | 633 // Now, the camera reopens at VGA. |
635 // Both the frame and the output format should be 640x360. | 634 // Both the frame and the output format should be 640x360. |
636 adapter_.AdaptFrameResolution(640, 360, 0, | 635 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 360, 0, |
637 &cropped_width_, &cropped_height_, | 636 &cropped_width_, &cropped_height_, |
638 &out_width_, &out_height_); | 637 &out_width_, &out_height_)); |
639 EXPECT_EQ(640, cropped_width_); | 638 EXPECT_EQ(640, cropped_width_); |
640 EXPECT_EQ(360, cropped_height_); | 639 EXPECT_EQ(360, cropped_height_); |
641 EXPECT_EQ(640, out_width_); | 640 EXPECT_EQ(640, out_width_); |
642 EXPECT_EQ(360, out_height_); | 641 EXPECT_EQ(360, out_height_); |
643 | 642 |
644 // And another view request comes in for 640x360, which should have no | 643 // And another view request comes in for 640x360, which should have no |
645 // real impact. | 644 // real impact. |
646 adapter_.OnOutputFormatRequest(format); | 645 adapter_.OnOutputFormatRequest(format); |
647 adapter_.AdaptFrameResolution(640, 360, 0, | 646 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 360, 0, |
648 &cropped_width_, &cropped_height_, | 647 &cropped_width_, &cropped_height_, |
649 &out_width_, &out_height_); | 648 &out_width_, &out_height_)); |
650 EXPECT_EQ(640, cropped_width_); | 649 EXPECT_EQ(640, cropped_width_); |
651 EXPECT_EQ(360, cropped_height_); | 650 EXPECT_EQ(360, cropped_height_); |
652 EXPECT_EQ(640, out_width_); | 651 EXPECT_EQ(640, out_width_); |
653 EXPECT_EQ(360, out_height_); | 652 EXPECT_EQ(360, out_height_); |
654 } | 653 } |
655 | 654 |
656 TEST_F(VideoAdapterTest, TestVGAWidth) { | 655 TEST_F(VideoAdapterTest, TestVGAWidth) { |
657 // Reqeuested Output format is 640x360. | 656 // Reqeuested Output format is 640x360. |
658 VideoFormat format(640, 360, 0, FOURCC_I420); | 657 VideoFormat format(640, 360, 0, FOURCC_I420); |
659 adapter_.OnOutputFormatRequest(format); | 658 adapter_.OnOutputFormatRequest(format); |
660 | 659 |
661 adapter_.AdaptFrameResolution(640, 480, 0, | 660 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
662 &cropped_width_, &cropped_height_, | 661 &cropped_width_, &cropped_height_, |
663 &out_width_, &out_height_); | 662 &out_width_, &out_height_)); |
664 // Expect cropping. | 663 // Expect cropping. |
665 EXPECT_EQ(640, cropped_width_); | 664 EXPECT_EQ(640, cropped_width_); |
666 EXPECT_EQ(360, cropped_height_); | 665 EXPECT_EQ(360, cropped_height_); |
667 EXPECT_EQ(640, out_width_); | 666 EXPECT_EQ(640, out_width_); |
668 EXPECT_EQ(360, out_height_); | 667 EXPECT_EQ(360, out_height_); |
669 | 668 |
670 // But if frames come in at 640x360, we shouldn't adapt them down. | 669 // But if frames come in at 640x360, we shouldn't adapt them down. |
671 adapter_.AdaptFrameResolution(640, 360, 0, | 670 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 360, 0, |
672 &cropped_width_, &cropped_height_, | 671 &cropped_width_, &cropped_height_, |
673 &out_width_, &out_height_); | 672 &out_width_, &out_height_)); |
674 EXPECT_EQ(640, cropped_width_); | 673 EXPECT_EQ(640, cropped_width_); |
675 EXPECT_EQ(360, cropped_height_); | 674 EXPECT_EQ(360, cropped_height_); |
676 EXPECT_EQ(640, out_width_); | 675 EXPECT_EQ(640, out_width_); |
677 EXPECT_EQ(360, out_height_); | 676 EXPECT_EQ(360, out_height_); |
678 | 677 |
679 adapter_.AdaptFrameResolution(640, 480, 0, | 678 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
680 &cropped_width_, &cropped_height_, | 679 &cropped_width_, &cropped_height_, |
681 &out_width_, &out_height_); | 680 &out_width_, &out_height_)); |
682 EXPECT_EQ(640, cropped_width_); | 681 EXPECT_EQ(640, cropped_width_); |
683 EXPECT_EQ(360, cropped_height_); | 682 EXPECT_EQ(360, cropped_height_); |
684 EXPECT_EQ(640, out_width_); | 683 EXPECT_EQ(640, out_width_); |
685 EXPECT_EQ(360, out_height_); | 684 EXPECT_EQ(360, out_height_); |
686 } | 685 } |
687 | 686 |
688 TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { | 687 TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
689 adapter_.AdaptFrameResolution(1280, 720, 0, | 688 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
690 &cropped_width_, &cropped_height_, | 689 &cropped_width_, &cropped_height_, |
691 &out_width_, &out_height_); | 690 &out_width_, &out_height_)); |
692 EXPECT_EQ(1280, cropped_width_); | 691 EXPECT_EQ(1280, cropped_width_); |
693 EXPECT_EQ(720, cropped_height_); | 692 EXPECT_EQ(720, cropped_height_); |
694 EXPECT_EQ(1280, out_width_); | 693 EXPECT_EQ(1280, out_width_); |
695 EXPECT_EQ(720, out_height_); | 694 EXPECT_EQ(720, out_height_); |
696 | 695 |
697 // Adapt down one step. | 696 // Adapt down one step. |
698 adapter_.OnResolutionRequest(rtc::Optional<int>(1280 * 720 - 1), | 697 adapter_.OnResolutionRequest(rtc::Optional<int>(1280 * 720 - 1), |
699 rtc::Optional<int>()); | 698 rtc::Optional<int>()); |
700 adapter_.AdaptFrameResolution(1280, 720, 0, | 699 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
701 &cropped_width_, &cropped_height_, | 700 &cropped_width_, &cropped_height_, |
702 &out_width_, &out_height_); | 701 &out_width_, &out_height_)); |
703 EXPECT_EQ(1280, cropped_width_); | 702 EXPECT_EQ(1280, cropped_width_); |
704 EXPECT_EQ(720, cropped_height_); | 703 EXPECT_EQ(720, cropped_height_); |
705 EXPECT_EQ(960, out_width_); | 704 EXPECT_EQ(960, out_width_); |
706 EXPECT_EQ(540, out_height_); | 705 EXPECT_EQ(540, out_height_); |
707 | 706 |
708 // Adapt down one step more. | 707 // Adapt down one step more. |
709 adapter_.OnResolutionRequest(rtc::Optional<int>(960 * 540 - 1), | 708 adapter_.OnResolutionRequest(rtc::Optional<int>(960 * 540 - 1), |
710 rtc::Optional<int>()); | 709 rtc::Optional<int>()); |
711 adapter_.AdaptFrameResolution(1280, 720, 0, | 710 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
712 &cropped_width_, &cropped_height_, | 711 &cropped_width_, &cropped_height_, |
713 &out_width_, &out_height_); | 712 &out_width_, &out_height_)); |
714 EXPECT_EQ(1280, cropped_width_); | 713 EXPECT_EQ(1280, cropped_width_); |
715 EXPECT_EQ(720, cropped_height_); | 714 EXPECT_EQ(720, cropped_height_); |
716 EXPECT_EQ(640, out_width_); | 715 EXPECT_EQ(640, out_width_); |
717 EXPECT_EQ(360, out_height_); | 716 EXPECT_EQ(360, out_height_); |
718 | 717 |
719 // Adapt down one step more. | 718 // Adapt down one step more. |
720 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 719 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
721 rtc::Optional<int>()); | 720 rtc::Optional<int>()); |
722 adapter_.AdaptFrameResolution(1280, 720, 0, | 721 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
723 &cropped_width_, &cropped_height_, | 722 &cropped_width_, &cropped_height_, |
724 &out_width_, &out_height_); | 723 &out_width_, &out_height_)); |
725 EXPECT_EQ(1280, cropped_width_); | 724 EXPECT_EQ(1280, cropped_width_); |
726 EXPECT_EQ(720, cropped_height_); | 725 EXPECT_EQ(720, cropped_height_); |
727 EXPECT_EQ(480, out_width_); | 726 EXPECT_EQ(480, out_width_); |
728 EXPECT_EQ(270, out_height_); | 727 EXPECT_EQ(270, out_height_); |
729 | 728 |
730 // Adapt up one step. | 729 // Adapt up one step. |
731 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 730 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
732 rtc::Optional<int>(480 * 270)); | 731 rtc::Optional<int>(480 * 270)); |
733 adapter_.AdaptFrameResolution(1280, 720, 0, | 732 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
734 &cropped_width_, &cropped_height_, | 733 &cropped_width_, &cropped_height_, |
735 &out_width_, &out_height_); | 734 &out_width_, &out_height_)); |
736 EXPECT_EQ(1280, cropped_width_); | 735 EXPECT_EQ(1280, cropped_width_); |
737 EXPECT_EQ(720, cropped_height_); | 736 EXPECT_EQ(720, cropped_height_); |
738 EXPECT_EQ(640, out_width_); | 737 EXPECT_EQ(640, out_width_); |
739 EXPECT_EQ(360, out_height_); | 738 EXPECT_EQ(360, out_height_); |
740 | 739 |
741 // Adapt up one step more. | 740 // Adapt up one step more. |
742 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 741 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
743 rtc::Optional<int>(640 * 360)); | 742 rtc::Optional<int>(640 * 360)); |
744 adapter_.AdaptFrameResolution(1280, 720, 0, | 743 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
745 &cropped_width_, &cropped_height_, | 744 &cropped_width_, &cropped_height_, |
746 &out_width_, &out_height_); | 745 &out_width_, &out_height_)); |
747 EXPECT_EQ(1280, cropped_width_); | 746 EXPECT_EQ(1280, cropped_width_); |
748 EXPECT_EQ(720, cropped_height_); | 747 EXPECT_EQ(720, cropped_height_); |
749 EXPECT_EQ(960, out_width_); | 748 EXPECT_EQ(960, out_width_); |
750 EXPECT_EQ(540, out_height_); | 749 EXPECT_EQ(540, out_height_); |
751 | 750 |
752 // Adapt up one step more. | 751 // Adapt up one step more. |
753 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 752 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
754 rtc::Optional<int>(960 * 720)); | 753 rtc::Optional<int>(960 * 720)); |
755 adapter_.AdaptFrameResolution(1280, 720, 0, | 754 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
756 &cropped_width_, &cropped_height_, | 755 &cropped_width_, &cropped_height_, |
757 &out_width_, &out_height_); | 756 &out_width_, &out_height_)); |
758 EXPECT_EQ(1280, cropped_width_); | 757 EXPECT_EQ(1280, cropped_width_); |
759 EXPECT_EQ(720, cropped_height_); | 758 EXPECT_EQ(720, cropped_height_); |
760 EXPECT_EQ(1280, out_width_); | 759 EXPECT_EQ(1280, out_width_); |
761 EXPECT_EQ(720, out_height_); | 760 EXPECT_EQ(720, out_height_); |
762 } | 761 } |
763 | 762 |
764 TEST_F(VideoAdapterTest, TestOnResolutionRequestMaxZero) { | 763 TEST_F(VideoAdapterTest, TestOnResolutionRequestMaxZero) { |
765 adapter_.AdaptFrameResolution(1280, 720, 0, | 764 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
766 &cropped_width_, &cropped_height_, | 765 &cropped_width_, &cropped_height_, |
767 &out_width_, &out_height_); | 766 &out_width_, &out_height_)); |
768 EXPECT_EQ(1280, cropped_width_); | 767 EXPECT_EQ(1280, cropped_width_); |
769 EXPECT_EQ(720, cropped_height_); | 768 EXPECT_EQ(720, cropped_height_); |
770 EXPECT_EQ(1280, out_width_); | 769 EXPECT_EQ(1280, out_width_); |
771 EXPECT_EQ(720, out_height_); | 770 EXPECT_EQ(720, out_height_); |
772 | 771 |
773 adapter_.OnResolutionRequest(rtc::Optional<int>(0), rtc::Optional<int>()); | 772 adapter_.OnResolutionRequest(rtc::Optional<int>(0), rtc::Optional<int>()); |
774 adapter_.AdaptFrameResolution(1280, 720, 0, | 773 EXPECT_FALSE(adapter_.AdaptFrameResolution(1280, 720, 0, |
775 &cropped_width_, &cropped_height_, | 774 &cropped_width_, &cropped_height_, |
776 &out_width_, &out_height_); | 775 &out_width_, &out_height_)); |
777 EXPECT_EQ(0, out_width_); | |
778 EXPECT_EQ(0, out_height_); | |
779 } | 776 } |
780 | 777 |
781 TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { | 778 TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { |
782 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 779 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
783 rtc::Optional<int>()); | 780 rtc::Optional<int>()); |
784 adapter_.AdaptFrameResolution(1280, 720, 0, | 781 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
785 &cropped_width_, &cropped_height_, | 782 &cropped_width_, &cropped_height_, |
786 &out_width_, &out_height_); | 783 &out_width_, &out_height_)); |
787 EXPECT_EQ(1280, cropped_width_); | 784 EXPECT_EQ(1280, cropped_width_); |
788 EXPECT_EQ(720, cropped_height_); | 785 EXPECT_EQ(720, cropped_height_); |
789 EXPECT_EQ(480, out_width_); | 786 EXPECT_EQ(480, out_width_); |
790 EXPECT_EQ(270, out_height_); | 787 EXPECT_EQ(270, out_height_); |
791 | 788 |
792 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 789 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
793 rtc::Optional<int>(960 * 720)); | 790 rtc::Optional<int>(960 * 720)); |
794 adapter_.AdaptFrameResolution(1280, 720, 0, | 791 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
795 &cropped_width_, &cropped_height_, | 792 &cropped_width_, &cropped_height_, |
796 &out_width_, &out_height_); | 793 &out_width_, &out_height_)); |
797 EXPECT_EQ(1280, cropped_width_); | 794 EXPECT_EQ(1280, cropped_width_); |
798 EXPECT_EQ(720, cropped_height_); | 795 EXPECT_EQ(720, cropped_height_); |
799 EXPECT_EQ(1280, out_width_); | 796 EXPECT_EQ(1280, out_width_); |
800 EXPECT_EQ(720, out_height_); | 797 EXPECT_EQ(720, out_height_); |
801 } | 798 } |
802 | 799 |
803 TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { | 800 TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { |
804 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 801 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
805 rtc::Optional<int>()); | 802 rtc::Optional<int>()); |
806 adapter_.AdaptFrameResolution(1280, 720, 0, | 803 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
807 &cropped_width_, &cropped_height_, | 804 &cropped_width_, &cropped_height_, |
808 &out_width_, &out_height_); | 805 &out_width_, &out_height_)); |
809 EXPECT_EQ(1280, cropped_width_); | 806 EXPECT_EQ(1280, cropped_width_); |
810 EXPECT_EQ(720, cropped_height_); | 807 EXPECT_EQ(720, cropped_height_); |
811 EXPECT_EQ(480, out_width_); | 808 EXPECT_EQ(480, out_width_); |
812 EXPECT_EQ(270, out_height_); | 809 EXPECT_EQ(270, out_height_); |
813 | 810 |
814 VideoFormat new_format(640, 360, 0, FOURCC_I420); | 811 VideoFormat new_format(640, 360, 0, FOURCC_I420); |
815 adapter_.OnOutputFormatRequest(new_format); | 812 adapter_.OnOutputFormatRequest(new_format); |
816 adapter_.AdaptFrameResolution(1280, 720, 0, | 813 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
817 &cropped_width_, &cropped_height_, | 814 &cropped_width_, &cropped_height_, |
818 &out_width_, &out_height_); | 815 &out_width_, &out_height_)); |
819 EXPECT_EQ(1280, cropped_width_); | 816 EXPECT_EQ(1280, cropped_width_); |
820 EXPECT_EQ(720, cropped_height_); | 817 EXPECT_EQ(720, cropped_height_); |
821 EXPECT_EQ(480, out_width_); | 818 EXPECT_EQ(480, out_width_); |
822 EXPECT_EQ(270, out_height_); | 819 EXPECT_EQ(270, out_height_); |
823 | 820 |
824 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 821 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
825 rtc::Optional<int>(960 * 720)); | 822 rtc::Optional<int>(960 * 720)); |
826 adapter_.AdaptFrameResolution(1280, 720, 0, | 823 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
827 &cropped_width_, &cropped_height_, | 824 &cropped_width_, &cropped_height_, |
828 &out_width_, &out_height_); | 825 &out_width_, &out_height_)); |
829 EXPECT_EQ(1280, cropped_width_); | 826 EXPECT_EQ(1280, cropped_width_); |
830 EXPECT_EQ(720, cropped_height_); | 827 EXPECT_EQ(720, cropped_height_); |
831 EXPECT_EQ(640, out_width_); | 828 EXPECT_EQ(640, out_width_); |
832 EXPECT_EQ(360, out_height_); | 829 EXPECT_EQ(360, out_height_); |
833 } | 830 } |
834 | 831 |
835 TEST_F(VideoAdapterTest, TestOnResolutionRequestReset) { | 832 TEST_F(VideoAdapterTest, TestOnResolutionRequestReset) { |
836 adapter_.AdaptFrameResolution(1280, 720, 0, | 833 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
837 &cropped_width_, &cropped_height_, | 834 &cropped_width_, &cropped_height_, |
838 &out_width_, &out_height_); | 835 &out_width_, &out_height_)); |
839 EXPECT_EQ(1280, cropped_width_); | 836 EXPECT_EQ(1280, cropped_width_); |
840 EXPECT_EQ(720, cropped_height_); | 837 EXPECT_EQ(720, cropped_height_); |
841 EXPECT_EQ(1280, out_width_); | 838 EXPECT_EQ(1280, out_width_); |
842 EXPECT_EQ(720, out_height_); | 839 EXPECT_EQ(720, out_height_); |
843 | 840 |
844 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 841 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
845 rtc::Optional<int>()); | 842 rtc::Optional<int>()); |
846 adapter_.AdaptFrameResolution(1280, 720, 0, | 843 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
847 &cropped_width_, &cropped_height_, | 844 &cropped_width_, &cropped_height_, |
848 &out_width_, &out_height_); | 845 &out_width_, &out_height_)); |
849 EXPECT_EQ(1280, cropped_width_); | 846 EXPECT_EQ(1280, cropped_width_); |
850 EXPECT_EQ(720, cropped_height_); | 847 EXPECT_EQ(720, cropped_height_); |
851 EXPECT_EQ(480, out_width_); | 848 EXPECT_EQ(480, out_width_); |
852 EXPECT_EQ(270, out_height_); | 849 EXPECT_EQ(270, out_height_); |
853 | 850 |
854 adapter_.OnResolutionRequest(rtc::Optional<int>(), rtc::Optional<int>()); | 851 adapter_.OnResolutionRequest(rtc::Optional<int>(), rtc::Optional<int>()); |
855 adapter_.AdaptFrameResolution(1280, 720, 0, | 852 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
856 &cropped_width_, &cropped_height_, | 853 &cropped_width_, &cropped_height_, |
857 &out_width_, &out_height_); | 854 &out_width_, &out_height_)); |
858 EXPECT_EQ(1280, cropped_width_); | 855 EXPECT_EQ(1280, cropped_width_); |
859 EXPECT_EQ(720, cropped_height_); | 856 EXPECT_EQ(720, cropped_height_); |
860 EXPECT_EQ(1280, out_width_); | 857 EXPECT_EQ(1280, out_width_); |
861 EXPECT_EQ(720, out_height_); | 858 EXPECT_EQ(720, out_height_); |
862 } | 859 } |
863 | 860 |
864 TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { | 861 TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
865 // Ask for 640x360 (16:9 aspect). | 862 // Ask for 640x360 (16:9 aspect). |
866 adapter_.OnOutputFormatRequest(VideoFormat(640, 360, 0, FOURCC_I420)); | 863 adapter_.OnOutputFormatRequest(VideoFormat(640, 360, 0, FOURCC_I420)); |
867 // Send 640x480 (4:3 aspect). | 864 // Send 640x480 (4:3 aspect). |
868 adapter_.AdaptFrameResolution(640, 480, 0, | 865 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
869 &cropped_width_, &cropped_height_, | 866 &cropped_width_, &cropped_height_, |
870 &out_width_, &out_height_); | 867 &out_width_, &out_height_)); |
871 // Expect cropping to 16:9 format and no scaling. | 868 // Expect cropping to 16:9 format and no scaling. |
872 EXPECT_EQ(640, cropped_width_); | 869 EXPECT_EQ(640, cropped_width_); |
873 EXPECT_EQ(360, cropped_height_); | 870 EXPECT_EQ(360, cropped_height_); |
874 EXPECT_EQ(640, out_width_); | 871 EXPECT_EQ(640, out_width_); |
875 EXPECT_EQ(360, out_height_); | 872 EXPECT_EQ(360, out_height_); |
876 | 873 |
877 // Adapt down one step. | 874 // Adapt down one step. |
878 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 875 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
879 rtc::Optional<int>()); | 876 rtc::Optional<int>()); |
880 // Expect cropping to 16:9 format and 3/4 scaling. | 877 // Expect cropping to 16:9 format and 3/4 scaling. |
881 adapter_.AdaptFrameResolution(640, 480, 0, | 878 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
882 &cropped_width_, &cropped_height_, | 879 &cropped_width_, &cropped_height_, |
883 &out_width_, &out_height_); | 880 &out_width_, &out_height_)); |
884 EXPECT_EQ(640, cropped_width_); | 881 EXPECT_EQ(640, cropped_width_); |
885 EXPECT_EQ(360, cropped_height_); | 882 EXPECT_EQ(360, cropped_height_); |
886 EXPECT_EQ(480, out_width_); | 883 EXPECT_EQ(480, out_width_); |
887 EXPECT_EQ(270, out_height_); | 884 EXPECT_EQ(270, out_height_); |
888 | 885 |
889 // Adapt down one step more. | 886 // Adapt down one step more. |
890 adapter_.OnResolutionRequest(rtc::Optional<int>(480 * 270 - 1), | 887 adapter_.OnResolutionRequest(rtc::Optional<int>(480 * 270 - 1), |
891 rtc::Optional<int>()); | 888 rtc::Optional<int>()); |
892 // Expect cropping to 16:9 format and 1/2 scaling. | 889 // Expect cropping to 16:9 format and 1/2 scaling. |
893 adapter_.AdaptFrameResolution(640, 480, 0, | 890 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
894 &cropped_width_, &cropped_height_, | 891 &cropped_width_, &cropped_height_, |
895 &out_width_, &out_height_); | 892 &out_width_, &out_height_)); |
896 EXPECT_EQ(640, cropped_width_); | 893 EXPECT_EQ(640, cropped_width_); |
897 EXPECT_EQ(360, cropped_height_); | 894 EXPECT_EQ(360, cropped_height_); |
898 EXPECT_EQ(320, out_width_); | 895 EXPECT_EQ(320, out_width_); |
899 EXPECT_EQ(180, out_height_); | 896 EXPECT_EQ(180, out_height_); |
900 | 897 |
901 // Adapt up one step. | 898 // Adapt up one step. |
902 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 899 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
903 rtc::Optional<int>(320 * 180)); | 900 rtc::Optional<int>(320 * 180)); |
904 // Expect cropping to 16:9 format and 3/4 scaling. | 901 // Expect cropping to 16:9 format and 3/4 scaling. |
905 adapter_.AdaptFrameResolution(640, 480, 0, | 902 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
906 &cropped_width_, &cropped_height_, | 903 &cropped_width_, &cropped_height_, |
907 &out_width_, &out_height_); | 904 &out_width_, &out_height_)); |
908 EXPECT_EQ(640, cropped_width_); | 905 EXPECT_EQ(640, cropped_width_); |
909 EXPECT_EQ(360, cropped_height_); | 906 EXPECT_EQ(360, cropped_height_); |
910 EXPECT_EQ(480, out_width_); | 907 EXPECT_EQ(480, out_width_); |
911 EXPECT_EQ(270, out_height_); | 908 EXPECT_EQ(270, out_height_); |
912 | 909 |
913 // Adapt up one step more. | 910 // Adapt up one step more. |
914 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 911 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
915 rtc::Optional<int>(480 * 270)); | 912 rtc::Optional<int>(480 * 270)); |
916 // Expect cropping to 16:9 format and no scaling. | 913 // Expect cropping to 16:9 format and no scaling. |
917 adapter_.AdaptFrameResolution(640, 480, 0, | 914 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
918 &cropped_width_, &cropped_height_, | 915 &cropped_width_, &cropped_height_, |
919 &out_width_, &out_height_); | 916 &out_width_, &out_height_)); |
920 EXPECT_EQ(640, cropped_width_); | 917 EXPECT_EQ(640, cropped_width_); |
921 EXPECT_EQ(360, cropped_height_); | 918 EXPECT_EQ(360, cropped_height_); |
922 EXPECT_EQ(640, out_width_); | 919 EXPECT_EQ(640, out_width_); |
923 EXPECT_EQ(360, out_height_); | 920 EXPECT_EQ(360, out_height_); |
924 | 921 |
925 // Try to adapt up one step more. | 922 // Try to adapt up one step more. |
926 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 923 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
927 rtc::Optional<int>(640 * 360)); | 924 rtc::Optional<int>(640 * 360)); |
928 // Expect cropping to 16:9 format and no scaling. | 925 // Expect cropping to 16:9 format and no scaling. |
929 adapter_.AdaptFrameResolution(640, 480, 0, | 926 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
930 &cropped_width_, &cropped_height_, | 927 &cropped_width_, &cropped_height_, |
931 &out_width_, &out_height_); | 928 &out_width_, &out_height_)); |
932 EXPECT_EQ(640, cropped_width_); | 929 EXPECT_EQ(640, cropped_width_); |
933 EXPECT_EQ(360, cropped_height_); | 930 EXPECT_EQ(360, cropped_height_); |
934 EXPECT_EQ(640, out_width_); | 931 EXPECT_EQ(640, out_width_); |
935 EXPECT_EQ(360, out_height_); | 932 EXPECT_EQ(360, out_height_); |
936 } | 933 } |
937 | 934 |
938 TEST_F(VideoAdapterTest, TestCroppingOddResolution) { | 935 TEST_F(VideoAdapterTest, TestCroppingOddResolution) { |
939 // Ask for 640x360 (16:9 aspect), with 3/16 scaling. | 936 // Ask for 640x360 (16:9 aspect), with 3/16 scaling. |
940 adapter_.OnOutputFormatRequest( | 937 adapter_.OnOutputFormatRequest( |
941 VideoFormat(640, 360, 0, FOURCC_I420)); | 938 VideoFormat(640, 360, 0, FOURCC_I420)); |
942 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 * 3 / 16 * 3 / 16), | 939 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 * 3 / 16 * 3 / 16), |
943 rtc::Optional<int>()); | 940 rtc::Optional<int>()); |
944 | 941 |
945 // Send 640x480 (4:3 aspect). | 942 // Send 640x480 (4:3 aspect). |
946 adapter_.AdaptFrameResolution(640, 480, 0, | 943 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
947 &cropped_width_, &cropped_height_, | 944 &cropped_width_, &cropped_height_, |
948 &out_width_, &out_height_); | 945 &out_width_, &out_height_)); |
949 | 946 |
950 // Instead of getting the exact aspect ratio with cropped resolution 640x360, | 947 // Instead of getting the exact aspect ratio with cropped resolution 640x360, |
951 // the resolution should be adjusted to get a perfect scale factor instead. | 948 // the resolution should be adjusted to get a perfect scale factor instead. |
952 EXPECT_EQ(640, cropped_width_); | 949 EXPECT_EQ(640, cropped_width_); |
953 EXPECT_EQ(368, cropped_height_); | 950 EXPECT_EQ(368, cropped_height_); |
954 EXPECT_EQ(120, out_width_); | 951 EXPECT_EQ(120, out_width_); |
955 EXPECT_EQ(69, out_height_); | 952 EXPECT_EQ(69, out_height_); |
956 } | 953 } |
957 | 954 |
958 } // namespace cricket | 955 } // namespace cricket |
OLD | NEW |