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

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

Issue 1350163005: Avoid circular dependency rtp_rtcp <-> paced_sender (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 5 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) 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
11 /* 11 /*
12 * This file includes unit tests for the RTPSender. 12 * This file includes unit tests for the RTPSender.
13 */ 13 */
14 14
15 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 #include "webrtc/base/buffer.h" 18 #include "webrtc/base/buffer.h"
18 #include "webrtc/base/scoped_ptr.h" 19 #include "webrtc/base/scoped_ptr.h"
19 #include "webrtc/modules/pacing/include/mock/mock_paced_sender.h"
20 #include "webrtc/modules/rtp_rtcp/interface/rtp_cvo.h" 20 #include "webrtc/modules/rtp_rtcp/interface/rtp_cvo.h"
21 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h" 21 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
22 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 22 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
23 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h" 23 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" 24 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" 25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" 26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h"
27 #include "webrtc/system_wrappers/interface/stl_util.h" 27 #include "webrtc/system_wrappers/interface/stl_util.h"
28 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 28 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
29 #include "webrtc/test/mock_transport.h" 29 #include "webrtc/test/mock_transport.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 } 93 }
94 int packets_sent_; 94 int packets_sent_;
95 size_t last_sent_packet_len_; 95 size_t last_sent_packet_len_;
96 size_t total_bytes_sent_; 96 size_t total_bytes_sent_;
97 uint8_t* last_sent_packet_; 97 uint8_t* last_sent_packet_;
98 std::vector<rtc::Buffer*> sent_packets_; 98 std::vector<rtc::Buffer*> sent_packets_;
99 }; 99 };
100 100
101 } // namespace 101 } // namespace
102 102
103 class MockRtpPacketSender : public RtpPacketSender {
104 public:
105 MockRtpPacketSender() {}
106 virtual ~MockRtpPacketSender() {}
107
108 MOCK_METHOD6(SendPacket,
109 bool(Priority priority,
110 uint32_t ssrc,
111 uint16_t sequence_number,
112 int64_t capture_time_ms,
113 size_t bytes,
114 bool retransmission));
115 };
116
103 class RtpSenderTest : public ::testing::Test { 117 class RtpSenderTest : public ::testing::Test {
104 protected: 118 protected:
105 RtpSenderTest() 119 RtpSenderTest()
106 : fake_clock_(kStartTime), 120 : fake_clock_(kStartTime),
107 mock_paced_sender_(), 121 mock_paced_sender_(),
108 rtp_sender_(), 122 rtp_sender_(),
109 payload_(kPayload), 123 payload_(kPayload),
110 transport_(), 124 transport_(),
111 kMarkerBit(true) { 125 kMarkerBit(true) {
112 EXPECT_CALL(mock_paced_sender_, 126 EXPECT_CALL(mock_paced_sender_,
113 SendPacket(_, _, _, _, _, _)).WillRepeatedly(testing::Return(true)); 127 SendPacket(_, _, _, _, _, _)).WillRepeatedly(testing::Return(true));
114 } 128 }
115 129
116 void SetUp() override { 130 void SetUp() override {
117 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, 131 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr,
118 &mock_paced_sender_, nullptr, nullptr, 132 &mock_paced_sender_, nullptr, nullptr,
119 nullptr, nullptr, nullptr)); 133 nullptr, nullptr, nullptr));
120 rtp_sender_->SetSequenceNumber(kSeqNum); 134 rtp_sender_->SetSequenceNumber(kSeqNum);
121 } 135 }
122 136
123 SimulatedClock fake_clock_; 137 SimulatedClock fake_clock_;
124 MockPacedSender mock_paced_sender_; 138 MockRtpPacketSender mock_paced_sender_;
125 rtc::scoped_ptr<RTPSender> rtp_sender_; 139 rtc::scoped_ptr<RTPSender> rtp_sender_;
126 int payload_; 140 int payload_;
127 LoopbackTransportTest transport_; 141 LoopbackTransportTest transport_;
128 const bool kMarkerBit; 142 const bool kMarkerBit;
129 uint8_t packet_[kMaxPacketLength]; 143 uint8_t packet_[kMaxPacketLength];
130 144
131 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { 145 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) {
132 VerifyRTPHeaderCommon(rtp_header, kMarkerBit); 146 VerifyRTPHeaderCommon(rtp_header, kMarkerBit);
133 } 147 }
134 148
(...skipping 10 matching lines...) Expand all
145 void SendPacket(int64_t capture_time_ms, int payload_length) { 159 void SendPacket(int64_t capture_time_ms, int payload_length) {
146 uint32_t timestamp = capture_time_ms * 90; 160 uint32_t timestamp = capture_time_ms * 90;
147 int32_t rtp_length = rtp_sender_->BuildRTPheader(packet_, 161 int32_t rtp_length = rtp_sender_->BuildRTPheader(packet_,
148 kPayload, 162 kPayload,
149 kMarkerBit, 163 kMarkerBit,
150 timestamp, 164 timestamp,
151 capture_time_ms); 165 capture_time_ms);
152 ASSERT_GE(rtp_length, 0); 166 ASSERT_GE(rtp_length, 0);
153 167
154 // Packet should be stored in a send bucket. 168 // Packet should be stored in a send bucket.
155 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 169 EXPECT_EQ(0, rtp_sender_->SendToNetwork(
156 payload_length, 170 packet_, payload_length, rtp_length, capture_time_ms,
157 rtp_length, 171 kAllowRetransmission, RtpPacketSender::kNormalPriority));
158 capture_time_ms,
159 kAllowRetransmission,
160 PacedSender::kNormalPriority));
161 } 172 }
162 }; 173 };
163 174
164 class RtpSenderVideoTest : public RtpSenderTest { 175 class RtpSenderVideoTest : public RtpSenderTest {
165 protected: 176 protected:
166 virtual void SetUp() override { 177 virtual void SetUp() override {
167 RtpSenderTest::SetUp(); 178 RtpSenderTest::SetUp();
168 rtp_sender_video_.reset( 179 rtp_sender_video_.reset(
169 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); 180 new RTPSenderVideo(&fake_clock_, rtp_sender_.get()));
170 } 181 }
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 597
587 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); 598 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
588 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); 599 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
589 EXPECT_FALSE(rtp_header2.extension.voiceActivity); 600 EXPECT_FALSE(rtp_header2.extension.voiceActivity);
590 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); 601 EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
591 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); 602 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber);
592 } 603 }
593 604
594 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { 605 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
595 EXPECT_CALL(mock_paced_sender_, 606 EXPECT_CALL(mock_paced_sender_,
596 SendPacket(PacedSender::kNormalPriority, _, kSeqNum, _, _, _)). 607 SendPacket(RtpPacketSender::kNormalPriority, _, kSeqNum, _, _, _))
597 WillOnce(testing::Return(false)); 608 .WillOnce(testing::Return(false));
598 609
599 rtp_sender_->SetStorePacketsStatus(true, 10); 610 rtp_sender_->SetStorePacketsStatus(true, 10);
600 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 611 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
601 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 612 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId));
602 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 613 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
603 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 614 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId));
604 rtp_sender_->SetTargetBitrate(300000); 615 rtp_sender_->SetTargetBitrate(300000);
605 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 616 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
606 int rtp_length_int = rtp_sender_->BuildRTPheader( 617 int rtp_length_int = rtp_sender_->BuildRTPheader(
607 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 618 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms);
608 ASSERT_NE(-1, rtp_length_int); 619 ASSERT_NE(-1, rtp_length_int);
609 size_t rtp_length = static_cast<size_t>(rtp_length_int); 620 size_t rtp_length = static_cast<size_t>(rtp_length_int);
610 621
611 // Packet should be stored in a send bucket. 622 // Packet should be stored in a send bucket.
612 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 623 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
613 0, 624 capture_time_ms, kAllowRetransmission,
614 rtp_length, 625 RtpPacketSender::kNormalPriority));
615 capture_time_ms,
616 kAllowRetransmission,
617 PacedSender::kNormalPriority));
618 626
619 EXPECT_EQ(0, transport_.packets_sent_); 627 EXPECT_EQ(0, transport_.packets_sent_);
620 628
621 const int kStoredTimeInMs = 100; 629 const int kStoredTimeInMs = 100;
622 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 630 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
623 631
624 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false); 632 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false);
625 633
626 // Process send bucket. Packet should now be sent. 634 // Process send bucket. Packet should now be sent.
627 EXPECT_EQ(1, transport_.packets_sent_); 635 EXPECT_EQ(1, transport_.packets_sent_);
(...skipping 11 matching lines...) Expand all
639 647
640 // Verify transmission time offset. 648 // Verify transmission time offset.
641 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 649 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
642 uint64_t expected_send_time = 650 uint64_t expected_send_time =
643 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 651 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
644 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 652 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
645 } 653 }
646 654
647 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { 655 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
648 EXPECT_CALL(mock_paced_sender_, 656 EXPECT_CALL(mock_paced_sender_,
649 SendPacket(PacedSender::kNormalPriority, _, kSeqNum, _, _, _)). 657 SendPacket(RtpPacketSender::kNormalPriority, _, kSeqNum, _, _, _))
650 WillOnce(testing::Return(false)); 658 .WillOnce(testing::Return(false));
651 659
652 rtp_sender_->SetStorePacketsStatus(true, 10); 660 rtp_sender_->SetStorePacketsStatus(true, 10);
653 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 661 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
654 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 662 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId));
655 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 663 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
656 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 664 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId));
657 rtp_sender_->SetTargetBitrate(300000); 665 rtp_sender_->SetTargetBitrate(300000);
658 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 666 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
659 int rtp_length_int = rtp_sender_->BuildRTPheader( 667 int rtp_length_int = rtp_sender_->BuildRTPheader(
660 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 668 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms);
661 ASSERT_NE(-1, rtp_length_int); 669 ASSERT_NE(-1, rtp_length_int);
662 size_t rtp_length = static_cast<size_t>(rtp_length_int); 670 size_t rtp_length = static_cast<size_t>(rtp_length_int);
663 671
664 // Packet should be stored in a send bucket. 672 // Packet should be stored in a send bucket.
665 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 673 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
666 0, 674 capture_time_ms, kAllowRetransmission,
667 rtp_length, 675 RtpPacketSender::kNormalPriority));
668 capture_time_ms,
669 kAllowRetransmission,
670 PacedSender::kNormalPriority));
671 676
672 EXPECT_EQ(0, transport_.packets_sent_); 677 EXPECT_EQ(0, transport_.packets_sent_);
673 678
674 EXPECT_CALL(mock_paced_sender_, 679 EXPECT_CALL(mock_paced_sender_,
675 SendPacket(PacedSender::kHighPriority, _, kSeqNum, _, _, _)). 680 SendPacket(RtpPacketSender::kHighPriority, _, kSeqNum, _, _, _))
676 WillOnce(testing::Return(false)); 681 .WillOnce(testing::Return(false));
677 682
678 const int kStoredTimeInMs = 100; 683 const int kStoredTimeInMs = 100;
679 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 684 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
680 685
681 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); 686 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum));
682 EXPECT_EQ(0, transport_.packets_sent_); 687 EXPECT_EQ(0, transport_.packets_sent_);
683 688
684 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false); 689 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false);
685 690
686 // Process send bucket. Packet should now be sent. 691 // Process send bucket. Packet should now be sent.
(...skipping 16 matching lines...) Expand all
703 uint64_t expected_send_time = 708 uint64_t expected_send_time =
704 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 709 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
705 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 710 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
706 } 711 }
707 712
708 // This test sends 1 regular video packet, then 4 padding packets, and then 713 // This test sends 1 regular video packet, then 4 padding packets, and then
709 // 1 more regular packet. 714 // 1 more regular packet.
710 TEST_F(RtpSenderTest, SendPadding) { 715 TEST_F(RtpSenderTest, SendPadding) {
711 // Make all (non-padding) packets go to send queue. 716 // Make all (non-padding) packets go to send queue.
712 EXPECT_CALL(mock_paced_sender_, 717 EXPECT_CALL(mock_paced_sender_,
713 SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)). 718 SendPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
714 WillRepeatedly(testing::Return(false)); 719 .WillRepeatedly(testing::Return(false));
715 720
716 uint16_t seq_num = kSeqNum; 721 uint16_t seq_num = kSeqNum;
717 uint32_t timestamp = kTimestamp; 722 uint32_t timestamp = kTimestamp;
718 rtp_sender_->SetStorePacketsStatus(true, 10); 723 rtp_sender_->SetStorePacketsStatus(true, 10);
719 size_t rtp_header_len = kRtpHeaderSize; 724 size_t rtp_header_len = kRtpHeaderSize;
720 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 725 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
721 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 726 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId));
722 rtp_header_len += 4; // 4 bytes extension. 727 rtp_header_len += 4; // 4 bytes extension.
723 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 728 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
724 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 729 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId));
(...skipping 12 matching lines...) Expand all
737 742
738 rtp_sender_->SetTargetBitrate(300000); 743 rtp_sender_->SetTargetBitrate(300000);
739 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 744 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
740 int rtp_length_int = rtp_sender_->BuildRTPheader( 745 int rtp_length_int = rtp_sender_->BuildRTPheader(
741 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 746 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
742 const uint32_t media_packet_timestamp = timestamp; 747 const uint32_t media_packet_timestamp = timestamp;
743 ASSERT_NE(-1, rtp_length_int); 748 ASSERT_NE(-1, rtp_length_int);
744 size_t rtp_length = static_cast<size_t>(rtp_length_int); 749 size_t rtp_length = static_cast<size_t>(rtp_length_int);
745 750
746 // Packet should be stored in a send bucket. 751 // Packet should be stored in a send bucket.
747 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 752 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
748 0, 753 capture_time_ms, kAllowRetransmission,
749 rtp_length, 754 RtpPacketSender::kNormalPriority));
750 capture_time_ms,
751 kAllowRetransmission,
752 PacedSender::kNormalPriority));
753 755
754 int total_packets_sent = 0; 756 int total_packets_sent = 0;
755 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); 757 EXPECT_EQ(total_packets_sent, transport_.packets_sent_);
756 758
757 const int kStoredTimeInMs = 100; 759 const int kStoredTimeInMs = 100;
758 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 760 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
759 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false); 761 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false);
760 // Packet should now be sent. This test doesn't verify the regular video 762 // Packet should now be sent. This test doesn't verify the regular video
761 // packet, since it is tested in another test. 763 // packet, since it is tested in another test.
762 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 764 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 } 797 }
796 798
797 // Send a regular video packet again. 799 // Send a regular video packet again.
798 capture_time_ms = fake_clock_.TimeInMilliseconds(); 800 capture_time_ms = fake_clock_.TimeInMilliseconds();
799 rtp_length_int = rtp_sender_->BuildRTPheader( 801 rtp_length_int = rtp_sender_->BuildRTPheader(
800 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 802 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
801 ASSERT_NE(-1, rtp_length_int); 803 ASSERT_NE(-1, rtp_length_int);
802 rtp_length = static_cast<size_t>(rtp_length_int); 804 rtp_length = static_cast<size_t>(rtp_length_int);
803 805
804 // Packet should be stored in a send bucket. 806 // Packet should be stored in a send bucket.
805 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 807 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
806 0, 808 capture_time_ms, kAllowRetransmission,
807 rtp_length, 809 RtpPacketSender::kNormalPriority));
808 capture_time_ms,
809 kAllowRetransmission,
810 PacedSender::kNormalPriority));
811 810
812 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false); 811 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false);
813 // Process send bucket. 812 // Process send bucket.
814 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 813 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_);
815 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 814 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_);
816 // Parse sent packet. 815 // Parse sent packet.
817 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, 816 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, rtp_length,
818 &rtp_header)); 817 &rtp_header));
819 818
820 // Verify sequence number and timestamp. 819 // Verify sequence number and timestamp.
821 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 820 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
822 EXPECT_EQ(timestamp, rtp_header.timestamp); 821 EXPECT_EQ(timestamp, rtp_header.timestamp);
823 // Verify transmission time offset. This packet is sent without delay. 822 // Verify transmission time offset. This packet is sent without delay.
824 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 823 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
825 uint64_t expected_send_time = 824 uint64_t expected_send_time =
826 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 825 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
827 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 826 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
828 } 827 }
829 828
830 TEST_F(RtpSenderTest, SendRedundantPayloads) { 829 TEST_F(RtpSenderTest, SendRedundantPayloads) {
831 MockTransport transport; 830 MockTransport transport;
832 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr, 831 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr,
833 &mock_paced_sender_, nullptr, nullptr, 832 &mock_paced_sender_, nullptr, nullptr,
834 nullptr, nullptr, nullptr)); 833 nullptr, nullptr, nullptr));
835 rtp_sender_->SetSequenceNumber(kSeqNum); 834 rtp_sender_->SetSequenceNumber(kSeqNum);
836 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); 835 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
837 // Make all packets go through the pacer. 836 // Make all packets go through the pacer.
838 EXPECT_CALL(mock_paced_sender_, 837 EXPECT_CALL(mock_paced_sender_,
839 SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)). 838 SendPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
840 WillRepeatedly(testing::Return(false)); 839 .WillRepeatedly(testing::Return(false));
841 840
842 uint16_t seq_num = kSeqNum; 841 uint16_t seq_num = kSeqNum;
843 rtp_sender_->SetStorePacketsStatus(true, 10); 842 rtp_sender_->SetStorePacketsStatus(true, 10);
844 int32_t rtp_header_len = kRtpHeaderSize; 843 int32_t rtp_header_len = kRtpHeaderSize;
845 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 844 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
846 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 845 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId));
847 rtp_header_len += 4; // 4 bytes extension. 846 rtp_header_len += 4; // 4 bytes extension.
848 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 847 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
849 848
850 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 849 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
1374 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), 1373 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1375 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); 1374 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1376 1375
1377 // Verify that this packet does have CVO byte. 1376 // Verify that this packet does have CVO byte.
1378 VerifyCVOPacket( 1377 VerifyCVOPacket(
1379 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), 1378 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()),
1380 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, 1379 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1,
1381 hdr.rotation); 1380 hdr.rotation);
1382 } 1381 }
1383 } // namespace webrtc 1382 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698