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

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

Issue 2911193002: Implement timing frames. (Closed)
Patch Set: Implement Asapersson@ comments Created 3 years, 6 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) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 10
(...skipping 20 matching lines...) Expand all
31 #include "webrtc/test/gtest.h" 31 #include "webrtc/test/gtest.h"
32 #include "webrtc/test/mock_transport.h" 32 #include "webrtc/test/mock_transport.h"
33 #include "webrtc/typedefs.h" 33 #include "webrtc/typedefs.h"
34 34
35 namespace webrtc { 35 namespace webrtc {
36 36
37 namespace { 37 namespace {
38 const int kTransmissionTimeOffsetExtensionId = 1; 38 const int kTransmissionTimeOffsetExtensionId = 1;
39 const int kAbsoluteSendTimeExtensionId = 14; 39 const int kAbsoluteSendTimeExtensionId = 14;
40 const int kTransportSequenceNumberExtensionId = 13; 40 const int kTransportSequenceNumberExtensionId = 13;
41 const int kVideoTimingExtensionId = 12;
41 const int kPayload = 100; 42 const int kPayload = 100;
42 const int kRtxPayload = 98; 43 const int kRtxPayload = 98;
43 const uint32_t kTimestamp = 10; 44 const uint32_t kTimestamp = 10;
44 const uint16_t kSeqNum = 33; 45 const uint16_t kSeqNum = 33;
45 const uint32_t kSsrc = 725242; 46 const uint32_t kSsrc = 725242;
46 const int kMaxPacketLength = 1500; 47 const int kMaxPacketLength = 1500;
47 const uint8_t kAudioLevel = 0x5a; 48 const uint8_t kAudioLevel = 0x5a;
48 const uint16_t kTransportSequenceNumber = 0xaabbu; 49 const uint16_t kTransportSequenceNumber = 0xaabbu;
49 const uint8_t kAudioLevelExtensionId = 9; 50 const uint8_t kAudioLevelExtensionId = 9;
50 const int kAudioPayload = 103; 51 const int kAudioPayload = 103;
(...skipping 16 matching lines...) Expand all
67 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset, 68 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset,
68 kTransmissionTimeOffsetExtensionId); 69 kTransmissionTimeOffsetExtensionId);
69 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime, 70 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime,
70 kAbsoluteSendTimeExtensionId); 71 kAbsoluteSendTimeExtensionId);
71 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber, 72 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber,
72 kTransportSequenceNumberExtensionId); 73 kTransportSequenceNumberExtensionId);
73 receivers_extensions_.Register(kRtpExtensionVideoRotation, 74 receivers_extensions_.Register(kRtpExtensionVideoRotation,
74 kVideoRotationExtensionId); 75 kVideoRotationExtensionId);
75 receivers_extensions_.Register(kRtpExtensionAudioLevel, 76 receivers_extensions_.Register(kRtpExtensionAudioLevel,
76 kAudioLevelExtensionId); 77 kAudioLevelExtensionId);
78 receivers_extensions_.Register(kRtpExtensionVideoTiming,
79 kVideoTimingExtensionId);
77 } 80 }
78 81
79 bool SendRtp(const uint8_t* data, 82 bool SendRtp(const uint8_t* data,
80 size_t len, 83 size_t len,
81 const PacketOptions& options) override { 84 const PacketOptions& options) override {
82 last_packet_id_ = options.packet_id; 85 last_packet_id_ = options.packet_id;
83 total_bytes_sent_ += len; 86 total_bytes_sent_ += len;
84 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_)); 87 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_));
85 EXPECT_TRUE(sent_packets_.back().Parse(data, len)); 88 EXPECT_TRUE(sent_packets_.back().Parse(data, len));
86 return true; 89 return true;
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 packet->SetTimestamp(kTimestamp); 343 packet->SetTimestamp(kTimestamp);
341 344
342 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); 345 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
343 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); 346 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo()));
344 347
345 ASSERT_EQ(1u, transport_.sent_packets_.size()); 348 ASSERT_EQ(1u, transport_.sent_packets_.size());
346 // Verify padding packet timestamp. 349 // Verify padding packet timestamp.
347 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); 350 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp());
348 } 351 }
349 352
353
350 TEST_P(RtpSenderTestWithoutPacer, 354 TEST_P(RtpSenderTestWithoutPacer,
351 TransportFeedbackObserverGetsCorrectByteCount) { 355 TransportFeedbackObserverGetsCorrectByteCount) {
352 constexpr int kRtpOverheadBytesPerPacket = 12 + 8; 356 constexpr int kRtpOverheadBytesPerPacket = 12 + 8;
353 testing::NiceMock<MockOverheadObserver> mock_overhead_observer; 357 testing::NiceMock<MockOverheadObserver> mock_overhead_observer;
354 rtp_sender_.reset(new RTPSender( 358 rtp_sender_.reset(new RTPSender(
355 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, 359 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_,
356 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, 360 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
357 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); 361 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer));
358 rtp_sender_->SetSSRC(kSsrc); 362 rtp_sender_->SetSSRC(kSsrc);
359 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 363 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 fake_clock_.TimeInMilliseconds(), false, 457 fake_clock_.TimeInMilliseconds(), false,
454 PacedPacketInfo()); 458 PacedPacketInfo());
455 459
456 const auto& packet = transport_.last_sent_packet(); 460 const auto& packet = transport_.last_sent_packet();
457 uint16_t transport_seq_no; 461 uint16_t transport_seq_no;
458 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); 462 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
459 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); 463 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
460 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); 464 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
461 } 465 }
462 466
467 TEST_P(RtpSenderTestWithoutPacer, WritesTimestampToTimingExtension) {
468 rtp_sender_->SetStorePacketsStatus(true, 10);
469 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
470 kRtpExtensionVideoTiming,
471 kVideoTimingExtensionId));
472 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
473 kRtpExtensionTransmissionTimeOffset,
474 kTransmissionTimeOffsetExtensionId));
475 EXPECT_EQ(
476 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
477 kAbsoluteSendTimeExtensionId));
sprang_webrtc 2017/06/13 14:14:14 why toffset and ast extensions?
ilnik 2017/06/13 14:55:44 Leftover from copypaste and playing around. Remove
478 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
479 auto packet = rtp_sender_->AllocatePacket();
480 packet->SetPayloadType(kPayload);
481 packet->SetMarker(true);
482 packet->SetTimestamp(kTimestamp);
483 packet->set_capture_time_ms(capture_time_ms);
484 VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true};
sprang_webrtc 2017/06/13 14:14:14 const
ilnik 2017/06/13 14:55:44 Done.
485 packet->SetExtension<VideoTimingExtension>(kVideoTiming);
486 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
487 size_t packet_size = packet->size();
488 webrtc::RTPHeader rtp_header;
489
490 packet->GetHeader(&rtp_header);
491
492 const int kStoredTimeInMs = 100;
493 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
494
495 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
496 kAllowRetransmission,
497 RtpPacketSender::kNormalPriority));
498 EXPECT_EQ(1, transport_.packets_sent());
499 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
500
501 transport_.last_sent_packet().GetHeader(&rtp_header);
502 EXPECT_TRUE(rtp_header.extension.hasVideoTiming);
503 EXPECT_EQ(kStoredTimeInMs,
504 rtp_header.extension.videoTiming.pacer_exit_ms_delta);
sprang_webrtc 2017/06/13 14:14:14 nit: indentation?
ilnik 2017/06/13 14:55:44 Done.
505
506 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
507 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false,
508 PacedPacketInfo());
509
510 EXPECT_EQ(2, transport_.packets_sent());
511 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
512
513 transport_.last_sent_packet().GetHeader(&rtp_header);
514 EXPECT_TRUE(rtp_header.extension.hasVideoTiming);
515 EXPECT_EQ(kStoredTimeInMs * 2,
516 rtp_header.extension.videoTiming.pacer_exit_ms_delta);
517 }
518
463 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { 519 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) {
464 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 520 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
465 kSsrc, kSeqNum, _, _, _)); 521 kSsrc, kSeqNum, _, _, _));
466 EXPECT_CALL(mock_rtc_event_log_, 522 EXPECT_CALL(mock_rtc_event_log_,
467 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 523 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
468 524
469 rtp_sender_->SetStorePacketsStatus(true, 10); 525 rtp_sender_->SetStorePacketsStatus(true, 10);
470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 526 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
471 kRtpExtensionTransmissionTimeOffset, 527 kRtpExtensionTransmissionTimeOffset,
472 kTransmissionTimeOffsetExtensionId)); 528 kTransmissionTimeOffsetExtensionId));
(...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1597 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1542 RtpSenderTestWithoutPacer, 1598 RtpSenderTestWithoutPacer,
1543 ::testing::Bool()); 1599 ::testing::Bool());
1544 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1600 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1545 RtpSenderVideoTest, 1601 RtpSenderVideoTest,
1546 ::testing::Bool()); 1602 ::testing::Bool());
1547 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1603 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1548 RtpSenderAudioTest, 1604 RtpSenderAudioTest,
1549 ::testing::Bool()); 1605 ::testing::Bool());
1550 } // namespace webrtc 1606 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698