rtc: Resize test for 1/4,3/4 scaling via SetScaleMode
Change-Id: I76e0b790f85b700740a1b90188f53db0d20b142e
diff --git a/test/resize_test.cc b/test/resize_test.cc
index 1c12715..3fa3d83 100644
--- a/test/resize_test.cc
+++ b/test/resize_test.cc
@@ -387,6 +387,15 @@
else if (video->frame() > 40)
mode = { AOME_NORMAL, AOME_NORMAL };
encoder->Control(AOME_SET_SCALEMODE, &mode);
+ } else if (set_scale_mode2_) {
+ struct aom_scaling_mode mode;
+ if (video->frame() <= 20)
+ mode = { AOME_ONEFOUR, AOME_ONEFOUR };
+ else if (video->frame() <= 40)
+ mode = { AOME_ONETWO, AOME_ONETWO };
+ else if (video->frame() > 40)
+ mode = { AOME_THREEFOUR, AOME_THREEFOUR };
+ encoder->Control(AOME_SET_SCALEMODE, &mode);
}
if (change_bitrate_ && video->frame() == 120) {
@@ -437,7 +446,7 @@
// the width and height of the frame are swapped
cfg_.g_forced_max_frame_width = cfg_.g_forced_max_frame_height =
AOMMAX(kInitialWidth, kInitialHeight);
- if (set_scale_mode_) {
+ if (set_scale_mode_ | set_scale_mode2_) {
cfg_.rc_dropframe_thresh = 0;
cfg_.g_forced_max_frame_width = 1280;
cfg_.g_forced_max_frame_height = 1280;
@@ -450,15 +459,17 @@
double mismatch_psnr_;
int mismatch_nframes_;
bool set_scale_mode_;
+ bool set_scale_mode2_;
};
// Check the AOME_SET_SCALEMODE control by downsizing to
// 1/2, then 1/4, and then back up to originsal.
-TEST_P(ResizeRealtimeTest, TestInternalResizeSetScaleMode) {
+TEST_P(ResizeRealtimeTest, TestInternalResizeSetScaleMode1) {
::libaom_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 60);
cfg_.g_w = 1280;
cfg_.g_h = 720;
set_scale_mode_ = true;
+ set_scale_mode2_ = false;
DefaultConfig();
change_bitrate_ = false;
mismatch_nframes_ = 0;
@@ -485,12 +496,47 @@
}
}
+// Check the AOME_SET_SCALEMODE control by downsizing to
+// 1/4, then 1/2, and then up to 3/4.
+TEST_P(ResizeRealtimeTest, TestInternalResizeSetScaleMode2) {
+ ::libaom_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 60);
+ cfg_.g_w = 1280;
+ cfg_.g_h = 720;
+ set_scale_mode_ = false;
+ set_scale_mode2_ = true;
+ DefaultConfig();
+ change_bitrate_ = false;
+ mismatch_nframes_ = 0;
+ ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
+ // Check we decoded the same number of frames as we attempted to encode
+ ASSERT_EQ(frame_info_list_.size(), video.limit());
+ for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
+ info != frame_info_list_.end(); ++info) {
+ const unsigned int frame = static_cast<unsigned>(info->pts);
+ unsigned int expected_w = 1280 >> 2;
+ unsigned int expected_h = 720 >> 2;
+ if (frame > 40) {
+ expected_w = (3 * 1280) >> 2;
+ expected_h = (3 * 720) >> 2;
+ } else if (frame > 20 && frame <= 40) {
+ expected_w = 1280 >> 1;
+ expected_h = 720 >> 1;
+ }
+ EXPECT_EQ(expected_w, info->w)
+ << "Frame " << frame << " had unexpected width";
+ EXPECT_EQ(expected_h, info->h)
+ << "Frame " << frame << " had unexpected height";
+ EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
+ }
+}
+
TEST_P(ResizeRealtimeTest, TestExternalResizeWorks) {
ResizingVideoSource video;
video.flag_codec_ = 1;
DefaultConfig();
change_bitrate_ = false;
set_scale_mode_ = false;
+ set_scale_mode2_ = false;
mismatch_psnr_ = 0.0;
mismatch_nframes_ = 0;
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));