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 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 EXPECT_EQ(200, out_height_); | 570 EXPECT_EQ(200, out_height_); |
571 | 571 |
572 // Request resolution of 3 / 8. Expect adapt down. | 572 // Request resolution of 3 / 8. Expect adapt down. |
573 format.width = 640 * 3 / 8; | 573 format.width = 640 * 3 / 8; |
574 format.height = 400 * 3 / 8; | 574 format.height = 400 * 3 / 8; |
575 adapter_.OnOutputFormatRequest(format); | 575 adapter_.OnOutputFormatRequest(format); |
576 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, | 576 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
577 &cropped_width_, &cropped_height_, | 577 &cropped_width_, &cropped_height_, |
578 &out_width_, &out_height_)); | 578 &out_width_, &out_height_)); |
579 EXPECT_EQ(640, cropped_width_); | 579 EXPECT_EQ(640, cropped_width_); |
580 EXPECT_EQ(400, cropped_height_); | 580 EXPECT_EQ(384, cropped_height_); |
581 EXPECT_EQ(640 * 3 / 8, out_width_); | 581 EXPECT_EQ(640 * 3 / 8, out_width_); |
582 EXPECT_EQ(400 * 3 / 8, out_height_); | 582 EXPECT_EQ(384 * 3 / 8, out_height_); |
583 | 583 |
584 // Switch back up. Expect adapt. | 584 // Switch back up. Expect adapt. |
585 format.width = 320; | 585 format.width = 320; |
586 format.height = 200; | 586 format.height = 200; |
587 adapter_.OnOutputFormatRequest(format); | 587 adapter_.OnOutputFormatRequest(format); |
588 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, | 588 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 400, 0, |
589 &cropped_width_, &cropped_height_, | 589 &cropped_width_, &cropped_height_, |
590 &out_width_, &out_height_)); | 590 &out_width_, &out_height_)); |
591 EXPECT_EQ(640, cropped_width_); | 591 EXPECT_EQ(640, cropped_width_); |
592 EXPECT_EQ(400, cropped_height_); | 592 EXPECT_EQ(400, cropped_height_); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 EXPECT_EQ(640, out_width_); | 714 EXPECT_EQ(640, out_width_); |
715 EXPECT_EQ(360, out_height_); | 715 EXPECT_EQ(360, out_height_); |
716 | 716 |
717 // Adapt down one step more. | 717 // Adapt down one step more. |
718 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 718 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
719 rtc::Optional<int>()); | 719 rtc::Optional<int>()); |
720 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 720 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
721 &cropped_width_, &cropped_height_, | 721 &cropped_width_, &cropped_height_, |
722 &out_width_, &out_height_)); | 722 &out_width_, &out_height_)); |
723 EXPECT_EQ(1280, cropped_width_); | 723 EXPECT_EQ(1280, cropped_width_); |
724 EXPECT_EQ(720, cropped_height_); | 724 EXPECT_EQ(704, cropped_height_); |
725 EXPECT_EQ(480, out_width_); | 725 EXPECT_EQ(480, out_width_); |
726 EXPECT_EQ(270, out_height_); | 726 EXPECT_EQ(264, out_height_); |
727 | 727 |
728 // Adapt up one step. | 728 // Adapt up one step. |
729 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 729 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
730 rtc::Optional<int>(480 * 270)); | 730 rtc::Optional<int>(480 * 270)); |
731 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 731 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
732 &cropped_width_, &cropped_height_, | 732 &cropped_width_, &cropped_height_, |
733 &out_width_, &out_height_)); | 733 &out_width_, &out_height_)); |
734 EXPECT_EQ(1280, cropped_width_); | 734 EXPECT_EQ(1280, cropped_width_); |
735 EXPECT_EQ(720, cropped_height_); | 735 EXPECT_EQ(720, cropped_height_); |
736 EXPECT_EQ(640, out_width_); | 736 EXPECT_EQ(640, out_width_); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
774 &out_width_, &out_height_)); | 774 &out_width_, &out_height_)); |
775 } | 775 } |
776 | 776 |
777 TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { | 777 TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { |
778 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 778 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
779 rtc::Optional<int>()); | 779 rtc::Optional<int>()); |
780 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 780 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
781 &cropped_width_, &cropped_height_, | 781 &cropped_width_, &cropped_height_, |
782 &out_width_, &out_height_)); | 782 &out_width_, &out_height_)); |
783 EXPECT_EQ(1280, cropped_width_); | 783 EXPECT_EQ(1280, cropped_width_); |
784 EXPECT_EQ(720, cropped_height_); | 784 EXPECT_EQ(704, cropped_height_); |
785 EXPECT_EQ(480, out_width_); | 785 EXPECT_EQ(480, out_width_); |
786 EXPECT_EQ(270, out_height_); | 786 EXPECT_EQ(264, out_height_); |
787 | 787 |
788 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 788 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
789 rtc::Optional<int>(960 * 720)); | 789 rtc::Optional<int>(960 * 720)); |
790 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 790 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
791 &cropped_width_, &cropped_height_, | 791 &cropped_width_, &cropped_height_, |
792 &out_width_, &out_height_)); | 792 &out_width_, &out_height_)); |
793 EXPECT_EQ(1280, cropped_width_); | 793 EXPECT_EQ(1280, cropped_width_); |
794 EXPECT_EQ(720, cropped_height_); | 794 EXPECT_EQ(720, cropped_height_); |
795 EXPECT_EQ(1280, out_width_); | 795 EXPECT_EQ(1280, out_width_); |
796 EXPECT_EQ(720, out_height_); | 796 EXPECT_EQ(720, out_height_); |
797 } | 797 } |
798 | 798 |
799 TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { | 799 TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { |
800 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 800 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
801 rtc::Optional<int>()); | 801 rtc::Optional<int>()); |
802 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 802 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
803 &cropped_width_, &cropped_height_, | 803 &cropped_width_, &cropped_height_, |
804 &out_width_, &out_height_)); | 804 &out_width_, &out_height_)); |
805 EXPECT_EQ(1280, cropped_width_); | 805 EXPECT_EQ(1280, cropped_width_); |
806 EXPECT_EQ(720, cropped_height_); | 806 EXPECT_EQ(704, cropped_height_); |
807 EXPECT_EQ(480, out_width_); | 807 EXPECT_EQ(480, out_width_); |
808 EXPECT_EQ(270, out_height_); | 808 EXPECT_EQ(264, out_height_); |
809 | 809 |
810 VideoFormat new_format(640, 360, 0, FOURCC_I420); | 810 VideoFormat new_format(640, 360, 0, FOURCC_I420); |
811 adapter_.OnOutputFormatRequest(new_format); | 811 adapter_.OnOutputFormatRequest(new_format); |
812 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 812 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
813 &cropped_width_, &cropped_height_, | 813 &cropped_width_, &cropped_height_, |
814 &out_width_, &out_height_)); | 814 &out_width_, &out_height_)); |
815 EXPECT_EQ(1280, cropped_width_); | 815 EXPECT_EQ(1280, cropped_width_); |
816 EXPECT_EQ(720, cropped_height_); | 816 EXPECT_EQ(704, cropped_height_); |
817 EXPECT_EQ(480, out_width_); | 817 EXPECT_EQ(480, out_width_); |
818 EXPECT_EQ(270, out_height_); | 818 EXPECT_EQ(264, out_height_); |
819 | 819 |
820 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 820 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
821 rtc::Optional<int>(960 * 720)); | 821 rtc::Optional<int>(960 * 720)); |
822 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 822 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
823 &cropped_width_, &cropped_height_, | 823 &cropped_width_, &cropped_height_, |
824 &out_width_, &out_height_)); | 824 &out_width_, &out_height_)); |
825 EXPECT_EQ(1280, cropped_width_); | 825 EXPECT_EQ(1280, cropped_width_); |
826 EXPECT_EQ(720, cropped_height_); | 826 EXPECT_EQ(720, cropped_height_); |
827 EXPECT_EQ(640, out_width_); | 827 EXPECT_EQ(640, out_width_); |
828 EXPECT_EQ(360, out_height_); | 828 EXPECT_EQ(360, out_height_); |
829 } | 829 } |
830 | 830 |
831 TEST_F(VideoAdapterTest, TestOnResolutionRequestReset) { | 831 TEST_F(VideoAdapterTest, TestOnResolutionRequestReset) { |
832 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 832 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
833 &cropped_width_, &cropped_height_, | 833 &cropped_width_, &cropped_height_, |
834 &out_width_, &out_height_)); | 834 &out_width_, &out_height_)); |
835 EXPECT_EQ(1280, cropped_width_); | 835 EXPECT_EQ(1280, cropped_width_); |
836 EXPECT_EQ(720, cropped_height_); | 836 EXPECT_EQ(720, cropped_height_); |
837 EXPECT_EQ(1280, out_width_); | 837 EXPECT_EQ(1280, out_width_); |
838 EXPECT_EQ(720, out_height_); | 838 EXPECT_EQ(720, out_height_); |
839 | 839 |
840 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 840 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
841 rtc::Optional<int>()); | 841 rtc::Optional<int>()); |
842 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 842 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
843 &cropped_width_, &cropped_height_, | 843 &cropped_width_, &cropped_height_, |
844 &out_width_, &out_height_)); | 844 &out_width_, &out_height_)); |
845 EXPECT_EQ(1280, cropped_width_); | 845 EXPECT_EQ(1280, cropped_width_); |
846 EXPECT_EQ(720, cropped_height_); | 846 EXPECT_EQ(704, cropped_height_); |
847 EXPECT_EQ(480, out_width_); | 847 EXPECT_EQ(480, out_width_); |
848 EXPECT_EQ(270, out_height_); | 848 EXPECT_EQ(264, out_height_); |
849 | 849 |
850 adapter_.OnResolutionRequest(rtc::Optional<int>(), rtc::Optional<int>()); | 850 adapter_.OnResolutionRequest(rtc::Optional<int>(), rtc::Optional<int>()); |
851 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, | 851 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
852 &cropped_width_, &cropped_height_, | 852 &cropped_width_, &cropped_height_, |
853 &out_width_, &out_height_)); | 853 &out_width_, &out_height_)); |
854 EXPECT_EQ(1280, cropped_width_); | 854 EXPECT_EQ(1280, cropped_width_); |
855 EXPECT_EQ(720, cropped_height_); | 855 EXPECT_EQ(720, cropped_height_); |
856 EXPECT_EQ(1280, out_width_); | 856 EXPECT_EQ(1280, out_width_); |
857 EXPECT_EQ(720, out_height_); | 857 EXPECT_EQ(720, out_height_); |
858 } | 858 } |
(...skipping 12 matching lines...) Expand all Loading... |
871 EXPECT_EQ(360, out_height_); | 871 EXPECT_EQ(360, out_height_); |
872 | 872 |
873 // Adapt down one step. | 873 // Adapt down one step. |
874 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), | 874 adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360 - 1), |
875 rtc::Optional<int>()); | 875 rtc::Optional<int>()); |
876 // Expect cropping to 16:9 format and 3/4 scaling. | 876 // Expect cropping to 16:9 format and 3/4 scaling. |
877 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, | 877 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
878 &cropped_width_, &cropped_height_, | 878 &cropped_width_, &cropped_height_, |
879 &out_width_, &out_height_)); | 879 &out_width_, &out_height_)); |
880 EXPECT_EQ(640, cropped_width_); | 880 EXPECT_EQ(640, cropped_width_); |
881 EXPECT_EQ(360, cropped_height_); | 881 EXPECT_EQ(368, cropped_height_); |
882 EXPECT_EQ(480, out_width_); | 882 EXPECT_EQ(480, out_width_); |
883 EXPECT_EQ(270, out_height_); | 883 EXPECT_EQ(276, out_height_); |
884 | 884 |
885 // Adapt down one step more. | 885 // Adapt down one step more. |
886 adapter_.OnResolutionRequest(rtc::Optional<int>(480 * 270 - 1), | 886 adapter_.OnResolutionRequest(rtc::Optional<int>(480 * 270 - 1), |
887 rtc::Optional<int>()); | 887 rtc::Optional<int>()); |
888 // Expect cropping to 16:9 format and 1/2 scaling. | 888 // Expect cropping to 16:9 format and 1/2 scaling. |
889 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, | 889 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
890 &cropped_width_, &cropped_height_, | 890 &cropped_width_, &cropped_height_, |
891 &out_width_, &out_height_)); | 891 &out_width_, &out_height_)); |
892 EXPECT_EQ(640, cropped_width_); | 892 EXPECT_EQ(640, cropped_width_); |
893 EXPECT_EQ(360, cropped_height_); | 893 EXPECT_EQ(360, cropped_height_); |
894 EXPECT_EQ(320, out_width_); | 894 EXPECT_EQ(320, out_width_); |
895 EXPECT_EQ(180, out_height_); | 895 EXPECT_EQ(180, out_height_); |
896 | 896 |
897 // Adapt up one step. | 897 // Adapt up one step. |
898 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 898 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
899 rtc::Optional<int>(320 * 180)); | 899 rtc::Optional<int>(320 * 180)); |
900 // Expect cropping to 16:9 format and 3/4 scaling. | 900 // Expect cropping to 16:9 format and 3/4 scaling. |
901 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, | 901 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
902 &cropped_width_, &cropped_height_, | 902 &cropped_width_, &cropped_height_, |
903 &out_width_, &out_height_)); | 903 &out_width_, &out_height_)); |
904 EXPECT_EQ(640, cropped_width_); | 904 EXPECT_EQ(640, cropped_width_); |
905 EXPECT_EQ(360, cropped_height_); | 905 EXPECT_EQ(368, cropped_height_); |
906 EXPECT_EQ(480, out_width_); | 906 EXPECT_EQ(480, out_width_); |
907 EXPECT_EQ(270, out_height_); | 907 EXPECT_EQ(276, out_height_); |
908 | 908 |
909 // Adapt up one step more. | 909 // Adapt up one step more. |
910 adapter_.OnResolutionRequest(rtc::Optional<int>(), | 910 adapter_.OnResolutionRequest(rtc::Optional<int>(), |
911 rtc::Optional<int>(480 * 270)); | 911 rtc::Optional<int>(480 * 270)); |
912 // Expect cropping to 16:9 format and no scaling. | 912 // Expect cropping to 16:9 format and no scaling. |
913 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, | 913 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
914 &cropped_width_, &cropped_height_, | 914 &cropped_width_, &cropped_height_, |
915 &out_width_, &out_height_)); | 915 &out_width_, &out_height_)); |
916 EXPECT_EQ(640, cropped_width_); | 916 EXPECT_EQ(640, cropped_width_); |
917 EXPECT_EQ(360, cropped_height_); | 917 EXPECT_EQ(360, cropped_height_); |
(...skipping 21 matching lines...) Expand all Loading... |
939 rtc::Optional<int>()); | 939 rtc::Optional<int>()); |
940 | 940 |
941 // Send 640x480 (4:3 aspect). | 941 // Send 640x480 (4:3 aspect). |
942 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, | 942 EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
943 &cropped_width_, &cropped_height_, | 943 &cropped_width_, &cropped_height_, |
944 &out_width_, &out_height_)); | 944 &out_width_, &out_height_)); |
945 | 945 |
946 // Instead of getting the exact aspect ratio with cropped resolution 640x360, | 946 // Instead of getting the exact aspect ratio with cropped resolution 640x360, |
947 // the resolution should be adjusted to get a perfect scale factor instead. | 947 // the resolution should be adjusted to get a perfect scale factor instead. |
948 EXPECT_EQ(640, cropped_width_); | 948 EXPECT_EQ(640, cropped_width_); |
949 EXPECT_EQ(368, cropped_height_); | 949 EXPECT_EQ(384, cropped_height_); |
950 EXPECT_EQ(120, out_width_); | 950 EXPECT_EQ(120, out_width_); |
951 EXPECT_EQ(69, out_height_); | 951 EXPECT_EQ(72, out_height_); |
952 } | 952 } |
953 | 953 |
| 954 TEST_F(VideoAdapterTest, TestScaleToReallySmall) { |
| 955 // Ask for 960x720 (4:3 aspect) with 3/32 scaling. |
| 956 const int w = 960; |
| 957 const int h = 720; |
| 958 adapter_.OnOutputFormatRequest(VideoFormat(w, h, 0, FOURCC_I420)); |
| 959 adapter_.OnResolutionRequest(rtc::Optional<int>(w * h * 3 / 32 * 3 / 32), |
| 960 rtc::Optional<int>()); |
| 961 |
| 962 // Send 1280x720 (16:9 aspect). |
| 963 EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, &cropped_width_, |
| 964 &cropped_height_, &out_width_, |
| 965 &out_height_)); |
| 966 |
| 967 EXPECT_EQ(1024, cropped_width_); |
| 968 EXPECT_EQ(640, cropped_height_); |
| 969 EXPECT_EQ(96, out_width_); |
| 970 EXPECT_EQ(60, out_height_); |
| 971 } |
| 972 |
| 973 TEST_F(VideoAdapterTest, TestScaleFromReallyBig) { |
| 974 // Ask for 7680x4320 (16:9 aspect) with 1/16 scaling. |
| 975 const int w = 7680; |
| 976 const int h = 4320; |
| 977 adapter_.OnOutputFormatRequest(VideoFormat(w, h, 0, FOURCC_I420)); |
| 978 adapter_.OnResolutionRequest(rtc::Optional<int>(w * h * 1 / 16 * 1 / 16), |
| 979 rtc::Optional<int>()); |
| 980 |
| 981 // Send 8K (16:9 aspect). |
| 982 EXPECT_TRUE(adapter_.AdaptFrameResolution( |
| 983 w, h, 0, &cropped_width_, &cropped_height_, &out_width_, &out_height_)); |
| 984 |
| 985 EXPECT_EQ(7680, cropped_width_); |
| 986 EXPECT_EQ(4288, cropped_height_); |
| 987 EXPECT_EQ(480, out_width_); |
| 988 EXPECT_EQ(268, out_height_); |
| 989 } |
954 } // namespace cricket | 990 } // namespace cricket |
OLD | NEW |