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

Side by Side Diff: webrtc/media/base/videoadapter_unittest.cc

Issue 2555483005: Add ability to scale to arbitrary factors (Closed)
Patch Set: Created 4 years 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 /* 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
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
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
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
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
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
OLDNEW
« webrtc/media/base/videoadapter.cc ('K') | « webrtc/media/base/videoadapter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698