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();