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

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: Addressed comments 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 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 492
492 ASSERT_TRUE(packet.Parse(kPacket, sizeof(kPacket))); 493 ASSERT_TRUE(packet.Parse(kPacket, sizeof(kPacket)));
493 494
494 EXPECT_FALSE(packet.HasRawExtension(kInvalidId)); 495 EXPECT_FALSE(packet.HasRawExtension(kInvalidId));
495 EXPECT_THAT(packet.GetRawExtension(kInvalidId), IsEmpty()); 496 EXPECT_THAT(packet.GetRawExtension(kInvalidId), IsEmpty());
496 const uint8_t kExtension[] = {'e', 'x', 't'}; 497 const uint8_t kExtension[] = {'e', 'x', 't'};
497 EXPECT_FALSE(packet.SetRawExtension(kInvalidId, kExtension)); 498 EXPECT_FALSE(packet.SetRawExtension(kInvalidId, kExtension));
498 EXPECT_THAT(packet.AllocateRawExtension(kInvalidId, 3), IsEmpty()); 499 EXPECT_THAT(packet.AllocateRawExtension(kInvalidId, 3), IsEmpty());
499 } 500 }
500 501
502 TEST(RtpPacketTest, CreateAndParseTimingFrameExtension) {
503 // Create a packet with video frame timing extension populated.
504 RtpPacketToSend::ExtensionManager send_extensions;
505 send_extensions.Register(kRtpExtensionVideoTiming, kVideoTimingExtensionId);
506 RtpPacketToSend send_packet(&send_extensions);
507 send_packet.SetPayloadType(kPayloadType);
508 send_packet.SetSequenceNumber(kSeqNum);
509 send_packet.SetTimestamp(kTimestamp);
510 send_packet.SetSsrc(kSsrc);
511
512 VideoSendTiming timing;
513 timing.encode_start_delta_ms = 1;
514 timing.packetization_finish_delta_ms = 5;
515 timing.flags =
516 TimingFrameFlags::kTriggeredByTimer + TimingFrameFlags::kTriggeredBySize;
517
518 send_packet.SetExtension<VideoTimingExtension>(timing);
519
520 // Serialize the packet and then parse it again.
521 RtpPacketReceived::ExtensionManager extensions;
522 extensions.Register<VideoTimingExtension>(kVideoTimingExtensionId);
523 RtpPacketReceived receive_packet(&extensions);
524 EXPECT_TRUE(receive_packet.Parse(send_packet.Buffer()));
525
526 VideoSendTiming receivied_timing;
527 EXPECT_TRUE(
528 receive_packet.GetExtension<VideoTimingExtension>(&receivied_timing));
529
530 // Only check first and last timestamp (covered by other tests) plus flags.
531 EXPECT_EQ(receivied_timing.encode_start_delta_ms,
532 timing.encode_start_delta_ms);
533 EXPECT_EQ(receivied_timing.packetization_finish_delta_ms,
534 timing.packetization_finish_delta_ms);
535 EXPECT_EQ(receivied_timing.flags, timing.flags);
536 }
537
538 TEST(RtpPacketTest, ParseLegacyTimingFrameExtension) {
539 // Create a packet with video frame timing extension populated.
540 RtpPacketToSend::ExtensionManager send_extensions;
541 send_extensions.Register(kRtpExtensionVideoTiming, kVideoTimingExtensionId);
542 RtpPacketToSend send_packet(&send_extensions);
543 send_packet.SetPayloadType(kPayloadType);
544 send_packet.SetSequenceNumber(kSeqNum);
545 send_packet.SetTimestamp(kTimestamp);
546 send_packet.SetSsrc(kSsrc);
547
548 VideoSendTiming timing;
549 timing.encode_start_delta_ms = 1;
550 timing.packetization_finish_delta_ms = 5;
551 timing.flags =
552 TimingFrameFlags::kTriggeredByTimer + TimingFrameFlags::kTriggeredBySize;
553
554 send_packet.SetExtension<VideoTimingExtension>(timing);
555
556 // Modify the sent packet so that the old VideoTimingExtension format is used.
danilchap 2017/08/11 13:51:16 May be it is simpler and more robust to assemble s
sprang_webrtc 2017/08/11 15:06:34 Done.
557 rtc::ArrayView<const uint8_t> raw_extension =
558 send_packet.GetRawExtension(kVideoTimingExtensionId);
559 rtc::CopyOnWriteBuffer buffer = send_packet.Buffer();
560 ptrdiff_t start_offset = raw_extension.cbegin() - buffer.cdata();
561
562 // Turn last byte of header extension into padding.
563 const uint8_t kExtensionLength = VideoTimingExtension::kValueSizeBytes;
564 buffer[start_offset + kExtensionLength - 1] = 0;
565 // Validate one-byte header and reduce length by one.
566 const uint8_t onebyte_header = buffer[start_offset - 1];
567 EXPECT_EQ(onebyte_header,
568 (kVideoTimingExtensionId << 4) | (kExtensionLength - 1));
569 buffer[send_packet.headers_size() - kExtensionLength] =
570 (kVideoTimingExtensionId << 4) | (kExtensionLength - 2);
571
572 // Parse the modified packet.
573 RtpPacketReceived::ExtensionManager extensions;
574 extensions.Register<VideoTimingExtension>(kVideoTimingExtensionId);
575 RtpPacketReceived receive_packet(&extensions);
576 EXPECT_TRUE(receive_packet.Parse(buffer));
577 VideoSendTiming receivied_timing;
578 EXPECT_TRUE(
579 receive_packet.GetExtension<VideoTimingExtension>(&receivied_timing));
580
581 // Check first and last timestamp are still OK. Flags should now be 0.
582 EXPECT_EQ(receivied_timing.encode_start_delta_ms,
583 timing.encode_start_delta_ms);
584 EXPECT_EQ(receivied_timing.packetization_finish_delta_ms,
585 timing.packetization_finish_delta_ms);
586 EXPECT_EQ(receivied_timing.flags, 0);
587 }
588
501 } // namespace webrtc 589 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698