Index: webrtc/modules/video_coding/frame_buffer2.cc |
diff --git a/webrtc/modules/video_coding/frame_buffer2.cc b/webrtc/modules/video_coding/frame_buffer2.cc |
index b68346113592e6134e1cafe0fcfca1ffffdb1794..6b7ab6db9ddc1e7daa962d54cfdef12203100915 100644 |
--- a/webrtc/modules/video_coding/frame_buffer2.cc |
+++ b/webrtc/modules/video_coding/frame_buffer2.cc |
@@ -318,11 +318,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; |
+ } |
} |
} |
@@ -391,7 +395,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); |