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

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: 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, TimingFrameExtension) {
danilchap 2017/08/11 12:22:36 Prefer to split this test into 2-3 smaller tests:
sprang_webrtc 2017/08/11 13:19:05 Done.
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.encode_finish_delta_ms = 2;
515 timing.packetization_finish_delta_ms = 3;
516 timing.pacer_exit_delta_ms = 4;
517 timing.packetization_finish_delta_ms = 5;
518 timing.flags =
519 TimingFrameFlags::kTriggeredByTimer + TimingFrameFlags::kTriggeredBySize;
520
521 send_packet.SetExtension<VideoTimingExtension>(timing);
522
523 // Serialize the packet and then parse it again.
524 RtpPacketReceived::ExtensionManager extensions;
525 extensions.Register<VideoTimingExtension>(kVideoTimingExtensionId);
526 RtpPacketReceived receive_packet(&extensions);
527 rtc::CopyOnWriteBuffer buffer = send_packet.Buffer();
528 EXPECT_TRUE(receive_packet.Parse(buffer));
529
530 VideoSendTiming receivied_timing;
531 EXPECT_TRUE(
532 receive_packet.GetExtension<VideoTimingExtension>(&receivied_timing));
533
534 // Only check first and last timestamp (covered by other tests) plus flags.
535 EXPECT_EQ(receivied_timing.encode_start_delta_ms,
536 timing.encode_start_delta_ms);
537 EXPECT_EQ(receivied_timing.packetization_finish_delta_ms,
538 timing.packetization_finish_delta_ms);
539 EXPECT_EQ(receivied_timing.flags, timing.flags);
540
541 // Modify the sent packet so that the old VideoTimingExtension format is used.
542 rtc::ArrayView<const uint8_t> raw_extension =
543 receive_packet.GetRawExtension(kVideoTimingExtensionId);
544 ptrdiff_t start_offset = raw_extension.cbegin() - buffer.cdata();
545 const uint8_t kExtensionLength = VideoTimingExtension::kValueSizeBytes;
546
547 // Turn last byte of header extension into padding.
548 buffer[start_offset + kExtensionLength - 1] = 0;
549 // Validate one-byte header and reduce length by one.
550 const uint8_t onebyte_header = buffer[start_offset - 1];
551 EXPECT_EQ(onebyte_header,
552 (kVideoTimingExtensionId << 4) | (kExtensionLength - 1));
553 buffer[receive_packet.headers_size() - kExtensionLength] =
554 (kVideoTimingExtensionId << 4) | (kExtensionLength - 2);
555
556 // Parse the modified packet.
557 EXPECT_TRUE(receive_packet.Parse(buffer));
558 EXPECT_TRUE(
559 receive_packet.GetExtension<VideoTimingExtension>(&receivied_timing));
560
561 // Check first and last timestamp are still OK. Flags should now be 0.
562 EXPECT_EQ(receivied_timing.encode_start_delta_ms,
563 timing.encode_start_delta_ms);
564 EXPECT_EQ(receivied_timing.packetization_finish_delta_ms,
565 timing.packetization_finish_delta_ms);
566 EXPECT_EQ(receivied_timing.flags, 0);
567 }
568
501 } // namespace webrtc 569 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698