diff --git a/talk/media/base/videocapturer_unittest.cc b/talk/media/base/videocapturer_unittest.cc index 75da2360ed..9f025e37bb 100644 --- a/talk/media/base/videocapturer_unittest.cc +++ b/talk/media/base/videocapturer_unittest.cc @@ -31,6 +31,12 @@ const int kMsCallbackWait = 500; const int kMinHdHeight = 720; const uint32 kTimeout = 5000U; +void NormalizeVideoSize(int* expected_width, int* expected_height) { + // WebRtcVideoFrame truncates the frame size to a multiple of 4. + *expected_width = *expected_width & ~3; + *expected_height = *expected_height & ~3; +} + } // namespace // Sets the elapsed time in the video frame to 0. @@ -228,6 +234,59 @@ TEST_F(VideoCapturerTest, ScreencastScaledMaxPixels) { EXPECT_EQ(2, renderer_.num_rendered_frames()); } +TEST_F(VideoCapturerTest, ScreencastScaledOddWidth) { + capturer_.SetScreencast(true); + + int kWidth = 1281; + int kHeight = 720; + + std::vector formats; + formats.push_back(cricket::VideoFormat(kWidth, kHeight, + cricket::VideoFormat::FpsToInterval(5), cricket::FOURCC_ARGB)); + capturer_.ResetSupportedFormats(formats); + + EXPECT_EQ(cricket::CS_RUNNING, capturer_.Start(cricket::VideoFormat( + kWidth, + kHeight, + cricket::VideoFormat::FpsToInterval(30), + cricket::FOURCC_ARGB))); + EXPECT_TRUE(capturer_.IsRunning()); + EXPECT_EQ(0, renderer_.num_rendered_frames()); + int expected_width = kWidth; + int expected_height = kHeight; + NormalizeVideoSize(&expected_width, &expected_height); + renderer_.SetSize(expected_width, expected_height, 0); + EXPECT_TRUE(capturer_.CaptureFrame()); + EXPECT_EQ(1, renderer_.num_rendered_frames()); +} + +TEST_F(VideoCapturerTest, ScreencastScaledSuperLarge) { + capturer_.SetScreencast(true); + + const int kMaxWidth = 4096; + const int kMaxHeight = 3072; + int kWidth = kMaxWidth + 4; + int kHeight = kMaxHeight + 4; + + std::vector formats; + formats.push_back(cricket::VideoFormat(kWidth, kHeight, + cricket::VideoFormat::FpsToInterval(5), cricket::FOURCC_ARGB)); + capturer_.ResetSupportedFormats(formats); + + EXPECT_EQ(cricket::CS_RUNNING, capturer_.Start(cricket::VideoFormat( + kWidth, + kHeight, + cricket::VideoFormat::FpsToInterval(30), + cricket::FOURCC_ARGB))); + EXPECT_TRUE(capturer_.IsRunning()); + EXPECT_EQ(0, renderer_.num_rendered_frames()); + int expected_width = 2050; + int expected_height = 1538; + NormalizeVideoSize(&expected_width, &expected_height); + renderer_.SetSize(expected_width, expected_height, 0); + EXPECT_TRUE(capturer_.CaptureFrame()); + EXPECT_EQ(1, renderer_.num_rendered_frames()); +} TEST_F(VideoCapturerTest, TestFourccMatch) { cricket::VideoFormat desired(640, 480,