From e95b78bd8da556fe85d1603f6ef5558e50c81189 Mon Sep 17 00:00:00 2001 From: tommi Date: Sun, 14 May 2017 07:23:11 -0700 Subject: [PATCH] Add a couple of checks to FrameBuffer while we're continuing to look at RtpFrameReferenceFinder. BUG=chromium:679306 TBR=terelius@webrtc.org, philipel@webrtc.org Review-Url: https://codereview.webrtc.org/2879073002 Cr-Commit-Position: refs/heads/master@{#18140} --- webrtc/modules/video_coding/frame_buffer2.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/webrtc/modules/video_coding/frame_buffer2.cc b/webrtc/modules/video_coding/frame_buffer2.cc index 8d86a6412a..584c2f03c4 100644 --- a/webrtc/modules/video_coding/frame_buffer2.cc +++ b/webrtc/modules/video_coding/frame_buffer2.cc @@ -345,11 +345,15 @@ void FrameBuffer::PropagateContinuity(FrameMap::iterator start) { void FrameBuffer::PropagateDecodability(const FrameInfo& info) { TRACE_EVENT0("webrtc", "FrameBuffer::PropagateDecodability"); + RTC_CHECK(info.num_dependent_frames < FrameInfo::kMaxNumDependentFrames); for (size_t d = 0; d < info.num_dependent_frames; ++d) { auto ref_info = frames_.find(info.dependent_frames[d]); RTC_DCHECK(ref_info != frames_.end()); - RTC_DCHECK_GT(ref_info->second.num_missing_decodable, 0U); - --ref_info->second.num_missing_decodable; + // TODO(philipel): Look into why we've seen this happen. + if (ref_info != frames_.end()) { + RTC_DCHECK_GT(ref_info->second.num_missing_decodable, 0U); + --ref_info->second.num_missing_decodable; + } } } @@ -418,7 +422,14 @@ bool FrameBuffer::UpdateFrameInfoWithIncomingFrame(const FrameObject& frame, // frames are inserted or decoded. ref_info->second.dependent_frames[ref_info->second.num_dependent_frames] = key; - ++ref_info->second.num_dependent_frames; + RTC_DCHECK_LT(ref_info->second.num_dependent_frames, + (FrameInfo::kMaxNumDependentFrames - 1)); + // TODO(philipel): Look into why this could happen and handle + // appropriately. + if (ref_info->second.num_dependent_frames < + (FrameInfo::kMaxNumDependentFrames - 1)) { + ++ref_info->second.num_dependent_frames; + } } RTC_DCHECK_LE(ref_info->second.num_missing_continuous, ref_info->second.num_missing_decodable);