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

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

Issue 3000753002: Add a flags field to video timing extension. (Closed)
Patch Set: Final rebase try Created 3 years, 4 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 14 matching lines...) Expand all
25 constexpr int8_t kPayloadType = 100; 25 constexpr int8_t kPayloadType = 100;
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 int32_t kTimeOffset = 0x56ce; 36 constexpr int32_t kTimeOffset = 0x56ce;
36 constexpr bool kVoiceActive = true; 37 constexpr bool kVoiceActive = true;
37 constexpr uint8_t kAudioLevel = 0x5a; 38 constexpr uint8_t kAudioLevel = 0x5a;
38 constexpr char kStreamId[] = "streamid"; 39 constexpr char kStreamId[] = "streamid";
39 constexpr char kMid[] = "mid"; 40 constexpr char kMid[] = "mid";
40 constexpr size_t kMaxPaddingSize = 224u; 41 constexpr size_t kMaxPaddingSize = 224u;
41 // clang-format off 42 // clang-format off
42 constexpr uint8_t kMinimumPacket[] = { 43 constexpr uint8_t kMinimumPacket[] = {
43 0x80, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte, 44 0x80, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
44 0x65, 0x43, 0x12, 0x78, 45 0x65, 0x43, 0x12, 0x78,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 'p', 'a', 'd', 'd', 'i', 'n', 'g', kPacketPaddingSize}; 91 'p', 'a', 'd', 'd', 'i', 'n', 'g', kPacketPaddingSize};
91 92
92 constexpr uint8_t kPacketWithInvalidExtension[] = { 93 constexpr uint8_t kPacketWithInvalidExtension[] = {
93 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte, 94 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
94 0x65, 0x43, 0x12, 0x78, // kTimestamp. 95 0x65, 0x43, 0x12, 0x78, // kTimestamp.
95 0x12, 0x34, 0x56, 0x78, // kSSrc. 96 0x12, 0x34, 0x56, 0x78, // kSSrc.
96 0xbe, 0xde, 0x00, 0x02, // Extension block of size 2 x 32bit words. 97 0xbe, 0xde, 0x00, 0x02, // Extension block of size 2 x 32bit words.
97 (kTransmissionOffsetExtensionId << 4) | 6, // (6+1)-byte extension, but 98 (kTransmissionOffsetExtensionId << 4) | 6, // (6+1)-byte extension, but
98 'e', 'x', 't', // Transmission Offset 99 'e', 'x', 't', // Transmission Offset
99 'd', 'a', 't', 'a', // expected to be 3-bytes. 100 'd', 'a', 't', 'a', // expected to be 3-bytes.
100 'p', 'a', 'y', 'l', 'o', 'a', 'd' 101 'p', 'a', 'y', 'l', 'o', 'a', 'd'};
101 }; 102
103 constexpr uint8_t kPacketWithLegacyTimingExtension[] = {
104 0x90, kPayloadType, kSeqNumFirstByte, kSeqNumSecondByte,
105 0x65, 0x43, 0x12, 0x78, // kTimestamp.
106 0x12, 0x34, 0x56, 0x78, // kSSrc.
107 0xbe, 0xde, 0x00, 0x04, // Extension block of size 4 x 32bit words.
108 (kVideoTimingExtensionId << 4)
109 | VideoTimingExtension::kValueSizeBytes - 2, // Old format without flags.
110 0x00, 0x01, 0x00,
111 0x02, 0x00, 0x03, 0x00,
112 0x04, 0x00, 0x00, 0x00,
113 0x00, 0x00, 0x00, 0x00};
102 // clang-format on 114 // clang-format on
103 } // namespace 115 } // namespace
104 116
105 TEST(RtpPacketTest, CreateMinimum) { 117 TEST(RtpPacketTest, CreateMinimum) {
106 RtpPacketToSend packet(nullptr); 118 RtpPacketToSend packet(nullptr);
107 packet.SetPayloadType(kPayloadType); 119 packet.SetPayloadType(kPayloadType);
108 packet.SetSequenceNumber(kSeqNum); 120 packet.SetSequenceNumber(kSeqNum);
109 packet.SetTimestamp(kTimestamp); 121 packet.SetTimestamp(kTimestamp);
110 packet.SetSsrc(kSsrc); 122 packet.SetSsrc(kSsrc);
111 EXPECT_THAT(kMinimumPacket, ElementsAreArray(packet.data(), packet.size())); 123 EXPECT_THAT(kMinimumPacket, ElementsAreArray(packet.data(), packet.size()));
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 503
492 ASSERT_TRUE(packet.Parse(kPacket, sizeof(kPacket))); 504 ASSERT_TRUE(packet.Parse(kPacket, sizeof(kPacket)));
493 505
494 EXPECT_FALSE(packet.HasRawExtension(kInvalidId)); 506 EXPECT_FALSE(packet.HasRawExtension(kInvalidId));
495 EXPECT_THAT(packet.GetRawExtension(kInvalidId), IsEmpty()); 507 EXPECT_THAT(packet.GetRawExtension(kInvalidId), IsEmpty());
496 const uint8_t kExtension[] = {'e', 'x', 't'}; 508 const uint8_t kExtension[] = {'e', 'x', 't'};
497 EXPECT_FALSE(packet.SetRawExtension(kInvalidId, kExtension)); 509 EXPECT_FALSE(packet.SetRawExtension(kInvalidId, kExtension));
498 EXPECT_THAT(packet.AllocateRawExtension(kInvalidId, 3), IsEmpty()); 510 EXPECT_THAT(packet.AllocateRawExtension(kInvalidId, 3), IsEmpty());
499 } 511 }
500 512
513 TEST(RtpPacketTest, CreateAndParseTimingFrameExtension) {
514 // Create a packet with video frame timing extension populated.
515 RtpPacketToSend::ExtensionManager send_extensions;
516 send_extensions.Register(kRtpExtensionVideoTiming, kVideoTimingExtensionId);
517 RtpPacketToSend send_packet(&send_extensions);
518 send_packet.SetPayloadType(kPayloadType);
519 send_packet.SetSequenceNumber(kSeqNum);
520 send_packet.SetTimestamp(kTimestamp);
521 send_packet.SetSsrc(kSsrc);
522
523 VideoSendTiming timing;
524 timing.encode_start_delta_ms = 1;
525 timing.encode_finish_delta_ms = 2;
526 timing.packetization_finish_delta_ms = 3;
527 timing.pacer_exit_delta_ms = 4;
528 timing.flags =
529 TimingFrameFlags::kTriggeredByTimer + TimingFrameFlags::kTriggeredBySize;
530
531 send_packet.SetExtension<VideoTimingExtension>(timing);
532
533 // Serialize the packet and then parse it again.
534 RtpPacketReceived::ExtensionManager extensions;
535 extensions.Register<VideoTimingExtension>(kVideoTimingExtensionId);
536 RtpPacketReceived receive_packet(&extensions);
537 EXPECT_TRUE(receive_packet.Parse(send_packet.Buffer()));
538
539 VideoSendTiming receivied_timing;
540 EXPECT_TRUE(
541 receive_packet.GetExtension<VideoTimingExtension>(&receivied_timing));
542
543 // Only check first and last timestamp (covered by other tests) plus flags.
544 EXPECT_EQ(receivied_timing.encode_start_delta_ms,
545 timing.encode_start_delta_ms);
546 EXPECT_EQ(receivied_timing.pacer_exit_delta_ms, timing.pacer_exit_delta_ms);
547 EXPECT_EQ(receivied_timing.flags, timing.flags);
548 }
549
550 TEST(RtpPacketTest, ParseLegacyTimingFrameExtension) {
551 // Parse the modified packet.
552 RtpPacketReceived::ExtensionManager extensions;
553 extensions.Register<VideoTimingExtension>(kVideoTimingExtensionId);
554 RtpPacketReceived packet(&extensions);
555 EXPECT_TRUE(packet.Parse(kPacketWithLegacyTimingExtension,
556 sizeof(kPacketWithLegacyTimingExtension)));
557 VideoSendTiming receivied_timing;
558 EXPECT_TRUE(packet.GetExtension<VideoTimingExtension>(&receivied_timing));
559
560 // Check first and last timestamp are still OK. Flags should now be 0.
561 EXPECT_EQ(receivied_timing.encode_start_delta_ms, 1);
562 EXPECT_EQ(receivied_timing.pacer_exit_delta_ms, 4);
563 EXPECT_EQ(receivied_timing.flags, 0);
564 }
565
501 } // namespace webrtc 566 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698