Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: webrtc/modules/video_coding/packet_buffer.cc

Issue 2868723003: Break backwards traversal loop if we have looped around all packet in the PacketBuffer for H264 fra… (Closed)
Patch Set: Added comment. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | webrtc/modules/video_coding/video_packet_buffer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/video_coding/packet_buffer.cc
diff --git a/webrtc/modules/video_coding/packet_buffer.cc b/webrtc/modules/video_coding/packet_buffer.cc
index 3b0d09f042efc77ec7cb77a92b33877d0493237a..ff013e00102894a9b5621dd083b57e656e52f5ab 100644
--- a/webrtc/modules/video_coding/packet_buffer.cc
+++ b/webrtc/modules/video_coding/packet_buffer.cc
@@ -197,8 +197,7 @@ bool PacketBuffer::PotentialNewFrame(uint16_t seq_num) const {
std::vector<std::unique_ptr<RtpFrameObject>> PacketBuffer::FindFrames(
uint16_t seq_num) {
std::vector<std::unique_ptr<RtpFrameObject>> found_frames;
- size_t packets_tested = 0;
- while (packets_tested < size_ && PotentialNewFrame(seq_num)) {
+ for (size_t i = 0; i < size_ && PotentialNewFrame(seq_num); ++i) {
size_t index = seq_num % size_;
sequence_buffer_[index].continuous = true;
@@ -215,7 +214,10 @@ std::vector<std::unique_ptr<RtpFrameObject>> PacketBuffer::FindFrames(
bool is_h264 = data_buffer_[start_index].codec == kVideoCodecH264;
int64_t frame_timestamp = data_buffer_[start_index].timestamp;
- while (true) {
+
+ // Since packet at |data_buffer_[index]| is already part of the frame
+ // we will have at most |size_ - 1| packets left to check.
+ for (size_t j = 0; j < size_ - 1; ++j) {
frame_size += data_buffer_[start_index].sizeBytes;
max_nack_count =
std::max(max_nack_count, data_buffer_[start_index].timesNacked);
@@ -232,12 +234,7 @@ std::vector<std::unique_ptr<RtpFrameObject>> PacketBuffer::FindFrames(
// the timestamp of that packet is the same as this one. This may cause
// the PacketBuffer to hand out incomplete frames.
// See: https://bugs.chromium.org/p/webrtc/issues/detail?id=7106
- //
- // Since we ignore the |frame_begin| flag of the inserted packets
- // we check that |start_index != static_cast<int>(index)| to make sure
- // that we don't get stuck in a loop if the packet buffer is filled
- // with packets of the same timestamp.
- if (is_h264 && start_index != static_cast<int>(index) &&
+ if (is_h264 &&
(!sequence_buffer_[start_index].used ||
data_buffer_[start_index].timestamp != frame_timestamp)) {
break;
@@ -251,7 +248,6 @@ std::vector<std::unique_ptr<RtpFrameObject>> PacketBuffer::FindFrames(
max_nack_count, clock_->TimeInMilliseconds()));
}
++seq_num;
- ++packets_tested;
}
return found_frames;
}
« no previous file with comments | « no previous file | webrtc/modules/video_coding/video_packet_buffer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698