From 00032698ac9953828112b8e011445cd2b9a44b83 Mon Sep 17 00:00:00 2001 From: philipel Date: Fri, 17 Apr 2020 15:08:35 +0200 Subject: [PATCH] Clean up old GoPs when the RTP sequence number jump. Bug: chromium:1065699 Change-Id: I2ed853559858ef82c6eb03b366cd77e8b3b0e799 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/173703 Reviewed-by: Danil Chapovalov Commit-Queue: Philip Eliasson Cr-Commit-Position: refs/heads/master@{#31102} --- modules/video_coding/rtp_frame_reference_finder.cc | 6 +++--- modules/video_coding/rtp_frame_reference_finder_unittest.cc | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/video_coding/rtp_frame_reference_finder.cc b/modules/video_coding/rtp_frame_reference_finder.cc index ce0811b83e..bdef991b8b 100644 --- a/modules/video_coding/rtp_frame_reference_finder.cc +++ b/modules/video_coding/rtp_frame_reference_finder.cc @@ -173,9 +173,9 @@ void RtpFrameReferenceFinder::UpdateLastPictureIdWithPadding(uint16_t seq_num) { // the keyframe they belong to due to wrapping sequence number. In order // to prevent this we advance the picture id of the keyframe every so often. if (ForwardDiff(gop_seq_num_it->first, seq_num) > 10000) { - RTC_DCHECK_EQ(1ul, last_seq_num_gop_.size()); - last_seq_num_gop_[seq_num] = gop_seq_num_it->second; - last_seq_num_gop_.erase(gop_seq_num_it); + auto save = gop_seq_num_it->second; + last_seq_num_gop_.clear(); + last_seq_num_gop_[seq_num] = save; } } diff --git a/modules/video_coding/rtp_frame_reference_finder_unittest.cc b/modules/video_coding/rtp_frame_reference_finder_unittest.cc index ca3c7138c4..9ded6bcb96 100644 --- a/modules/video_coding/rtp_frame_reference_finder_unittest.cc +++ b/modules/video_coding/rtp_frame_reference_finder_unittest.cc @@ -308,6 +308,12 @@ TEST_F(TestRtpFrameReferenceFinder, AdvanceSavedKeyframe) { EXPECT_EQ(6UL, frames_from_callback_.size()); } +TEST_F(TestRtpFrameReferenceFinder, AdvanceSavedKeyframeBigJump) { + InsertVp9Flex(0, 0, true); + InsertVp9Flex(1, 1, true); + reference_finder_->PaddingReceived(32768); +} + TEST_F(TestRtpFrameReferenceFinder, ClearTo) { uint16_t sn = Rand();