Add a test for drop frame encode
Added a test that reproduces the assertion failure related
to buf->display_idx in init_gop_frames_for_tpl() and the
reported segmentation fault while encoding with drop frames.
BUG=aomedia:3372
Change-Id: Iab0ec663bd1f03983a58fe54d799f5a0b5feb5f4
diff --git a/test/datarate_test.cc b/test/datarate_test.cc
index 93ce934..06537f1 100644
--- a/test/datarate_test.cc
+++ b/test/datarate_test.cc
@@ -587,6 +587,45 @@
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
}
+// Params: test mode, speed, threads.
+class DropFrameEncodeTest
+ : public ::libaom_test::CodecTestWith3Params<libaom_test::TestMode, int,
+ unsigned int>,
+ public DatarateTest {
+ public:
+ DropFrameEncodeTest() : DatarateTest(GET_PARAM(0)) {
+ set_cpu_used_ = GET_PARAM(2);
+ threads_ = GET_PARAM(3);
+ }
+
+ protected:
+ virtual ~DropFrameEncodeTest() {}
+
+ virtual void SetUp() {
+ InitializeConfig(GET_PARAM(1));
+ ResetModel();
+ }
+
+ unsigned int threads_;
+};
+
+// Test to reproduce the assertion failure related to buf->display_idx in
+// init_gop_frames_for_tpl() and segmentation fault reported in aomedia:3372
+// while encoding with --drop-frame=1.
+TEST_P(DropFrameEncodeTest, TestNoMisMatch) {
+ cfg_.rc_end_usage = AOM_CBR;
+ cfg_.rc_buf_sz = 1;
+ cfg_.g_pass = AOM_RC_ONE_PASS;
+ cfg_.rc_dropframe_thresh = 1;
+ cfg_.g_threads = threads_;
+
+ ::libaom_test::I420VideoSource video("test_input_w1h1.yuv", 1, 1, 30, 1, 0,
+ 50);
+
+ ResetModel();
+ ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
+}
+
AV1_INSTANTIATE_TEST_SUITE(DatarateTestLarge,
::testing::Values(::libaom_test::kRealTime),
::testing::Range(5, 7), ::testing::Values(0, 3),
@@ -614,5 +653,11 @@
::testing::Values(
static_cast<const libaom_test::CodecFactory *>(&libaom_test::kAV1)));
+// TODO(aomedia:3420): Enable this unit-test for cpu-used >=3 once FPE error is
+// fixed.
+AV1_INSTANTIATE_TEST_SUITE(DropFrameEncodeTest,
+ ::testing::Values(::libaom_test::kOnePassGood),
+ ::testing::Range(0, 3), ::testing::Values(1, 4));
+
} // namespace
} // namespace datarate_test