OLD | NEW |
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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 transport_(), | 142 transport_(), |
143 kMarkerBit(true) {} | 143 kMarkerBit(true) {} |
144 | 144 |
145 void SetUp() override { SetUpRtpSender(true); } | 145 void SetUp() override { SetUpRtpSender(true); } |
146 | 146 |
147 void SetUpRtpSender(bool pacer) { | 147 void SetUpRtpSender(bool pacer) { |
148 rtp_sender_.reset(new RTPSender( | 148 rtp_sender_.reset(new RTPSender( |
149 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, | 149 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, |
150 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, | 150 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
151 &mock_rtc_event_log_, &send_packet_observer_, | 151 &mock_rtc_event_log_, &send_packet_observer_, |
152 &retransmission_rate_limiter_)); | 152 &retransmission_rate_limiter_, nullptr)); |
153 rtp_sender_->SetSequenceNumber(kSeqNum); | 153 rtp_sender_->SetSequenceNumber(kSeqNum); |
154 rtp_sender_->SetSendPayloadType(kPayload); | 154 rtp_sender_->SetSendPayloadType(kPayload); |
155 rtp_sender_->SetTimestampOffset(0); | 155 rtp_sender_->SetTimestampOffset(0); |
156 } | 156 } |
157 | 157 |
158 SimulatedClock fake_clock_; | 158 SimulatedClock fake_clock_; |
159 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; | 159 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; |
160 MockRtpPacketSender mock_paced_sender_; | 160 MockRtpPacketSender mock_paced_sender_; |
161 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; | 161 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; |
162 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; | 162 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 | 435 |
436 ASSERT_EQ(1u, transport_.sent_packets_.size()); | 436 ASSERT_EQ(1u, transport_.sent_packets_.size()); |
437 // Verify padding packet timestamp. | 437 // Verify padding packet timestamp. |
438 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); | 438 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
439 } | 439 } |
440 | 440 |
441 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | 441 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
442 rtp_sender_.reset(new RTPSender( | 442 rtp_sender_.reset(new RTPSender( |
443 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | 443 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, |
444 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 444 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
445 &send_packet_observer_, &retransmission_rate_limiter_)); | 445 &send_packet_observer_, &retransmission_rate_limiter_, nullptr)); |
446 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 446 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
447 kRtpExtensionTransportSequenceNumber, | 447 kRtpExtensionTransportSequenceNumber, |
448 kTransportSequenceNumberExtensionId)); | 448 kTransportSequenceNumberExtensionId)); |
449 | 449 |
450 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 450 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
451 .WillOnce(testing::Return(kTransportSequenceNumber)); | 451 .WillOnce(testing::Return(kTransportSequenceNumber)); |
452 EXPECT_CALL(send_packet_observer_, | 452 EXPECT_CALL(send_packet_observer_, |
453 OnSendPacket(kTransportSequenceNumber, _, _)) | 453 OnSendPacket(kTransportSequenceNumber, _, _)) |
454 .Times(1); | 454 .Times(1); |
455 EXPECT_CALL(feedback_observer_, | 455 EXPECT_CALL(feedback_observer_, |
(...skipping 22 matching lines...) Expand all Loading... |
478 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 478 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
479 .WillOnce(testing::Return(kTransportSequenceNumber)); | 479 .WillOnce(testing::Return(kTransportSequenceNumber)); |
480 EXPECT_CALL(send_packet_observer_, | 480 EXPECT_CALL(send_packet_observer_, |
481 OnSendPacket(kTransportSequenceNumber, _, _)) | 481 OnSendPacket(kTransportSequenceNumber, _, _)) |
482 .Times(1); | 482 .Times(1); |
483 | 483 |
484 SendGenericPayload(); | 484 SendGenericPayload(); |
485 } | 485 } |
486 | 486 |
487 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { | 487 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
488 rtp_sender_.reset( | 488 rtp_sender_.reset(new RTPSender( |
489 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | 489 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
490 nullptr, &seq_num_allocator_, &feedback_observer_, nullptr, | 490 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, |
491 nullptr, nullptr, &mock_rtc_event_log_, | 491 &mock_rtc_event_log_, &send_packet_observer_, |
492 &send_packet_observer_, &retransmission_rate_limiter_)); | 492 &retransmission_rate_limiter_, nullptr)); |
493 rtp_sender_->SetStorePacketsStatus(true, 10); | 493 rtp_sender_->SetStorePacketsStatus(true, 10); |
494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
495 kRtpExtensionTransportSequenceNumber, | 495 kRtpExtensionTransportSequenceNumber, |
496 kTransportSequenceNumberExtensionId)); | 496 kTransportSequenceNumberExtensionId)); |
497 | 497 |
498 uint16_t seq_num = 0; | 498 uint16_t seq_num = 0; |
499 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 499 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
500 .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num)); | 500 .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num)); |
501 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 501 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
502 .WillOnce(testing::Return(kTransportSequenceNumber)); | 502 .WillOnce(testing::Return(kTransportSequenceNumber)); |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
762 const bool kIsRetransmit = true; | 762 const bool kIsRetransmit = true; |
763 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 763 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
764 kIsRetransmit, PacketInfo::kNotAProbe); | 764 kIsRetransmit, PacketInfo::kNotAProbe); |
765 EXPECT_EQ(1, transport_.packets_sent()); | 765 EXPECT_EQ(1, transport_.packets_sent()); |
766 } | 766 } |
767 | 767 |
768 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { | 768 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
769 rtp_sender_.reset(new RTPSender( | 769 rtp_sender_.reset(new RTPSender( |
770 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, | 770 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
771 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, | 771 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
772 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); | 772 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, |
| 773 nullptr)); |
773 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 774 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
774 kRtpExtensionTransportSequenceNumber, | 775 kRtpExtensionTransportSequenceNumber, |
775 kTransportSequenceNumberExtensionId)); | 776 kTransportSequenceNumberExtensionId)); |
776 rtp_sender_->SetSequenceNumber(kSeqNum); | 777 rtp_sender_->SetSequenceNumber(kSeqNum); |
777 rtp_sender_->SetStorePacketsStatus(true, 10); | 778 rtp_sender_->SetStorePacketsStatus(true, 10); |
778 | 779 |
779 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 780 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
780 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 781 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
781 | 782 |
782 SendGenericPayload(); // Packet passed to pacer. | 783 SendGenericPayload(); // Packet passed to pacer. |
783 const bool kIsRetransmit = false; | 784 const bool kIsRetransmit = false; |
784 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 785 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
785 kIsRetransmit, PacketInfo::kNotAProbe); | 786 kIsRetransmit, PacketInfo::kNotAProbe); |
786 EXPECT_EQ(1, transport_.packets_sent()); | 787 EXPECT_EQ(1, transport_.packets_sent()); |
787 } | 788 } |
788 | 789 |
789 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 790 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
790 MockTransport transport; | 791 MockTransport transport; |
791 rtp_sender_.reset(new RTPSender( | 792 rtp_sender_.reset(new RTPSender( |
792 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, | 793 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, |
793 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, | 794 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, |
794 &retransmission_rate_limiter_)); | 795 &retransmission_rate_limiter_, nullptr)); |
795 | 796 |
796 rtp_sender_->SetSequenceNumber(kSeqNum); | 797 rtp_sender_->SetSequenceNumber(kSeqNum); |
797 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 798 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
798 | 799 |
799 uint16_t seq_num = kSeqNum; | 800 uint16_t seq_num = kSeqNum; |
800 rtp_sender_->SetStorePacketsStatus(true, 10); | 801 rtp_sender_->SetStorePacketsStatus(true, 10); |
801 int32_t rtp_header_len = kRtpHeaderSize; | 802 int32_t rtp_header_len = kRtpHeaderSize; |
802 EXPECT_EQ( | 803 EXPECT_EQ( |
803 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 804 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
804 kAbsoluteSendTimeExtensionId)); | 805 kAbsoluteSendTimeExtensionId)); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
902 TEST_F(RtpSenderTest, SendFlexfecPackets) { | 903 TEST_F(RtpSenderTest, SendFlexfecPackets) { |
903 constexpr int kMediaPayloadType = 127; | 904 constexpr int kMediaPayloadType = 127; |
904 constexpr int kFlexfecPayloadType = 118; | 905 constexpr int kFlexfecPayloadType = 118; |
905 constexpr uint32_t kMediaSsrc = 1234; | 906 constexpr uint32_t kMediaSsrc = 1234; |
906 constexpr uint32_t kFlexfecSsrc = 5678; | 907 constexpr uint32_t kFlexfecSsrc = 5678; |
907 const std::vector<RtpExtension> kNoRtpExtensions; | 908 const std::vector<RtpExtension> kNoRtpExtensions; |
908 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 909 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
909 kNoRtpExtensions, &fake_clock_); | 910 kNoRtpExtensions, &fake_clock_); |
910 | 911 |
911 // Reset |rtp_sender_| to use FlexFEC. | 912 // Reset |rtp_sender_| to use FlexFEC. |
912 rtp_sender_.reset( | 913 rtp_sender_.reset(new RTPSender( |
913 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | 914 false, &fake_clock_, &transport_, &mock_paced_sender_, &flexfec_sender, |
914 &flexfec_sender, &seq_num_allocator_, nullptr, nullptr, | 915 &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
915 nullptr, nullptr, &mock_rtc_event_log_, | 916 &mock_rtc_event_log_, &send_packet_observer_, |
916 &send_packet_observer_, &retransmission_rate_limiter_)); | 917 &retransmission_rate_limiter_, nullptr)); |
917 rtp_sender_->SetSSRC(kMediaSsrc); | 918 rtp_sender_->SetSSRC(kMediaSsrc); |
918 rtp_sender_->SetSequenceNumber(kSeqNum); | 919 rtp_sender_->SetSequenceNumber(kSeqNum); |
919 rtp_sender_->SetSendPayloadType(kMediaPayloadType); | 920 rtp_sender_->SetSendPayloadType(kMediaPayloadType); |
920 rtp_sender_->SetStorePacketsStatus(true, 10); | 921 rtp_sender_->SetStorePacketsStatus(true, 10); |
921 | 922 |
922 // Parameters selected to generate a single FEC packet per media packet. | 923 // Parameters selected to generate a single FEC packet per media packet. |
923 FecProtectionParams params; | 924 FecProtectionParams params; |
924 params.fec_rate = 15; | 925 params.fec_rate = 15; |
925 params.max_fec_frames = 1; | 926 params.max_fec_frames = 1; |
926 params.fec_mask_type = kFecMaskRandom; | 927 params.fec_mask_type = kFecMaskRandom; |
(...skipping 27 matching lines...) Expand all Loading... |
954 constexpr uint32_t kFlexfecSsrc = 5678; | 955 constexpr uint32_t kFlexfecSsrc = 5678; |
955 const std::vector<RtpExtension> kNoRtpExtensions; | 956 const std::vector<RtpExtension> kNoRtpExtensions; |
956 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 957 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
957 kNoRtpExtensions, &fake_clock_); | 958 kNoRtpExtensions, &fake_clock_); |
958 | 959 |
959 // Reset |rtp_sender_| to use FlexFEC. | 960 // Reset |rtp_sender_| to use FlexFEC. |
960 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 961 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
961 &flexfec_sender, &seq_num_allocator_, nullptr, | 962 &flexfec_sender, &seq_num_allocator_, nullptr, |
962 nullptr, nullptr, nullptr, | 963 nullptr, nullptr, nullptr, |
963 &mock_rtc_event_log_, &send_packet_observer_, | 964 &mock_rtc_event_log_, &send_packet_observer_, |
964 &retransmission_rate_limiter_)); | 965 &retransmission_rate_limiter_, nullptr)); |
965 rtp_sender_->SetSSRC(kMediaSsrc); | 966 rtp_sender_->SetSSRC(kMediaSsrc); |
966 rtp_sender_->SetSequenceNumber(kSeqNum); | 967 rtp_sender_->SetSequenceNumber(kSeqNum); |
967 rtp_sender_->SetSendPayloadType(kMediaPayloadType); | 968 rtp_sender_->SetSendPayloadType(kMediaPayloadType); |
968 | 969 |
969 // Parameters selected to generate a single FEC packet per media packet. | 970 // Parameters selected to generate a single FEC packet per media packet. |
970 FecProtectionParams params; | 971 FecProtectionParams params; |
971 params.fec_rate = 15; | 972 params.fec_rate = 15; |
972 params.max_fec_frames = 1; | 973 params.max_fec_frames = 1; |
973 params.fec_mask_type = kFecMaskRandom; | 974 params.fec_mask_type = kFecMaskRandom; |
974 rtp_sender_->SetFecParameters(params, params); | 975 rtp_sender_->SetFecParameters(params, params); |
(...skipping 22 matching lines...) Expand all Loading... |
997 ++num_calls_; | 998 ++num_calls_; |
998 ssrc_ = ssrc; | 999 ssrc_ = ssrc; |
999 frame_counts_ = frame_counts; | 1000 frame_counts_ = frame_counts; |
1000 } | 1001 } |
1001 | 1002 |
1002 uint32_t num_calls_; | 1003 uint32_t num_calls_; |
1003 uint32_t ssrc_; | 1004 uint32_t ssrc_; |
1004 FrameCounts frame_counts_; | 1005 FrameCounts frame_counts_; |
1005 } callback; | 1006 } callback; |
1006 | 1007 |
1007 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, | 1008 rtp_sender_.reset( |
1008 &mock_paced_sender_, nullptr, nullptr, | 1009 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, |
1009 nullptr, nullptr, &callback, nullptr, nullptr, | 1010 nullptr, nullptr, nullptr, nullptr, &callback, nullptr, |
1010 nullptr, &retransmission_rate_limiter_)); | 1011 nullptr, nullptr, &retransmission_rate_limiter_, nullptr)); |
1011 | 1012 |
1012 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1013 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1013 const uint8_t payload_type = 127; | 1014 const uint8_t payload_type = 127; |
1014 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1015 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1015 0, 1500)); | 1016 0, 1500)); |
1016 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1017 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1017 rtp_sender_->SetStorePacketsStatus(true, 1); | 1018 rtp_sender_->SetStorePacketsStatus(true, 1); |
1018 uint32_t ssrc = rtp_sender_->SSRC(); | 1019 uint32_t ssrc = rtp_sender_->SSRC(); |
1019 | 1020 |
1020 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1021 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1062 } | 1063 } |
1063 | 1064 |
1064 uint32_t num_calls_; | 1065 uint32_t num_calls_; |
1065 uint32_t ssrc_; | 1066 uint32_t ssrc_; |
1066 uint32_t total_bitrate_; | 1067 uint32_t total_bitrate_; |
1067 uint32_t retransmit_bitrate_; | 1068 uint32_t retransmit_bitrate_; |
1068 } callback; | 1069 } callback; |
1069 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 1070 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
1070 nullptr, nullptr, nullptr, &callback, nullptr, | 1071 nullptr, nullptr, nullptr, &callback, nullptr, |
1071 nullptr, nullptr, nullptr, | 1072 nullptr, nullptr, nullptr, |
1072 &retransmission_rate_limiter_)); | 1073 &retransmission_rate_limiter_, nullptr)); |
1073 | 1074 |
1074 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the | 1075 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the |
1075 // number of packets selected so that we fill (but don't overflow) the one | 1076 // number of packets selected so that we fill (but don't overflow) the one |
1076 // second averaging window. | 1077 // second averaging window. |
1077 const uint32_t kWindowSizeMs = 1000; | 1078 const uint32_t kWindowSizeMs = 1000; |
1078 const uint32_t kPacketInterval = 20; | 1079 const uint32_t kPacketInterval = 20; |
1079 const uint32_t kNumPackets = | 1080 const uint32_t kNumPackets = |
1080 (kWindowSizeMs - kPacketInterval) / kPacketInterval; | 1081 (kWindowSizeMs - kPacketInterval) / kPacketInterval; |
1081 // Overhead = 12 bytes RTP header + 1 byte generic header. | 1082 // Overhead = 12 bytes RTP header + 1 byte generic header. |
1082 const uint32_t kPacketOverhead = 13; | 1083 const uint32_t kPacketOverhead = 13; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1120 | 1121 |
1121 class RtpSenderAudioTest : public RtpSenderTest { | 1122 class RtpSenderAudioTest : public RtpSenderTest { |
1122 protected: | 1123 protected: |
1123 RtpSenderAudioTest() {} | 1124 RtpSenderAudioTest() {} |
1124 | 1125 |
1125 void SetUp() override { | 1126 void SetUp() override { |
1126 payload_ = kAudioPayload; | 1127 payload_ = kAudioPayload; |
1127 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, | 1128 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
1128 nullptr, nullptr, nullptr, nullptr, nullptr, | 1129 nullptr, nullptr, nullptr, nullptr, nullptr, |
1129 nullptr, nullptr, nullptr, | 1130 nullptr, nullptr, nullptr, |
1130 &retransmission_rate_limiter_)); | 1131 &retransmission_rate_limiter_, nullptr)); |
1131 rtp_sender_->SetSequenceNumber(kSeqNum); | 1132 rtp_sender_->SetSequenceNumber(kSeqNum); |
1132 } | 1133 } |
1133 }; | 1134 }; |
1134 | 1135 |
1135 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1136 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
1136 class TestCallback : public StreamDataCountersCallback { | 1137 class TestCallback : public StreamDataCountersCallback { |
1137 public: | 1138 public: |
1138 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} | 1139 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
1139 virtual ~TestCallback() {} | 1140 virtual ~TestCallback() {} |
1140 | 1141 |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1471 EXPECT_EQ(kVideoRotation_0, | 1472 EXPECT_EQ(kVideoRotation_0, |
1472 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); | 1473 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); |
1473 EXPECT_EQ(kVideoRotation_90, | 1474 EXPECT_EQ(kVideoRotation_90, |
1474 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); | 1475 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); |
1475 EXPECT_EQ(kVideoRotation_180, | 1476 EXPECT_EQ(kVideoRotation_180, |
1476 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); | 1477 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); |
1477 EXPECT_EQ(kVideoRotation_270, | 1478 EXPECT_EQ(kVideoRotation_270, |
1478 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); | 1479 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); |
1479 } | 1480 } |
1480 | 1481 |
| 1482 TEST_F(RtpSenderTest, OnOverheadPerPacketChanged) { |
| 1483 class MockOverheadPerPacketObserver : public OverheadPerPacketObserver { |
| 1484 public: |
| 1485 MOCK_METHOD1(OnOverheadPerPacketChange, void(int overhead_per_packet)); |
| 1486 }; |
| 1487 MockOverheadPerPacketObserver mock_overhead_observer; |
| 1488 rtp_sender_.reset( |
| 1489 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, |
| 1490 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
| 1491 &retransmission_rate_limiter_, &mock_overhead_observer)); |
| 1492 // Transport overhead is set to 28B. |
| 1493 EXPECT_CALL(mock_overhead_observer, OnOverheadPerPacketChange(28)).Times(1); |
| 1494 rtp_sender_->SetTransportOverhead(28); |
| 1495 |
| 1496 // RTP Overhead is without extensions is 12B. |
| 1497 // 28B + 12B = 40B |
| 1498 EXPECT_CALL(mock_overhead_observer, OnOverheadPerPacketChange(40)).Times(1); |
| 1499 SendGenericPayload(); |
| 1500 |
| 1501 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
| 1502 kTransmissionTimeOffsetExtensionId); |
| 1503 |
| 1504 // TransmissionTimeOffset extension has a size of 8B. |
| 1505 // 28B + 12B + 8B = 48B |
| 1506 EXPECT_CALL(mock_overhead_observer, OnOverheadPerPacketChange(48)).Times(1); |
| 1507 SendGenericPayload(); |
| 1508 } |
| 1509 |
1481 } // namespace webrtc | 1510 } // namespace webrtc |
OLD | NEW |