Fixed bug in PacketBuffer to correctly detect new complete frames after ClearTo has been called.
BUG=webrtc:5514
R=stefan@webrtc.org, terelius@webrtc.org
Review URL: https://codereview.webrtc.org/2527903002 .
Cr-Commit-Position: refs/heads/master@{#15269}
diff --git a/webrtc/modules/video_coding/packet_buffer.cc b/webrtc/modules/video_coding/packet_buffer.cc
index 1b6fecc..c9d787b 100644
--- a/webrtc/modules/video_coding/packet_buffer.cc
+++ b/webrtc/modules/video_coding/packet_buffer.cc
@@ -172,16 +172,8 @@
return false;
if (sequence_buffer_[index].frame_created)
return false;
- if (sequence_buffer_[index].frame_begin &&
- (!sequence_buffer_[prev_index].used ||
- AheadOf(seq_num, sequence_buffer_[prev_index].seq_num))) {
- // The reason we only return true if this packet is the first packet of the
- // frame and the sequence number is newer than the packet with the previous
- // index is because we want to avoid an inifite loop in the case where
- // a single frame containing more packets than the current size of the
- // packet buffer is inserted.
+ if (sequence_buffer_[index].frame_begin)
return true;
- }
if (!sequence_buffer_[prev_index].used)
return false;
if (sequence_buffer_[prev_index].seq_num !=
@@ -197,7 +189,8 @@
std::vector<std::unique_ptr<RtpFrameObject>> PacketBuffer::FindFrames(
uint16_t seq_num) {
std::vector<std::unique_ptr<RtpFrameObject>> found_frames;
- while (PotentialNewFrame(seq_num)) {
+ size_t packets_tested = 0;
+ while (packets_tested < size_ && PotentialNewFrame(seq_num)) {
size_t index = seq_num % size_;
sequence_buffer_[index].continuous = true;
@@ -229,6 +222,7 @@
max_nack_count, clock_->TimeInMilliseconds()));
}
++seq_num;
+ ++packets_tested;
}
return found_frames;
}