Index: webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc |
index b85d98ae09cfdd6b63b316c8aa0f65baa55c9158..bbe40808aeec852dddd284461e0fff0bcf57d12c 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc |
@@ -364,6 +364,45 @@ TEST(RtpPacketTest, ParseWithoutExtensionManager) { |
EXPECT_EQ(time_offset, kTimeOffset); |
} |
+TEST(RtpPacketTest, ParseDynamicSizeExtension) { |
+ // clang-format off |
+ const uint8_t kPacket1[] = { |
+ 0x90, kPayloadType, 0x00, kSeqNum, |
+ 0x65, 0x43, 0x12, 0x78, // Timestamp. |
+ 0x12, 0x34, 0x56, 0x78, // Ssrc. |
+ 0xbe, 0xde, 0x00, 0x02, // Extensions block of size 2x32bit words. |
+ 0x21, 'H', 'D', // Extension with id = 2, size = (1+1). |
+ 0x12, 'r', 't', 'x', // Extension with id = 1, size = (2+1). |
+ 0x00}; // Extension padding. |
+ const uint8_t kPacket2[] = { |
+ 0x90, kPayloadType, 0x00, kSeqNum, |
+ 0x65, 0x43, 0x12, 0x78, // Timestamp. |
+ 0x12, 0x34, 0x56, 0x79, // Ssrc. |
+ 0xbe, 0xde, 0x00, 0x01, // Extensions block of size 1x32bit words. |
+ 0x11, 'H', 'D', // Extension with id = 1, size = (1+1). |
+ 0x00}; // Extension padding. |
+ // clang-format on |
+ RtpPacketReceived::ExtensionManager extensions; |
+ extensions.Register<RtpStreamId>(1); |
+ extensions.Register<RepairedRtpStreamId>(2); |
+ RtpPacketReceived packet(&extensions); |
+ ASSERT_TRUE(packet.Parse(kPacket1, sizeof(kPacket1))); |
+ |
+ std::string rsid; |
+ EXPECT_TRUE(packet.GetExtension<RtpStreamId>(&rsid)); |
+ EXPECT_EQ(rsid, "rtx"); |
+ |
+ std::string repaired_rsid; |
+ EXPECT_TRUE(packet.GetExtension<RepairedRtpStreamId>(&repaired_rsid)); |
+ EXPECT_EQ(repaired_rsid, "HD"); |
+ |
+ // Parse another packet with RtpStreamId extension of different size. |
+ ASSERT_TRUE(packet.Parse(kPacket2, sizeof(kPacket2))); |
+ EXPECT_TRUE(packet.GetExtension<RtpStreamId>(&rsid)); |
+ EXPECT_EQ(rsid, "HD"); |
+ EXPECT_FALSE(packet.GetExtension<RepairedRtpStreamId>(&repaired_rsid)); |
+} |
+ |
TEST(RtpPacketTest, RawExtensionFunctionsAcceptZeroIdAndReturnFalse) { |
RtpPacketReceived::ExtensionManager extensions; |
RtpPacketReceived packet(&extensions); |