Index: webrtc/media/base/videoadapter_unittest.cc |
diff --git a/webrtc/media/base/videoadapter_unittest.cc b/webrtc/media/base/videoadapter_unittest.cc |
index 7f660ef37f2f3086ff438b782e04ff4e9dcceec5..fedd26488966a7a63bbeeeaea7184a3599ba0cc2 100644 |
--- a/webrtc/media/base/videoadapter_unittest.cc |
+++ b/webrtc/media/base/videoadapter_unittest.cc |
@@ -577,9 +577,9 @@ TEST_F(VideoAdapterTest, TestOnOutputFormatRequest) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(640, cropped_width_); |
- EXPECT_EQ(400, cropped_height_); |
+ EXPECT_EQ(384, cropped_height_); |
EXPECT_EQ(640 * 3 / 8, out_width_); |
- EXPECT_EQ(400 * 3 / 8, out_height_); |
+ EXPECT_EQ(384 * 3 / 8, out_height_); |
// Switch back up. Expect adapt. |
format.width = 320; |
@@ -721,9 +721,9 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(1280, cropped_width_); |
- EXPECT_EQ(720, cropped_height_); |
+ EXPECT_EQ(704, cropped_height_); |
EXPECT_EQ(480, out_width_); |
- EXPECT_EQ(270, out_height_); |
+ EXPECT_EQ(264, out_height_); |
// Adapt up one step. |
adapter_.OnResolutionRequest(rtc::Optional<int>(), |
@@ -781,9 +781,9 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(1280, cropped_width_); |
- EXPECT_EQ(720, cropped_height_); |
+ EXPECT_EQ(704, cropped_height_); |
EXPECT_EQ(480, out_width_); |
- EXPECT_EQ(270, out_height_); |
+ EXPECT_EQ(264, out_height_); |
adapter_.OnResolutionRequest(rtc::Optional<int>(), |
rtc::Optional<int>(960 * 720)); |
@@ -803,9 +803,9 @@ TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(1280, cropped_width_); |
- EXPECT_EQ(720, cropped_height_); |
+ EXPECT_EQ(704, cropped_height_); |
EXPECT_EQ(480, out_width_); |
- EXPECT_EQ(270, out_height_); |
+ EXPECT_EQ(264, out_height_); |
VideoFormat new_format(640, 360, 0, FOURCC_I420); |
adapter_.OnOutputFormatRequest(new_format); |
@@ -813,9 +813,9 @@ TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(1280, cropped_width_); |
- EXPECT_EQ(720, cropped_height_); |
+ EXPECT_EQ(704, cropped_height_); |
EXPECT_EQ(480, out_width_); |
- EXPECT_EQ(270, out_height_); |
+ EXPECT_EQ(264, out_height_); |
adapter_.OnResolutionRequest(rtc::Optional<int>(), |
rtc::Optional<int>(960 * 720)); |
@@ -843,9 +843,9 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestReset) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(1280, cropped_width_); |
- EXPECT_EQ(720, cropped_height_); |
+ EXPECT_EQ(704, cropped_height_); |
EXPECT_EQ(480, out_width_); |
- EXPECT_EQ(270, out_height_); |
+ EXPECT_EQ(264, out_height_); |
adapter_.OnResolutionRequest(rtc::Optional<int>(), rtc::Optional<int>()); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
@@ -878,9 +878,9 @@ TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(640, cropped_width_); |
- EXPECT_EQ(360, cropped_height_); |
+ EXPECT_EQ(368, cropped_height_); |
EXPECT_EQ(480, out_width_); |
- EXPECT_EQ(270, out_height_); |
+ EXPECT_EQ(276, out_height_); |
// Adapt down one step more. |
adapter_.OnResolutionRequest(rtc::Optional<int>(480 * 270 - 1), |
@@ -902,9 +902,9 @@ TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
EXPECT_EQ(640, cropped_width_); |
- EXPECT_EQ(360, cropped_height_); |
+ EXPECT_EQ(368, cropped_height_); |
EXPECT_EQ(480, out_width_); |
- EXPECT_EQ(270, out_height_); |
+ EXPECT_EQ(276, out_height_); |
// Adapt up one step more. |
adapter_.OnResolutionRequest(rtc::Optional<int>(), |
@@ -946,9 +946,45 @@ TEST_F(VideoAdapterTest, TestCroppingOddResolution) { |
// Instead of getting the exact aspect ratio with cropped resolution 640x360, |
// the resolution should be adjusted to get a perfect scale factor instead. |
EXPECT_EQ(640, cropped_width_); |
- EXPECT_EQ(368, cropped_height_); |
+ EXPECT_EQ(384, cropped_height_); |
EXPECT_EQ(120, out_width_); |
- EXPECT_EQ(69, out_height_); |
+ EXPECT_EQ(72, out_height_); |
} |
+TEST_F(VideoAdapterTest, TestScaleToReallySmall) { |
+ // Ask for 960x720 (4:3 aspect) with 3/32 scaling. |
+ const int w = 960; |
+ const int h = 720; |
+ adapter_.OnOutputFormatRequest(VideoFormat(w, h, 0, FOURCC_I420)); |
+ adapter_.OnResolutionRequest(rtc::Optional<int>(w * h * 3 / 32 * 3 / 32), |
+ rtc::Optional<int>()); |
+ |
+ // Send 1280x720 (16:9 aspect). |
+ EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, &cropped_width_, |
+ &cropped_height_, &out_width_, |
+ &out_height_)); |
+ |
+ EXPECT_EQ(1024, cropped_width_); |
+ EXPECT_EQ(640, cropped_height_); |
+ EXPECT_EQ(96, out_width_); |
+ EXPECT_EQ(60, out_height_); |
+} |
+ |
+TEST_F(VideoAdapterTest, TestScaleFromReallyBig) { |
+ // Ask for 7680x4320 (16:9 aspect) with 1/16 scaling. |
+ const int w = 7680; |
+ const int h = 4320; |
+ adapter_.OnOutputFormatRequest(VideoFormat(w, h, 0, FOURCC_I420)); |
+ adapter_.OnResolutionRequest(rtc::Optional<int>(w * h * 1 / 16 * 1 / 16), |
+ rtc::Optional<int>()); |
+ |
+ // Send 8K (16:9 aspect). |
+ EXPECT_TRUE(adapter_.AdaptFrameResolution( |
+ w, h, 0, &cropped_width_, &cropped_height_, &out_width_, &out_height_)); |
+ |
+ EXPECT_EQ(7680, cropped_width_); |
+ EXPECT_EQ(4288, cropped_height_); |
+ EXPECT_EQ(480, out_width_); |
+ EXPECT_EQ(268, out_height_); |
+} |
} // namespace cricket |