Add quality tests for fwd-kf
Change-Id: I21d3c17f4958602ebdced64771d60d0cd6f44a61
diff --git a/test/fwd_kf_test.cc b/test/fwd_kf_test.cc
index 0e49ba2..6f3bb97 100644
--- a/test/fwd_kf_test.cc
+++ b/test/fwd_kf_test.cc
@@ -14,15 +14,26 @@
#include "test/encode_test_driver.h"
#include "test/i420_video_source.h"
#include "test/util.h"
+
namespace {
+typedef struct {
+ const int max_kf_dist;
+ const double psnr_thresh;
+} FwdKfTestParam;
+
+const FwdKfTestParam kTestParams[] = {
+ { 4, 37.3 }, { 6, 36.5 }, { 8, 35.8 },
+ { 12, 34.3 }, { 16, 34.3 }, { 18, 34.4 }
+};
+
class ForwardKeyTest
: public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
public ::libaom_test::EncoderTest {
protected:
ForwardKeyTest()
: EncoderTest(GET_PARAM(0)), encoding_mode_(GET_PARAM(1)),
- kf_max_dist_(GET_PARAM(2)) {}
+ kf_max_dist_ind_(GET_PARAM(2)) {}
virtual ~ForwardKeyTest() {}
virtual void SetUp() {
@@ -31,11 +42,25 @@
const aom_rational timebase = { 1, 30 };
cfg_.g_timebase = timebase;
cpu_used_ = 2;
+ kf_max_dist_ = kTestParams[kf_max_dist_ind_].max_kf_dist;
+ psnr_threshold = kTestParams[kf_max_dist_ind_].psnr_thresh;
cfg_.rc_end_usage = AOM_VBR;
cfg_.rc_target_bitrate = 200;
cfg_.g_lag_in_frames = 10;
cfg_.fwd_kf_enabled = 1;
+ cfg_.kf_max_dist = kf_max_dist_;
cfg_.g_threads = 0;
+ init_flags_ = AOM_CODEC_USE_PSNR;
+ }
+
+ virtual void BeginPassHook(unsigned int) {
+ psnr_ = 0.0;
+ nframes_ = 0;
+ }
+
+ virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
+ psnr_ += pkt->data.psnr.psnr[0];
+ nframes_++;
}
virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
@@ -50,23 +75,34 @@
}
}
+ double GetAveragePsnr() const {
+ if (nframes_) return psnr_ / nframes_;
+ return 0.0;
+ }
+
+ double GetPsnrThreshold() { return psnr_threshold; }
+
::libaom_test::TestMode encoding_mode_;
+ const int kf_max_dist_ind_;
+ double psnr_threshold;
int kf_max_dist_;
int cpu_used_;
+ int nframes_;
+ double psnr_;
};
TEST_P(ForwardKeyTest, ForwardKeyEncodeTest) {
- const int n_frames = 20;
libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
cfg_.g_timebase.den, cfg_.g_timebase.num,
- 0, n_frames);
- cfg_.kf_max_dist = kf_max_dist_;
+ 0, 20);
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
// TODO(sarahparker) Add functionality to assert the minimum number of
// keyframes were placed.
+ EXPECT_GT(GetAveragePsnr(), GetPsnrThreshold())
+ << "kf max dist = " << kf_max_dist_;
}
-AV1_INSTANTIATE_TEST_CASE(ForwardKeyTest,
- ::testing::Values(::libaom_test::kTwoPassGood),
- ::testing::Values(4, 6, 8, 12, 16, 18));
+AV1_INSTANTIATE_TEST_CASE(
+ ForwardKeyTest, ::testing::Values(::libaom_test::kTwoPassGood),
+ ::testing::Range(0, static_cast<int>(GTEST_ARRAY_SIZE_(kTestParams))));
} // namespace