Don't decode frames with an older timestamp than the last decoded timestamp.
This change prevents decoding corruption by not allowing keyframes with a
newer frame id but an older timestamp to be decoded. This does not handle
reordering well.
Bug: none
Change-Id: I4a67ca84ee86a782da74a10530c531d893d3bd3c
Reviewed-on: https://webrtc-review.googlesource.com/c/107304
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25292}
diff --git a/modules/video_coding/frame_buffer2_unittest.cc b/modules/video_coding/frame_buffer2_unittest.cc
index 357ba86..f2a892b 100644
--- a/modules/video_coding/frame_buffer2_unittest.cc
+++ b/modules/video_coding/frame_buffer2_unittest.cc
@@ -600,5 +600,21 @@
ExtractFrame(0, true);
}
+TEST_F(TestFrameBuffer2, DontDecodeOlderTimestamp) {
+ InsertFrame(2, 0, 1, false);
+ InsertFrame(1, 0, 2, false); // Older picture id but newer timestamp.
+ ExtractFrame(0);
+ ExtractFrame(0);
+ CheckFrame(0, 1, 0);
+ CheckNoFrame(1);
+
+ InsertFrame(3, 0, 4, false);
+ InsertFrame(4, 0, 3, false); // Newer picture id but older timestamp.
+ ExtractFrame(0);
+ ExtractFrame(0);
+ CheckFrame(2, 3, 0);
+ CheckNoFrame(3);
+}
+
} // namespace video_coding
} // namespace webrtc