Stop always predicting from last keyframe in the 3TL VP8 case.

Bug: webrtc:10314
Change-Id: I510c84cce0ec05ad8ef977d57cba9585aabc0538
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131141
Reviewed-by: Elad Alon <eladalon@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27441}
diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers.cc b/modules/video_coding/codecs/vp8/default_temporal_layers.cc
index abab490..27a801b 100644
--- a/modules/video_coding/codecs/vp8/default_temporal_layers.cc
+++ b/modules/video_coding/codecs/vp8/default_temporal_layers.cc
@@ -177,14 +177,14 @@
         // TL0 also references and updates the 'last' buffer.
         // TL1 also references 'last' and references and updates 'golden'.
         // TL2 references both 'last' and 'golden' but updates no buffer.
-        return {{"SSS", {kReferenceAndUpdate, kNone, kReference}},
-                {"--D", {kReference, kNone, kReference, kFreezeEntropy}},
-                {"-SS", {kReference, kUpdate, kReference}},
-                {"--D", {kReference, kReference, kReference, kFreezeEntropy}},
-                {"SRR", {kReferenceAndUpdate, kNone, kReference}},
-                {"--D", {kReference, kReference, kReference, kFreezeEntropy}},
-                {"-DS", {kReference, kReferenceAndUpdate, kReference}},
-                {"--D", {kReference, kReference, kReference, kFreezeEntropy}}};
+        return {{"SSS", {kReferenceAndUpdate, kNone, kNone}},
+                {"--D", {kReference, kNone, kNone, kFreezeEntropy}},
+                {"-SS", {kReference, kUpdate, kNone}},
+                {"--D", {kReference, kReference, kNone, kFreezeEntropy}},
+                {"SRR", {kReferenceAndUpdate, kNone, kNone}},
+                {"--D", {kReference, kReference, kNone, kFreezeEntropy}},
+                {"-DS", {kReference, kReferenceAndUpdate, kNone}},
+                {"--D", {kReference, kReference, kNone, kFreezeEntropy}}};
       }
     case 4:
       // TL0 references and updates only the 'last' buffer.
diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc b/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc
index 608cf18..54e71c4 100644
--- a/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc
+++ b/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc
@@ -170,22 +170,22 @@
   tl.UpdateConfiguration(0, &cfg);
 
   int expected_flags[16] = {
-      kTemporalUpdateLastRefAltRef,
-      kTemporalUpdateNoneNoRefGolden,
-      kTemporalUpdateGoldenWithoutDependencyRefAltRef,
-      kTemporalUpdateNone,
-      kTemporalUpdateLastRefAltRef,
-      kTemporalUpdateNone,
-      kTemporalUpdateGoldenRefAltRef,
-      kTemporalUpdateNone,
-      kTemporalUpdateLastRefAltRef,
-      kTemporalUpdateNoneNoRefGolden,
-      kTemporalUpdateGoldenWithoutDependencyRefAltRef,
-      kTemporalUpdateNone,
-      kTemporalUpdateLastRefAltRef,
-      kTemporalUpdateNone,
-      kTemporalUpdateGoldenRefAltRef,
-      kTemporalUpdateNone,
+      kTemporalUpdateLast,
+      kTemporalUpdateNoneNoRefGoldenAltRef,
+      kTemporalUpdateGoldenWithoutDependency,
+      kTemporalUpdateNoneNoRefAltRef,
+      kTemporalUpdateLast,
+      kTemporalUpdateNoneNoRefAltRef,
+      kTemporalUpdateGolden,
+      kTemporalUpdateNoneNoRefAltRef,
+      kTemporalUpdateLast,
+      kTemporalUpdateNoneNoRefGoldenAltRef,
+      kTemporalUpdateGoldenWithoutDependency,
+      kTemporalUpdateNoneNoRefAltRef,
+      kTemporalUpdateLast,
+      kTemporalUpdateNoneNoRefAltRef,
+      kTemporalUpdateGolden,
+      kTemporalUpdateNoneNoRefAltRef,
   };
   int expected_temporal_idx[16] = {0, 2, 1, 2, 0, 2, 1, 2,
                                    0, 2, 1, 2, 0, 2, 1, 2};
@@ -526,7 +526,7 @@
   tl_config = tl.UpdateLayerConfig(0, timestamp + 1);
   EXPECT_TRUE(tl_config.last_buffer_flags & BufferFlags::kReference);
   EXPECT_FALSE(tl_config.golden_buffer_flags & BufferFlags::kReference);
-  EXPECT_TRUE(tl_config.arf_buffer_flags & BufferFlags::kReference);
+  EXPECT_FALSE(tl_config.arf_buffer_flags & BufferFlags::kReference);
 
   // TL0 base layer frame.
   tl_config = tl.UpdateLayerConfig(0, timestamp + 2);
@@ -547,7 +547,7 @@
   tl_config = tl.UpdateLayerConfig(0, ++timestamp + 1);
   EXPECT_TRUE(tl_config.last_buffer_flags & BufferFlags::kReference);
   EXPECT_TRUE(tl_config.golden_buffer_flags & BufferFlags::kReference);
-  EXPECT_TRUE(tl_config.arf_buffer_flags & BufferFlags::kReference);
+  EXPECT_FALSE(tl_config.arf_buffer_flags & BufferFlags::kReference);
 }
 
 TEST_F(TemporalLayersTest, DoesNotReferenceUnlessGuaranteedToExistLongDelay) {
@@ -627,12 +627,12 @@
 
   int expected_flags[8] = {
       kTemporalUpdateLastRefAltRef,
-      kTemporalUpdateNoneNoRefGolden,
-      kTemporalUpdateGoldenWithoutDependencyRefAltRef,
-      kTemporalUpdateNone,
-      kTemporalUpdateLastRefAltRef,
-      kTemporalUpdateNone,
-      kTemporalUpdateGoldenRefAltRef,
+      kTemporalUpdateNoneNoRefGoldenAltRef,
+      kTemporalUpdateGoldenWithoutDependency,
+      kTemporalUpdateNoneNoRefAltRef,
+      kTemporalUpdateLast,
+      kTemporalUpdateNoneNoRefAltRef,
+      kTemporalUpdateGolden,
       kTemporalUpdateNone,
   };
   int expected_temporal_idx[8] = {0, 2, 1, 2, 0, 2, 1, 2};