Index: webrtc/media/base/videoadapter_unittest.cc |
diff --git a/webrtc/media/base/videoadapter_unittest.cc b/webrtc/media/base/videoadapter_unittest.cc |
index 0bfb6c650392e18b34fa97c67aa19000066ffdd6..909a4c22801c0f058df8783f731ba81b5f12b25c 100644 |
--- a/webrtc/media/base/videoadapter_unittest.cc |
+++ b/webrtc/media/base/videoadapter_unittest.cc |
@@ -14,14 +14,18 @@ |
#include <string> |
#include <vector> |
-#include "webrtc/base/gunit.h" |
#include "webrtc/base/logging.h" |
#include "webrtc/media/base/fakevideocapturer.h" |
#include "webrtc/media/base/mediachannel.h" |
#include "webrtc/media/base/testutils.h" |
#include "webrtc/media/base/videoadapter.h" |
+#include "webrtc/test/gtest.h" |
namespace cricket { |
+namespace { |
+// Shorthand for no upper bound. |
+static constexpr uint32_t kMax = std::numeric_limits<uint32_t>::max(); |
+} // namespace |
class VideoAdapterTest : public testing::Test { |
public: |
@@ -115,7 +119,6 @@ class VideoAdapterTest : public testing::Test { |
bool last_adapt_was_no_op_; |
}; |
- |
void VerifyAdaptedResolution(const VideoCapturerListener::Stats& stats, |
int cropped_width, |
int cropped_height, |
@@ -127,6 +130,16 @@ class VideoAdapterTest : public testing::Test { |
EXPECT_EQ(out_height, stats.out_height); |
} |
+ void OnResolutionRequest(uint32_t min, uint32_t target, uint32_t max) { |
+ target = std::min<uint32_t>(target, max); |
+ EXPECT_LE(min, target); |
+ EXPECT_LE(target, max); |
+ adapter_.OnResolutionFramerateRequest( |
+ rtc::Optional<rtc::VideoSinkWants::Range>( |
+ rtc::VideoSinkWants::Range(min, target, max)), |
+ rtc::Optional<rtc::VideoSinkWants::Range>()); |
+ } |
+ |
std::unique_ptr<FakeVideoCapturer> capturer_; |
VideoAdapter adapter_; |
int cropped_width_; |
@@ -696,8 +709,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
EXPECT_EQ(720, out_height_); |
// Adapt down one step. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(1280 * 720 - 1)); |
+ OnResolutionRequest(0, kMax, 1280 * 720 - 1); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -707,8 +719,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
EXPECT_EQ(540, out_height_); |
// Adapt down one step more. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(960 * 540 - 1)); |
+ OnResolutionRequest(0, kMax, 960 * 540 - 1); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -718,8 +729,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
EXPECT_EQ(360, out_height_); |
// Adapt down one step more. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(640 * 360 - 1)); |
+ OnResolutionRequest(0, kMax, 640 * 360 - 1); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -729,8 +739,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
EXPECT_EQ(270, out_height_); |
// Adapt up one step. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360), |
- rtc::Optional<int>(960 * 540)); |
+ OnResolutionRequest(0, 640 * 360, 960 * 540); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -740,8 +749,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
EXPECT_EQ(360, out_height_); |
// Adapt up one step more. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(960 * 540), |
- rtc::Optional<int>(1280 * 720)); |
+ OnResolutionRequest(0, 960 * 540, 1280 * 720); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -751,8 +759,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInSmallSteps) { |
EXPECT_EQ(540, out_height_); |
// Adapt up one step more. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(1280 * 720), |
- rtc::Optional<int>(1920 * 1080)); |
+ OnResolutionRequest(0, 1280 * 720, 1920 * 1080); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -771,7 +778,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestMaxZero) { |
EXPECT_EQ(1280, out_width_); |
EXPECT_EQ(720, out_height_); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), rtc::Optional<int>(0)); |
+ OnResolutionRequest(0, kMax, 0); |
EXPECT_FALSE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -779,8 +786,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestMaxZero) { |
TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { |
// Large step down. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(640 * 360 - 1)); |
+ OnResolutionRequest(0, kMax, 640 * 360 - 1); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -790,8 +796,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { |
EXPECT_EQ(270, out_height_); |
// Large step up. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(1280 * 720), |
- rtc::Optional<int>(1920 * 1080)); |
+ OnResolutionRequest(0, 1280 * 720, 1920 * 1080); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -802,8 +807,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) { |
} |
TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(640 * 360 - 1)); |
+ OnResolutionRequest(0, kMax, 640 * 360 - 1); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -822,8 +826,7 @@ TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) { |
EXPECT_EQ(480, out_width_); |
EXPECT_EQ(270, out_height_); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(960 * 720)); |
+ OnResolutionRequest(0, 960 * 720, kMax); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -842,8 +845,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestReset) { |
EXPECT_EQ(1280, out_width_); |
EXPECT_EQ(720, out_height_); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(640 * 360 - 1)); |
+ OnResolutionRequest(0, kMax, 640 * 360 - 1); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -852,7 +854,7 @@ TEST_F(VideoAdapterTest, TestOnResolutionRequestReset) { |
EXPECT_EQ(480, out_width_); |
EXPECT_EQ(270, out_height_); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), rtc::Optional<int>()); |
+ OnResolutionRequest(0, kMax, kMax); |
EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0, |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
@@ -876,8 +878,7 @@ TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
EXPECT_EQ(360, out_height_); |
// Adapt down one step. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(640 * 360 - 1)); |
+ OnResolutionRequest(0, kMax, 640 * 360 - 1); |
// Expect cropping to 16:9 format and 3/4 scaling. |
EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
&cropped_width_, &cropped_height_, |
@@ -888,8 +889,7 @@ TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
EXPECT_EQ(270, out_height_); |
// Adapt down one step more. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(480 * 270 - 1)); |
+ OnResolutionRequest(0, kMax, 480 * 270 - 1); |
// Expect cropping to 16:9 format and 1/2 scaling. |
EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
&cropped_width_, &cropped_height_, |
@@ -900,8 +900,7 @@ TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
EXPECT_EQ(180, out_height_); |
// Adapt up one step. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(480 * 270), |
- rtc::Optional<int>(640 * 360)); |
+ OnResolutionRequest(0, 480 * 270, 640 * 360); |
// Expect cropping to 16:9 format and 3/4 scaling. |
EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
&cropped_width_, &cropped_height_, |
@@ -912,8 +911,7 @@ TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
EXPECT_EQ(270, out_height_); |
// Adapt up one step more. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(640 * 360), |
- rtc::Optional<int>(960 * 540)); |
+ OnResolutionRequest(0, 640 * 360, 960 * 540); |
// Expect cropping to 16:9 format and no scaling. |
EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
&cropped_width_, &cropped_height_, |
@@ -924,8 +922,7 @@ TEST_F(VideoAdapterTest, TestCroppingWithResolutionRequest) { |
EXPECT_EQ(360, out_height_); |
// Try to adapt up one step more. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(960 * 540), |
- rtc::Optional<int>(1280 * 720)); |
+ OnResolutionRequest(0, 960 * 540, 1280 * 720); |
// Expect cropping to 16:9 format and no scaling. |
EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
&cropped_width_, &cropped_height_, |
@@ -940,8 +937,7 @@ TEST_F(VideoAdapterTest, TestCroppingOddResolution) { |
// Ask for 640x360 (16:9 aspect), with 3/16 scaling. |
adapter_.OnOutputFormatRequest( |
VideoFormat(640, 360, 0, FOURCC_I420)); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(640 * 360 * 3 / 16 * 3 / 16)); |
+ OnResolutionRequest(0, kMax, 640 * 360 * 3 / 16 * 3 / 16); |
// Send 640x480 (4:3 aspect). |
EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0, |
@@ -961,8 +957,7 @@ TEST_F(VideoAdapterTest, TestAdaptToVerySmallResolution) { |
const int w = 1920; |
const int h = 1080; |
adapter_.OnOutputFormatRequest(VideoFormat(w, h, 0, FOURCC_I420)); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(w * h * 1 / 16 * 1 / 16)); |
+ OnResolutionRequest(0, kMax, w * h * 1 / 16 * 1 / 16); |
// Send 1920x1080 (16:9 aspect). |
EXPECT_TRUE(adapter_.AdaptFrameResolution( |
@@ -976,8 +971,7 @@ TEST_F(VideoAdapterTest, TestAdaptToVerySmallResolution) { |
EXPECT_EQ(67, out_height_); |
// Adapt back up one step to 3/32. |
- adapter_.OnResolutionRequest(rtc::Optional<int>(w * h * 3 / 32 * 3 / 32), |
- rtc::Optional<int>(w * h * 1 / 8 * 1 / 8)); |
+ OnResolutionRequest(0, w * h * 3 / 32 * 3 / 32, w * h * 1 / 8 * 1 / 8); |
// Send 1920x1080 (16:9 aspect). |
EXPECT_TRUE(adapter_.AdaptFrameResolution( |
@@ -997,8 +991,7 @@ TEST_F(VideoAdapterTest, AdaptFrameResolutionDropWithResolutionRequest) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(960 * 540), |
- rtc::Optional<int>()); |
+ OnResolutionRequest(0, 960 * 540, kMax); |
// Still expect all frames to be dropped |
EXPECT_FALSE(adapter_.AdaptFrameResolution( |
@@ -1006,8 +999,7 @@ TEST_F(VideoAdapterTest, AdaptFrameResolutionDropWithResolutionRequest) { |
&cropped_width_, &cropped_height_, |
&out_width_, &out_height_)); |
- adapter_.OnResolutionRequest(rtc::Optional<int>(), |
- rtc::Optional<int>(640 * 480 - 1)); |
+ OnResolutionRequest(0, kMax, 640 * 480 - 1); |
// Still expect all frames to be dropped |
EXPECT_FALSE(adapter_.AdaptFrameResolution( |