| 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 fcd523820f0ef7825b7edaacb63b7e33460e8d2c..acc1bb83c5a0e448e030d42b98eab5d25315b0a1 100644
|
| --- a/webrtc/modules/video_coding/frame_buffer2.cc
|
| +++ b/webrtc/modules/video_coding/frame_buffer2.cc
|
| @@ -93,7 +93,8 @@ FrameBuffer::ReturnReason FrameBuffer::NextFrame(
|
| if (continuous_end_it != frames_.end())
|
| ++continuous_end_it;
|
|
|
| - for (; frame_it != continuous_end_it; ++frame_it) {
|
| + for (; frame_it != continuous_end_it && frame_it != frames_.end();
|
| + ++frame_it) {
|
| if (!frame_it->second.continuous ||
|
| frame_it->second.num_missing_decodable > 0) {
|
| continue;
|
| @@ -233,6 +234,17 @@ int FrameBuffer::InsertFrame(std::unique_ptr<FrameObject> frame) {
|
| }
|
| }
|
|
|
| + // Test if inserting this frame would cause the order of the frames to become
|
| + // ambiguous (covering more than half the interval of 2^16). This can happen
|
| + // when the picture id make large jumps mid stream.
|
| + if (!frames_.empty() &&
|
| + key < frames_.begin()->first &&
|
| + frames_.rbegin()->first < key) {
|
| + LOG(LS_WARNING) << "A jump in picture id was detected, clearing buffer.";
|
| + ClearFramesAndHistory();
|
| + last_continuous_picture_id = -1;
|
| + }
|
| +
|
| auto info = frames_.insert(std::make_pair(key, FrameInfo())).first;
|
|
|
| if (info->second.frame) {
|
|
|