Index: webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc |
index 80f22fc61311eea66bd2a97a55c1fab65034ab5d..dcaa242148901c0d29fd38b1a8aea4661eb48795 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc |
@@ -148,21 +148,23 @@ TEST(RtpHeaderParser, ParseWithOverSizedExtension) { |
EXPECT_EQ(sizeof(kPacket), header.headerLength); |
} |
-TEST(RtpHeaderParser, ParseAll6Extensions) { |
+TEST(RtpHeaderParser, ParseAll8Extensions) { |
const uint8_t kAudioLevel = 0x5a; |
// clang-format off |
const uint8_t kPacket[] = { |
0x90, kPayloadType, 0x00, kSeqNum, |
0x65, 0x43, 0x12, 0x78, // kTimestamp. |
0x12, 0x34, 0x56, 0x78, // kSsrc. |
- 0xbe, 0xde, 0x00, 0x05, // Extension of size 5x32bit word. |
+ 0xbe, 0xde, 0x00, 0x08, // Extension of size 8x32bit words. |
0x40, 0x80|kAudioLevel, // AudioLevel. |
0x22, 0x01, 0x56, 0xce, // TransmissionOffset. |
0x62, 0x12, 0x34, 0x56, // AbsoluteSendTime. |
0x81, 0xce, 0xab, // TransportSequenceNumber. |
0xa0, 0x03, // VideoRotation. |
0xb2, 0x12, 0x48, 0x76, // PlayoutDelayLimits. |
- 0x00, // Padding to 32bit boundary. |
+ 0xc2, 'r', 't', 'x', // RtpStreamId |
+ 0xd5, 's', 't', 'r', 'e', 'a', 'm', // RepairedRtpStreamId |
+ 0x00, 0x00, // Padding to 32bit boundary. |
}; |
// clang-format on |
ASSERT_EQ(sizeof(kPacket) % 4, 0u); |
@@ -174,6 +176,8 @@ TEST(RtpHeaderParser, ParseAll6Extensions) { |
extensions.Register<TransportSequenceNumber>(8); |
extensions.Register<VideoOrientation>(0xa); |
extensions.Register<PlayoutDelayLimits>(0xb); |
+ extensions.Register<RtpStreamId>(0xc); |
+ extensions.Register<RepairedRtpStreamId>(0xd); |
RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket)); |
RTPHeader header; |
@@ -199,6 +203,33 @@ TEST(RtpHeaderParser, ParseAll6Extensions) { |
header.extension.playout_delay.min_ms); |
EXPECT_EQ(0x876 * PlayoutDelayLimits::kGranularityMs, |
header.extension.playout_delay.max_ms); |
+ EXPECT_EQ(header.extension.stream_id, StreamId("rtx")); |
+ EXPECT_EQ(header.extension.repaired_stream_id, StreamId("stream")); |
+} |
+ |
+TEST(RtpHeaderParser, ParseMalformedRsidExtensions) { |
+ // clang-format off |
+ const uint8_t kPacket[] = { |
+ 0x90, kPayloadType, 0x00, kSeqNum, |
+ 0x65, 0x43, 0x12, 0x78, // kTimestamp. |
+ 0x12, 0x34, 0x56, 0x78, // kSsrc. |
+ 0xbe, 0xde, 0x00, 0x03, // Extension of size 3x32bit words. |
+ 0xc2, '\0', 't', 'x', // empty RtpStreamId |
+ 0xd5, 's', 't', 'r', '\0', 'a', 'm', // RepairedRtpStreamId |
+ 0x00, // Padding to 32bit boundary. |
+ }; |
+ // clang-format on |
+ ASSERT_EQ(sizeof(kPacket) % 4, 0u); |
+ |
+ RtpHeaderExtensionMap extensions; |
+ extensions.Register<RtpStreamId>(0xc); |
+ extensions.Register<RepairedRtpStreamId>(0xd); |
+ RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket)); |
+ RTPHeader header; |
+ |
+ EXPECT_TRUE(parser.Parse(&header, &extensions)); |
+ EXPECT_TRUE(header.extension.stream_id.empty()); |
+ EXPECT_EQ(header.extension.repaired_stream_id, StreamId("str")); |
} |
TEST(RtpHeaderParser, ParseWithCsrcsExtensionAndPadding) { |