| 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(
|
|
|