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

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

Issue 2480293002: New jitter buffer experiment. (Closed)
Patch Set: Feedback Fixes. Created 4 years, 1 month 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
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 58ad31e50cefda7c959cdeffb08d22b61e795c94..341fb293268d379776bdab03ca68b47ca1020186 100644
--- a/webrtc/modules/video_coding/packet_buffer.cc
+++ b/webrtc/modules/video_coding/packet_buffer.cc
@@ -188,42 +188,45 @@ bool PacketBuffer::PotentialNewFrame(uint16_t seq_num) const {
}
void PacketBuffer::FindFrames(uint16_t seq_num) {
- while (PotentialNewFrame(seq_num)) {
- size_t index = seq_num % size_;
- sequence_buffer_[index].continuous = true;
-
- // If all packets of the frame is continuous, find the first packet of the
- // frame and create an RtpFrameObject.
- if (sequence_buffer_[index].frame_end) {
- size_t frame_size = 0;
- int max_nack_count = -1;
- uint16_t start_seq_num = seq_num;
-
- // Find the start index by searching backward until the packet with
- // the |frame_begin| flag is set.
- int start_index = index;
- while (true) {
- frame_size += data_buffer_[start_index].sizeBytes;
- max_nack_count = std::max(
- max_nack_count, data_buffer_[start_index].timesNacked);
- sequence_buffer_[start_index].frame_created = true;
-
- if (sequence_buffer_[start_index].frame_begin)
- break;
-
- start_index = start_index > 0 ? start_index - 1 : size_ - 1;
- start_seq_num--;
+ std::vector<std::unique_ptr<RtpFrameObject>> found_frames;
+ {
+ rtc::CritScope lock(&crit_);
+ while (PotentialNewFrame(seq_num)) {
+ size_t index = seq_num % size_;
+ sequence_buffer_[index].continuous = true;
+
+ // If all packets of the frame is continuous, find the first packet of the
+ // frame and create an RtpFrameObject.
+ if (sequence_buffer_[index].frame_end) {
+ size_t frame_size = 0;
+ int max_nack_count = -1;
+ uint16_t start_seq_num = seq_num;
+
+ // Find the start index by searching backward until the packet with
+ // the |frame_begin| flag is set.
+ int start_index = index;
+ while (true) {
+ frame_size += data_buffer_[start_index].sizeBytes;
+ max_nack_count =
+ std::max(max_nack_count, data_buffer_[start_index].timesNacked);
+ sequence_buffer_[start_index].frame_created = true;
+
+ if (sequence_buffer_[start_index].frame_begin)
+ break;
+
+ start_index = start_index > 0 ? start_index - 1 : size_ - 1;
+ start_seq_num--;
+ }
+
+ found_frames.emplace_back(
+ new RtpFrameObject(this, start_seq_num, seq_num, frame_size,
+ max_nack_count, clock_->TimeInMilliseconds()));
}
-
- std::unique_ptr<RtpFrameObject> frame(
- new RtpFrameObject(this, start_seq_num, seq_num, frame_size,
- max_nack_count, clock_->TimeInMilliseconds()));
-
- received_frame_callback_->OnReceivedFrame(std::move(frame));
+ ++seq_num;
}
-
- ++seq_num;
}
+ for (auto& frame : found_frames)
+ received_frame_callback_->OnReceivedFrame(std::move(frame));
}
void PacketBuffer::ReturnFrame(RtpFrameObject* frame) {
@@ -267,7 +270,6 @@ bool PacketBuffer::GetBitstream(const RtpFrameObject& frame,
}
VCMPacket* PacketBuffer::GetPacket(uint16_t seq_num) {
- rtc::CritScope lock(&crit_);
size_t index = seq_num % size_;
if (!sequence_buffer_[index].used ||
seq_num != sequence_buffer_[index].seq_num) {
« no previous file with comments | « webrtc/modules/video_coding/packet_buffer.h ('k') | webrtc/modules/video_coding/rtp_frame_reference_finder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698