Superres test refactor.
Before: NUM_TEST_VIDEOS, kPSNRThresholds and kTestVideoVectors were all
related and had to be in sync.
Now: We combine them, so that adding to kTestVideoVectors by itself
is sufficient for adding new test videos.
Change-Id: I4dab3e0fbb9e041797e106431cb1fb2d9d0769b3
diff --git a/test/horz_superres_test.cc b/test/horz_superres_test.cc
index c1ba7f5..14483ef 100644
--- a/test/horz_superres_test.cc
+++ b/test/horz_superres_test.cc
@@ -28,13 +28,8 @@
/* TESTING PARAMETERS */
-#define NUM_TEST_VIDEOS 4
-
const int kBitrate = 40;
-// PSNR thresholds found by experiment
-const double kPSNRThresholds[] = { 26.0, 28.0, 20.0, 39.0 };
-
typedef struct {
const char *filename;
aom_img_fmt fmt;
@@ -42,13 +37,15 @@
unsigned int profile;
unsigned int limit;
unsigned int screen_content;
+ double psnr_threshold;
} TestVideoParam;
const TestVideoParam kTestVideoVectors[] = {
- { "park_joy_90p_8_420.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 5, 0 },
- { "park_joy_90p_10_444.y4m", AOM_IMG_FMT_I44416, AOM_BITS_10, 1, 5, 0 },
- { "screendata.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 4, 1 },
- { "niklas_1280_720_30.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 1, 0 }, // image
+ { "park_joy_90p_8_420.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 5, 0, 26.0 },
+ { "park_joy_90p_10_444.y4m", AOM_IMG_FMT_I44416, AOM_BITS_10, 1, 5, 0, 28.0 },
+ { "screendata.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 4, 1, 20.0 },
+ // Image coding (single frame).
+ { "niklas_1280_720_30.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 1, 0, 39.0 },
};
// Modes with extra params have their own tests.
@@ -74,8 +71,8 @@
/* END (TESTING PARAMETERS) */
// Test parameter list:
-// <[needed for EncoderTest], test_video_idx_, superres_mode_>
-typedef tuple<const libaom_test::CodecFactory *, int, SUPERRES_MODE>
+// <[needed for EncoderTest], test_video_param_, superres_mode_>
+typedef tuple<const libaom_test::CodecFactory *, TestVideoParam, SUPERRES_MODE>
HorzSuperresTestParam;
class HorzSuperresEndToEndTest
@@ -83,10 +80,8 @@
public ::libaom_test::EncoderTest {
protected:
HorzSuperresEndToEndTest()
- : EncoderTest(GET_PARAM(0)), test_video_idx_(GET_PARAM(1)),
- superres_mode_(GET_PARAM(2)), psnr_(0.0), frame_count_(0) {
- test_video_param_ = kTestVideoVectors[test_video_idx_];
- }
+ : EncoderTest(GET_PARAM(0)), test_video_param_(GET_PARAM(1)),
+ superres_mode_(GET_PARAM(2)), psnr_(0.0), frame_count_(0) {}
virtual ~HorzSuperresEndToEndTest() {}
@@ -143,8 +138,6 @@
return 0.0;
}
- double GetPsnrThreshold() { return kPSNRThresholds[test_video_idx_]; }
-
void DoTest() {
std::unique_ptr<libaom_test::VideoSource> video;
video.reset(new libaom_test::Y4mVideoSource(test_video_param_.filename, 0,
@@ -153,14 +146,13 @@
ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
const double psnr = GetAveragePsnr();
- EXPECT_GT(psnr, GetPsnrThreshold())
+ EXPECT_GT(psnr, test_video_param_.psnr_threshold)
<< "superres_mode_ = " << superres_mode_;
EXPECT_EQ(test_video_param_.limit, frame_count_)
<< "superres_mode_ = " << superres_mode_;
}
- int test_video_idx_;
TestVideoParam test_video_param_;
SUPERRES_MODE superres_mode_;
@@ -172,13 +164,14 @@
TEST_P(HorzSuperresEndToEndTest, HorzSuperresEndToEndPSNRTest) { DoTest(); }
AV1_INSTANTIATE_TEST_CASE(HorzSuperresEndToEndTest,
- ::testing::Range(0, NUM_TEST_VIDEOS),
+ ::testing::ValuesIn(kTestVideoVectors),
::testing::ValuesIn(kSuperresModesWithoutParams));
// Test parameter list:
-// <[needed for EncoderTest], test_video_idx_, tuple(superres_denom_,
+// <[needed for EncoderTest], test_video_param_, tuple(superres_denom_,
// superres_kf_denom_)>
-typedef tuple<const libaom_test::CodecFactory *, int, SuperresDenominatorPair>
+typedef tuple<const libaom_test::CodecFactory *, TestVideoParam,
+ SuperresDenominatorPair>
HorzSuperresFixedTestParam;
class HorzSuperresFixedEndToEndTest
@@ -186,10 +179,8 @@
public ::libaom_test::EncoderTest {
protected:
HorzSuperresFixedEndToEndTest()
- : EncoderTest(GET_PARAM(0)), test_video_idx_(GET_PARAM(1)),
+ : EncoderTest(GET_PARAM(0)), test_video_param_(GET_PARAM(1)),
superres_mode_(SUPERRES_FIXED), psnr_(0.0), frame_count_(0) {
- test_video_param_ = kTestVideoVectors[test_video_idx_];
-
SuperresDenominatorPair denoms = GET_PARAM(2);
superres_denom_ = ::testing::get<0>(denoms);
superres_kf_denom_ = ::testing::get<1>(denoms);
@@ -252,8 +243,6 @@
return 0.0;
}
- double GetPsnrThreshold() { return kPSNRThresholds[test_video_idx_]; }
-
void DoTest() {
std::unique_ptr<libaom_test::VideoSource> video;
video.reset(new libaom_test::Y4mVideoSource(test_video_param_.filename, 0,
@@ -262,7 +251,7 @@
ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
const double psnr = GetAveragePsnr();
- EXPECT_GT(psnr, GetPsnrThreshold())
+ EXPECT_GT(psnr, test_video_param_.psnr_threshold)
<< "superres_mode_ = " << superres_mode_
<< ", superres_denom_ = " << superres_denom_
<< ", superres_kf_denom_ = " << superres_kf_denom_;
@@ -273,7 +262,6 @@
<< ", superres_kf_denom_ = " << superres_kf_denom_;
}
- int test_video_idx_;
TestVideoParam test_video_param_;
SUPERRES_MODE superres_mode_;
int superres_denom_;
@@ -287,13 +275,14 @@
TEST_P(HorzSuperresFixedEndToEndTest, HorzSuperresFixedTestParam) { DoTest(); }
AV1_INSTANTIATE_TEST_CASE(HorzSuperresFixedEndToEndTest,
- ::testing::Range(0, NUM_TEST_VIDEOS),
+ ::testing::ValuesIn(kTestVideoVectors),
::testing::ValuesIn(kSuperresDenominators));
// Test parameter list:
-// <[needed for EncoderTest], test_video_idx_,
+// <[needed for EncoderTest], test_video_param_,
// tuple(superres_qthresh_,superres_kf_qthresh_)>
-typedef tuple<const libaom_test::CodecFactory *, int, SuperresQThresholdPair>
+typedef tuple<const libaom_test::CodecFactory *, TestVideoParam,
+ SuperresQThresholdPair>
HorzSuperresQThreshTestParam;
class HorzSuperresQThreshEndToEndTest
@@ -301,10 +290,8 @@
public ::libaom_test::EncoderTest {
protected:
HorzSuperresQThreshEndToEndTest()
- : EncoderTest(GET_PARAM(0)), test_video_idx_(GET_PARAM(1)),
+ : EncoderTest(GET_PARAM(0)), test_video_param_(GET_PARAM(1)),
superres_mode_(SUPERRES_QTHRESH), psnr_(0.0), frame_count_(0) {
- test_video_param_ = kTestVideoVectors[test_video_idx_];
-
SuperresQThresholdPair qthresholds = GET_PARAM(2);
superres_qthresh_ = ::testing::get<0>(qthresholds);
superres_kf_qthresh_ = ::testing::get<1>(qthresholds);
@@ -367,8 +354,6 @@
return 0.0;
}
- double GetPsnrThreshold() { return kPSNRThresholds[test_video_idx_]; }
-
void DoTest() {
std::unique_ptr<libaom_test::VideoSource> video;
video.reset(new libaom_test::Y4mVideoSource(test_video_param_.filename, 0,
@@ -377,7 +362,7 @@
ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
const double psnr = GetAveragePsnr();
- EXPECT_GT(psnr, GetPsnrThreshold())
+ EXPECT_GT(psnr, test_video_param_.psnr_threshold)
<< "superres_mode_ = " << superres_mode_
<< ", superres_qthresh_ = " << superres_qthresh_
<< ", superres_kf_qthresh_ = " << superres_kf_qthresh_;
@@ -388,7 +373,6 @@
<< ", superres_kf_qthresh_ = " << superres_kf_qthresh_;
}
- int test_video_idx_;
TestVideoParam test_video_param_;
SUPERRES_MODE superres_mode_;
int superres_qthresh_;
@@ -404,7 +388,7 @@
}
AV1_INSTANTIATE_TEST_CASE(HorzSuperresQThreshEndToEndTest,
- ::testing::Range(0, NUM_TEST_VIDEOS),
+ ::testing::ValuesIn(kTestVideoVectors),
::testing::ValuesIn(kSuperresQThresholds));
} // namespace