Drop VP8 frames older than the last sync frame in the RtpFrameReferenceFinder.

BUG=webrtc:5514

Review-Url: https://codereview.webrtc.org/2392313002
Cr-Commit-Position: refs/heads/master@{#14745}
diff --git a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
index d687a99..a64518a 100644
--- a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
+++ b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc
@@ -298,6 +298,14 @@
       return;
     }
 
+    // If the last frame on this layer is ahead of this frame it means that
+    // a layer sync frame has been received after this frame for the same
+    // base layer frame, drop this frame.
+    if (AheadOf<uint16_t, kPicIdLength>(layer_info_it->second[layer],
+                                        frame->picture_id)) {
+      return;
+    }
+
     // If we have not yet received a frame between this frame and the referenced
     // frame then we have to wait for that frame to be completed first.
     auto not_received_frame_it =
@@ -309,6 +317,8 @@
       return;
     }
 
+    RTC_DCHECK((AheadOf<uint16_t, kPicIdLength>(frame->picture_id,
+                                               layer_info_it->second[layer])));
     ++frame->num_references;
     frame->references[layer] = layer_info_it->second[layer];
   }