Request a new key frame if packet buffer is cleared
Bug: webrtc:10843
Change-Id: I1eab0891f3e68b7d504dc637790604a25c243856
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147721
Commit-Queue: Johannes Kron <kron@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28735}
diff --git a/modules/video_coding/packet_buffer.cc b/modules/video_coding/packet_buffer.cc
index 0d7a828..e487f8c 100644
--- a/modules/video_coding/packet_buffer.cc
+++ b/modules/video_coding/packet_buffer.cc
@@ -82,11 +82,11 @@
first_packet_received_ = true;
} else if (AheadOf(first_seq_num_, seq_num)) {
// If we have explicitly cleared past this packet then it's old,
- // don't insert it.
+ // don't insert it, just silently ignore it.
if (is_cleared_to_first_seq_num_) {
delete[] packet->dataPtr;
packet->dataPtr = nullptr;
- return false;
+ return true;
}
first_seq_num_ = seq_num;
@@ -105,8 +105,12 @@
}
index = seq_num % size_;
- // Packet buffer is still full.
+ // Packet buffer is still full since we were unable to expand the buffer.
if (sequence_buffer_[index].used) {
+ // Clear the buffer, delete payload, and return false to signal that a
+ // new keyframe is needed.
+ RTC_LOG(LS_WARNING) << "Clear PacketBuffer and request key frame.";
+ Clear();
delete[] packet->dataPtr;
packet->dataPtr = nullptr;
return false;
@@ -224,8 +228,7 @@
bool PacketBuffer::ExpandBufferSize() {
if (size_ == max_size_) {
RTC_LOG(LS_WARNING) << "PacketBuffer is already at max size (" << max_size_
- << "), failed to increase size. Clearing PacketBuffer.";
- Clear();
+ << "), failed to increase size.";
return false;
}