Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc

Issue 2954503002: Implement FrameMarking header extension support
Patch Set: fix fuzzer Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h" 10 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
(...skipping 15 matching lines...) Expand all
26 constexpr uint32_t kSsrc = 0x12345678; 26 constexpr uint32_t kSsrc = 0x12345678;
27 constexpr uint16_t kSeqNum = 0x1234; 27 constexpr uint16_t kSeqNum = 0x1234;
28 constexpr uint8_t kSeqNumFirstByte = kSeqNum >> 8; 28 constexpr uint8_t kSeqNumFirstByte = kSeqNum >> 8;
29 constexpr uint8_t kSeqNumSecondByte = kSeqNum & 0xff; 29 constexpr uint8_t kSeqNumSecondByte = kSeqNum & 0xff;
30 constexpr uint32_t kTimestamp = 0x65431278; 30 constexpr uint32_t kTimestamp = 0x65431278;
31 constexpr uint8_t kTransmissionOffsetExtensionId = 1; 31 constexpr uint8_t kTransmissionOffsetExtensionId = 1;
32 constexpr uint8_t kAudioLevelExtensionId = 9; 32 constexpr uint8_t kAudioLevelExtensionId = 9;
33 constexpr uint8_t kRtpStreamIdExtensionId = 0xa; 33 constexpr uint8_t kRtpStreamIdExtensionId = 0xa;
34 constexpr uint8_t kRtpMidExtensionId = 0xb; 34 constexpr uint8_t kRtpMidExtensionId = 0xb;
35 constexpr uint8_t kVideoTimingExtensionId = 0xc; 35 constexpr uint8_t kVideoTimingExtensionId = 0xc;
36 constexpr uint8_t kRtpFrameMarkingExtensionId = 8;
36 constexpr int32_t kTimeOffset = 0x56ce; 37 constexpr int32_t kTimeOffset = 0x56ce;
37 constexpr bool kVoiceActive = true; 38 constexpr bool kVoiceActive = true;
38 constexpr uint8_t kAudioLevel = 0x5a; 39 constexpr uint8_t kAudioLevel = 0x5a;
39 constexpr char kStreamId[] = "streamid"; 40 constexpr char kStreamId[] = "streamid";
40 constexpr char kMid[] = "mid"; 41 constexpr char kMid[] = "mid";
41 constexpr size_t kMaxPaddingSize = 224u; 42 constexpr size_t kMaxPaddingSize = 224u;
42 // clang-format off 43 // clang-format off
43 constexpr uint8_t kMinimumPacket[] = { 44 constexpr uint8_t kMinimumPacket[] = {
44 0x80, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte, 45 0x80, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
45 0x65, 0x43, 0x12, 0x78, 46 0x65, 0x43, 0x12, 0x78,
(...skipping 23 matching lines...) Expand all
69 'e', 'a', 'm', 'i', 70 'e', 'a', 'm', 'i',
70 'd' , 0x00, 0x00, 0x00}; 71 'd' , 0x00, 0x00, 0x00};
71 72
72 constexpr uint8_t kPacketWithMid[] = { 73 constexpr uint8_t kPacketWithMid[] = {
73 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte, 74 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
74 0x65, 0x43, 0x12, 0x78, 75 0x65, 0x43, 0x12, 0x78,
75 0x12, 0x34, 0x56, 0x78, 76 0x12, 0x34, 0x56, 0x78,
76 0xbe, 0xde, 0x00, 0x01, 77 0xbe, 0xde, 0x00, 0x01,
77 0xb2, 'm', 'i', 'd'}; 78 0xb2, 'm', 'i', 'd'};
78 79
80 constexpr uint8_t kPacketWithFrameMarks[] = {
81 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
82 0x65, 0x43, 0x12, 0x78,
83 0x12, 0x34, 0x56, 0x78,
84 0xbe, 0xde, 0x00, 0x01,
85 0x80, 0xe0, 0x00, 0x00}; // S:1 E:1 I:1 D:0 TID:0
86
87 constexpr uint8_t kPacketWithFrameMarksSVC[] = {
88 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
89 0x65, 0x43, 0x12, 0x78,
90 0x12, 0x34, 0x56, 0x78,
91 0xbe, 0xde, 0x00, 0x01,
92 0x82, 0xe1, 0x00, 0x00}; // S:1 E:1 I:1 D:0 TID:1
93
94 constexpr uint8_t kPacketWithFrameMarksSVCVP9[] = {
95 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
96 0x65, 0x43, 0x12, 0x78,
97 0x12, 0x34, 0x56, 0x78,
98 0xbe, 0xde, 0x00, 0x01,
99 0x82, 0xe1, 0x1a, 0x00}; // S:1 E:1 I:1 D:0 TID:1 P:1 U:1 SID: 2
100
79 constexpr uint32_t kCsrcs[] = {0x34567890, 0x32435465}; 101 constexpr uint32_t kCsrcs[] = {0x34567890, 0x32435465};
80 constexpr uint8_t kPayload[] = {'p', 'a', 'y', 'l', 'o', 'a', 'd'}; 102 constexpr uint8_t kPayload[] = {'p', 'a', 'y', 'l', 'o', 'a', 'd'};
81 constexpr uint8_t kPacketPaddingSize = 8; 103 constexpr uint8_t kPacketPaddingSize = 8;
82 constexpr uint8_t kPacket[] = { 104 constexpr uint8_t kPacket[] = {
83 0xb2, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte, 105 0xb2, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
84 0x65, 0x43, 0x12, 0x78, 106 0x65, 0x43, 0x12, 0x78,
85 0x12, 0x34, 0x56, 0x78, 107 0x12, 0x34, 0x56, 0x78,
86 0x34, 0x56, 0x78, 0x90, 108 0x34, 0x56, 0x78, 0x90,
87 0x32, 0x43, 0x54, 0x65, 109 0x32, 0x43, 0x54, 0x65,
88 0xbe, 0xde, 0x00, 0x01, 110 0xbe, 0xde, 0x00, 0x01,
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 211
190 TEST(RtpPacketTest, TryToCreateWithLongMid) { 212 TEST(RtpPacketTest, TryToCreateWithLongMid) {
191 RtpPacketToSend::ExtensionManager extensions; 213 RtpPacketToSend::ExtensionManager extensions;
192 constexpr char kLongMid[] = "LoooooooooonogMid"; 214 constexpr char kLongMid[] = "LoooooooooonogMid";
193 ASSERT_EQ(strlen(kLongMid), 17u); 215 ASSERT_EQ(strlen(kLongMid), 17u);
194 extensions.Register<RtpMid>(kRtpMidExtensionId); 216 extensions.Register<RtpMid>(kRtpMidExtensionId);
195 RtpPacketToSend packet(&extensions); 217 RtpPacketToSend packet(&extensions);
196 EXPECT_FALSE(packet.SetExtension<RtpMid>(kLongMid)); 218 EXPECT_FALSE(packet.SetExtension<RtpMid>(kLongMid));
197 } 219 }
198 220
221 TEST(RtpPacketTest, CreateWithFrameMarks) {
222 RtpPacketToSend::ExtensionManager extensions;
223 extensions.Register<FrameMarking>(kRtpFrameMarkingExtensionId);
224 RtpPacketToSend packet(&extensions);
225 packet.SetPayloadType(kPayloadType);
226 packet.SetSequenceNumber(kSeqNum);
227 packet.SetTimestamp(kTimestamp);
228 packet.SetSsrc(kSsrc);
229 FrameMarks frame_marks; // S:1 E:1 I:1 D:0 TID:0
230 frame_marks.start_of_frame = true;
231 frame_marks.end_of_frame = true;
232 frame_marks.independent = true;
233 EXPECT_TRUE(packet.SetExtension<FrameMarking>(frame_marks));
234 EXPECT_THAT(kPacketWithFrameMarks,
235 ElementsAreArray(packet.data(), packet.size()));
236 }
237
238 TEST(RtpPacketTest, CreateWithFrameMarksSVC) {
239 RtpPacketToSend::ExtensionManager extensions;
240 extensions.Register<FrameMarking>(kRtpFrameMarkingExtensionId);
241 RtpPacketToSend packet(&extensions);
242 packet.SetPayloadType(kPayloadType);
243 packet.SetSequenceNumber(kSeqNum);
244 packet.SetTimestamp(kTimestamp);
245 packet.SetSsrc(kSsrc);
246 FrameMarks frame_marks; // S:1 E:1 I:1 D:0 TID:1
247 frame_marks.start_of_frame = true;
248 frame_marks.end_of_frame = true;
249 frame_marks.independent = true;
250 frame_marks.temporal_layer_id = 1;
251 EXPECT_TRUE(packet.SetExtension<FrameMarking>(frame_marks));
252 EXPECT_THAT(kPacketWithFrameMarksSVC,
253 ElementsAreArray(packet.data(), packet.size()));
254 }
255
256 TEST(RtpPacketTest, CreateWithFrameMarksSVCVP9) {
257 RtpPacketToSend::ExtensionManager extensions;
258 extensions.Register<FrameMarking>(kRtpFrameMarkingExtensionId);
259 RtpPacketToSend packet(&extensions);
260 packet.SetPayloadType(kPayloadType);
261 packet.SetSequenceNumber(kSeqNum);
262 packet.SetTimestamp(kTimestamp);
263 packet.SetSsrc(kSsrc);
264 FrameMarks frame_marks; // S:1 E:1 I:1 D:0 TID:1 P:1 U:1 SID: 2
265 frame_marks.start_of_frame = true;
266 frame_marks.end_of_frame = true;
267 frame_marks.independent = true;
268 frame_marks.temporal_layer_id = 1;
269 RTPVideoHeaderVP9 vp9;
270 vp9.spatial_idx = 2;
271 vp9.temporal_up_switch = true;
272 vp9.inter_pic_predicted = true;
273 frame_marks.layer_id = FrameMarking::CreateLayerId(vp9);
274 EXPECT_TRUE(packet.SetExtension<FrameMarking>(frame_marks));
275 EXPECT_THAT(kPacketWithFrameMarksSVCVP9,
276 ElementsAreArray(packet.data(), packet.size()));
277 }
278
199 TEST(RtpPacketTest, CreateWithExtensionsWithoutManager) { 279 TEST(RtpPacketTest, CreateWithExtensionsWithoutManager) {
200 RtpPacketToSend packet(nullptr); 280 RtpPacketToSend packet(nullptr);
201 packet.SetPayloadType(kPayloadType); 281 packet.SetPayloadType(kPayloadType);
202 packet.SetSequenceNumber(kSeqNum); 282 packet.SetSequenceNumber(kSeqNum);
203 packet.SetTimestamp(kTimestamp); 283 packet.SetTimestamp(kTimestamp);
204 packet.SetSsrc(kSsrc); 284 packet.SetSsrc(kSsrc);
205 285
206 auto raw = packet.AllocateRawExtension(kTransmissionOffsetExtensionId, 286 auto raw = packet.AllocateRawExtension(kTransmissionOffsetExtensionId,
207 TransmissionOffset::kValueSizeBytes); 287 TransmissionOffset::kValueSizeBytes);
208 EXPECT_EQ(raw.size(), TransmissionOffset::kValueSizeBytes); 288 EXPECT_EQ(raw.size(), TransmissionOffset::kValueSizeBytes);
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 VideoSendTiming receivied_timing; 637 VideoSendTiming receivied_timing;
558 EXPECT_TRUE(packet.GetExtension<VideoTimingExtension>(&receivied_timing)); 638 EXPECT_TRUE(packet.GetExtension<VideoTimingExtension>(&receivied_timing));
559 639
560 // Check first and last timestamp are still OK. Flags should now be 0. 640 // Check first and last timestamp are still OK. Flags should now be 0.
561 EXPECT_EQ(receivied_timing.encode_start_delta_ms, 1); 641 EXPECT_EQ(receivied_timing.encode_start_delta_ms, 1);
562 EXPECT_EQ(receivied_timing.pacer_exit_delta_ms, 4); 642 EXPECT_EQ(receivied_timing.pacer_exit_delta_ms, 4);
563 EXPECT_EQ(receivied_timing.flags, 0); 643 EXPECT_EQ(receivied_timing.flags, 0);
564 } 644 }
565 645
566 } // namespace webrtc 646 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_packet.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698