Add an S-frame test
Tests that frames after an S-frame are always parse-able,
even though there may be mismatches.
Change-Id: I4d6c5b252d5d1396422be6da57e4f904895d1c40
diff --git a/test/error_resilience_test.cc b/test/error_resilience_test.cc
index 2bd75ef..825438f 100644
--- a/test/error_resilience_test.cc
+++ b/test/error_resilience_test.cc
@@ -337,5 +337,39 @@
EXPECT_EQ(GetMismatchFrames(), num_nomfmv_frames + 1);
}
+// Check for ParseAbility property of an S frame.
+// Encode an S-frame. If frames are dropped before the S-frame, all frames
+// starting from the S frame should be parse-able.
+TEST_P(ErrorResilienceTestLarge, SFrameTest) {
+ // TODO(sarahparker, debargha): Make control setting work correctly for
+ // lag_in_frames > 0
+ SetupEncoder(500, 0);
+
+ libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
+ cfg_.g_timebase.den, cfg_.g_timebase.num,
+ 0, 15);
+
+ SetAllowMismatch(1);
+
+ // Set an arbitrary S-frame
+ unsigned int num_s_frames = 1;
+ unsigned int s_frame_list[] = { 7 };
+ SetSFrames(num_s_frames, s_frame_list);
+
+ // Set a few frames before the S frame that are lost (not decoded)
+ unsigned int num_error_frames = 4;
+ unsigned int error_frame_list[] = { 3, 4, 5, 6 };
+ SetErrorFrames(num_error_frames, error_frame_list);
+
+ ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
+ std::cout << " Encoded frames: " << GetEncodedFrames() << "\n";
+ std::cout << " Decoded frames: " << GetDecodedFrames() << "\n";
+ std::cout << " Mismatch frames: " << GetMismatchFrames() << "\n";
+ EXPECT_EQ(GetEncodedFrames() - GetDecodedFrames(), num_error_frames);
+ // All frames following the S-frame and the S-frame are expected to have
+ // mismatches, but still be parse-able.
+ EXPECT_EQ(GetMismatchFrames(), GetEncodedFrames() - s_frame_list[0]);
+}
+
AV1_INSTANTIATE_TEST_CASE(ErrorResilienceTestLarge, NONREALTIME_TEST_MODES);
} // namespace