| 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 8d86a6412a076f295f22b4546b84d21d3189651c..584c2f03c4c2af81505023e2c70fa5d4b66bf232 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);
|
|
|