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];
}