Add warning about timestamp non-monotonicity in the frame buffer.

BUG=None

Review-Url: https://codereview.webrtc.org/2844643002
Cr-Commit-Position: refs/heads/master@{#17910}
This commit is contained in:
brandtr
2017-04-27 07:07:27 -07:00
committed by Commit bot
parent ace5c8836d
commit 9078d8cf05

View File

@ -141,8 +141,35 @@ FrameBuffer::ReturnReason FrameBuffer::NextFrame(
}
UpdateJitterDelay();
PropagateDecodability(next_frame_it_->second);
// Sanity check for RTP timestamp monotonicity.
if (last_decoded_frame_it_ != frames_.end()) {
const FrameKey& last_decoded_frame_key = last_decoded_frame_it_->first;
const FrameKey& frame_key = next_frame_it_->first;
const bool frame_is_higher_spatial_layer_of_last_decoded_frame =
last_decoded_frame_timestamp_ == frame->timestamp &&
last_decoded_frame_key.picture_id == frame_key.picture_id &&
last_decoded_frame_key.spatial_layer < frame_key.spatial_layer;
if (AheadOrAt(last_decoded_frame_timestamp_, frame->timestamp) &&
!frame_is_higher_spatial_layer_of_last_decoded_frame) {
// TODO(brandtr): Consider clearing the entire buffer when we hit
// these conditions.
LOG(LS_WARNING) << "Frame with (timestamp:picture_id:spatial_id) ("
<< frame->timestamp << ":" << frame->picture_id << ":"
<< static_cast<int>(frame->spatial_layer) << ")"
<< " sent to decoder after frame with"
<< " (timestamp:picture_id:spatial_id) ("
<< last_decoded_frame_timestamp_ << ":"
<< last_decoded_frame_key.picture_id << ":"
<< static_cast<int>(
last_decoded_frame_key.spatial_layer)
<< ").";
}
}
AdvanceLastDecodedFrame(next_frame_it_);
last_decoded_frame_timestamp_ = frame->timestamp;
*frame_out = std::move(frame);