OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "content/browser/media/capture/capture_resolution_evaluator.h" |
| 6 |
| 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 |
| 9 namespace content { |
| 10 |
| 11 namespace { |
| 12 |
| 13 // 16:9 maximum and minimum frame sizes. |
| 14 const int kMaxFrameWidth = 3840; |
| 15 const int kMaxFrameHeight = 2160; |
| 16 const int kMinFrameWidth = 320; |
| 17 const int kMinFrameHeight = 180; |
| 18 |
| 19 } // namespace |
| 20 |
| 21 TEST(CaptureResolutionEvaluatorTest, |
| 22 FixedResolutionPolicy_CaptureSizeAlwaysFixed) { |
| 23 const gfx::Size the_one_frame_size(kMaxFrameWidth, kMaxFrameHeight); |
| 24 CaptureResolutionEvaluator evaluator( |
| 25 the_one_frame_size, |
| 26 media::RESOLUTION_POLICY_FIXED_RESOLUTION); |
| 27 EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
| 28 evaluator.UpdateForNewSourceSize(the_one_frame_size); |
| 29 EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
| 30 evaluator.UpdateForNewSourceSize(gfx::Size(kMaxFrameWidth + 424, |
| 31 kMaxFrameHeight - 101)); |
| 32 EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
| 33 evaluator.UpdateForNewSourceSize(gfx::Size(kMaxFrameWidth - 202, |
| 34 kMaxFrameHeight + 56)); |
| 35 EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
| 36 evaluator.UpdateForNewSourceSize(gfx::Size(kMinFrameWidth, kMinFrameHeight)); |
| 37 EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
| 38 } |
| 39 |
| 40 TEST(CaptureResolutionEvaluatorTest, |
| 41 FixedAspectRatioPolicy_CaptureSizeHasSameAspectRatio) { |
| 42 CaptureResolutionEvaluator evaluator( |
| 43 gfx::Size(kMaxFrameWidth, kMaxFrameHeight), |
| 44 media::RESOLUTION_POLICY_FIXED_ASPECT_RATIO); |
| 45 |
| 46 #define EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO() \ |
| 47 ASSERT_LE(kMinFrameWidth, evaluator.capture_size().width()); \ |
| 48 ASSERT_LE(kMinFrameHeight, evaluator.capture_size().height()); \ |
| 49 EXPECT_GE(kMaxFrameWidth, evaluator.capture_size().width()); \ |
| 50 EXPECT_GE(kMaxFrameHeight, evaluator.capture_size().height()); \ |
| 51 EXPECT_NEAR(static_cast<double>(kMaxFrameWidth) / kMaxFrameHeight, \ |
| 52 static_cast<double>(evaluator.capture_size().width()) / \ |
| 53 evaluator.capture_size().height(), \ |
| 54 0.01) |
| 55 |
| 56 // Starting condition. |
| 57 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 58 |
| 59 // Max size in --> max size out. |
| 60 evaluator.UpdateForNewSourceSize(gfx::Size(kMaxFrameWidth, kMaxFrameHeight)); |
| 61 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 62 |
| 63 // Various source sizes within bounds. |
| 64 evaluator.UpdateForNewSourceSize(gfx::Size(640, 480)); |
| 65 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 66 evaluator.UpdateForNewSourceSize(gfx::Size(480, 640)); |
| 67 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 68 evaluator.UpdateForNewSourceSize(gfx::Size(640, 640)); |
| 69 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 70 const gfx::Size unchanged_size = evaluator.capture_size(); |
| 71 |
| 72 // Bad source size results in no update. |
| 73 evaluator.UpdateForNewSourceSize(gfx::Size(0, 0)); |
| 74 EXPECT_EQ(unchanged_size, evaluator.capture_size()); |
| 75 |
| 76 // Downscaling size (preserving aspect ratio) when source size exceeds the |
| 77 // upper bounds. |
| 78 evaluator.UpdateForNewSourceSize( |
| 79 gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight * 2)); |
| 80 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 81 evaluator.UpdateForNewSourceSize( |
| 82 gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight)); |
| 83 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 84 evaluator.UpdateForNewSourceSize( |
| 85 gfx::Size(kMaxFrameWidth, kMaxFrameHeight * 2)); |
| 86 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 87 |
| 88 // Upscaling size (preserving aspect ratio) when source size is under the |
| 89 // lower bounds. |
| 90 evaluator.UpdateForNewSourceSize( |
| 91 gfx::Size(kMinFrameWidth / 2, kMinFrameHeight / 2)); |
| 92 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 93 evaluator.UpdateForNewSourceSize( |
| 94 gfx::Size(kMinFrameWidth / 2, kMaxFrameHeight)); |
| 95 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 96 evaluator.UpdateForNewSourceSize( |
| 97 gfx::Size(kMinFrameWidth, kMinFrameHeight / 2)); |
| 98 EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
| 99 |
| 100 #undef EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO |
| 101 } |
| 102 |
| 103 TEST(CaptureResolutionEvaluatorTest, |
| 104 AnyWithinLimitPolicy_CaptureSizeIsAnythingWithinLimits) { |
| 105 const gfx::Size max_size(kMaxFrameWidth, kMaxFrameHeight); |
| 106 CaptureResolutionEvaluator evaluator( |
| 107 max_size, media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT); |
| 108 |
| 109 // Starting condition. |
| 110 EXPECT_EQ(max_size, evaluator.capture_size()); |
| 111 |
| 112 // Max size in --> max size out. |
| 113 evaluator.UpdateForNewSourceSize(max_size); |
| 114 EXPECT_EQ(max_size, evaluator.capture_size()); |
| 115 |
| 116 // Various source sizes within bounds. |
| 117 evaluator.UpdateForNewSourceSize(gfx::Size(640, 480)); |
| 118 EXPECT_EQ(gfx::Size(640, 480), evaluator.capture_size()); |
| 119 evaluator.UpdateForNewSourceSize(gfx::Size(480, 640)); |
| 120 EXPECT_EQ(gfx::Size(480, 640), evaluator.capture_size()); |
| 121 evaluator.UpdateForNewSourceSize(gfx::Size(640, 640)); |
| 122 EXPECT_EQ(gfx::Size(640, 640), evaluator.capture_size()); |
| 123 evaluator.UpdateForNewSourceSize(gfx::Size(2, 2)); |
| 124 EXPECT_EQ(gfx::Size(2, 2), evaluator.capture_size()); |
| 125 const gfx::Size unchanged_size = evaluator.capture_size(); |
| 126 |
| 127 // Bad source size results in no update. |
| 128 evaluator.UpdateForNewSourceSize(gfx::Size(0, 0)); |
| 129 EXPECT_EQ(unchanged_size, evaluator.capture_size()); |
| 130 |
| 131 // Downscaling size (preserving aspect ratio) when source size exceeds the |
| 132 // upper bounds. |
| 133 evaluator.UpdateForNewSourceSize( |
| 134 gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight * 2)); |
| 135 EXPECT_EQ(max_size, evaluator.capture_size()); |
| 136 evaluator.UpdateForNewSourceSize( |
| 137 gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight)); |
| 138 EXPECT_EQ(gfx::Size(kMaxFrameWidth, kMaxFrameHeight / 2), |
| 139 evaluator.capture_size()); |
| 140 evaluator.UpdateForNewSourceSize( |
| 141 gfx::Size(kMaxFrameWidth, kMaxFrameHeight * 2)); |
| 142 EXPECT_EQ(gfx::Size(kMaxFrameWidth / 2, kMaxFrameHeight), |
| 143 evaluator.capture_size()); |
| 144 } |
| 145 |
| 146 } // namespace content |
OLD | NEW |