Only advance |first_seq_num_| if packets are explicitly cleared from the PacketBuffer.
In this CL:
- Don't insert a packet if we have explicitly cleared past it.
- Added some logging to ExpandBufferSize.
- Renamed IsContinuous to PotentialNewFrame.
- Unittests updated/added for this new behavior.
- Refactored TestPacketBuffer unittests.
BUG=webrtc:5514
R=danilchap@webrtc.org, stefan@webrtc.org
Review URL: https://codereview.webrtc.org/2399373002 .
Cr-Commit-Position: refs/heads/master@{#14871}
diff --git a/webrtc/modules/video_coding/packet_buffer.h b/webrtc/modules/video_coding/packet_buffer.h
index 34a2d40..15645f6 100644
--- a/webrtc/modules/video_coding/packet_buffer.h
+++ b/webrtc/modules/video_coding/packet_buffer.h
@@ -48,7 +48,8 @@
virtual ~PacketBuffer();
- // Made virtual for testing.
+ // Returns true if |packet| is inserted into the packet buffer,
+ // false otherwise. Made virtual for testing.
virtual bool InsertPacket(const VCMPacket& packet);
void ClearTo(uint16_t seq_num);
void Clear();
@@ -94,7 +95,8 @@
bool ExpandBufferSize() EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Test if all previous packets has arrived for the given sequence number.
- bool IsContinuous(uint16_t seq_num) const EXCLUSIVE_LOCKS_REQUIRED(crit_);
+ bool PotentialNewFrame(uint16_t seq_num) const
+ EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Test if all packets of a frame has arrived, and if so, creates a frame.
// May create multiple frames per invocation.
@@ -127,6 +129,9 @@
// If the packet buffer has received its first packet.
bool first_packet_received_ GUARDED_BY(crit_);
+ // If the buffer is cleared to |first_seq_num_|.
+ bool is_cleared_to_first_seq_num_ GUARDED_BY(crit_);
+
// Buffer that holds the inserted packets.
std::vector<VCMPacket> data_buffer_ GUARDED_BY(crit_);