Index: webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc |
index 76b51df0ef3b63cf76ece586e0ee1acc4969f20f..ceb911d3089785c59d2bdea9bf00be77ac558f03 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc |
@@ -454,5 +454,29 @@ TEST(RtcpPacketTest, TransportFeedback_Padding) { |
EXPECT_EQ(kExpectedSizeWords * 4, packet->Length()); // Padding not included. |
} |
+TEST(RtcpPacketTest, TransportFeedback_CorrectlySplitsVectorChunks) { |
+ const int kOneBitVectorCapacity = 14; |
+ const int64_t kLargeTimeDelta = |
+ TransportFeedback::kDeltaScaleFactor * (1 << 8); |
+ |
+ // Test that a number of small deltas followed by a large delta results in a |
+ // correct split into multiple chunks, as needed. |
+ |
+ for (int deltas = 0; deltas <= kOneBitVectorCapacity + 1; ++deltas) { |
+ TransportFeedback feedback; |
+ feedback.WithBase(0, 0); |
+ for (int i = 0; i < deltas; ++i) |
+ feedback.WithReceivedPacket(i, i * 1000); |
+ feedback.WithReceivedPacket(deltas, deltas * 1000 + kLargeTimeDelta); |
+ |
+ rtc::scoped_ptr<rtcp::RawPacket> serialized_packet = feedback.Build(); |
+ EXPECT_TRUE(serialized_packet.get() != nullptr); |
+ rtc::scoped_ptr<TransportFeedback> deserialized_packet = |
+ TransportFeedback::ParseFrom(serialized_packet->Buffer(), |
+ serialized_packet->Length()); |
+ EXPECT_TRUE(deserialized_packet.get() != nullptr); |
+ } |
+} |
+ |
} // namespace |
} // namespace webrtc |