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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 transport_(), | 143 transport_(), |
144 kMarkerBit(true) {} | 144 kMarkerBit(true) {} |
145 | 145 |
146 void SetUp() override { SetUpRtpSender(true); } | 146 void SetUp() override { SetUpRtpSender(true); } |
147 | 147 |
148 void SetUpRtpSender(bool pacer) { | 148 void SetUpRtpSender(bool pacer) { |
149 rtp_sender_.reset(new RTPSender( | 149 rtp_sender_.reset(new RTPSender( |
150 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, | 150 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, |
151 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, | 151 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
152 &mock_rtc_event_log_, &send_packet_observer_, | 152 &mock_rtc_event_log_, &send_packet_observer_, |
153 &retransmission_rate_limiter_)); | 153 &retransmission_rate_limiter_, nullptr)); |
154 rtp_sender_->SetSendPayloadType(kPayload); | 154 rtp_sender_->SetSendPayloadType(kPayload); |
155 rtp_sender_->SetSequenceNumber(kSeqNum); | 155 rtp_sender_->SetSequenceNumber(kSeqNum); |
156 rtp_sender_->SetTimestampOffset(0); | 156 rtp_sender_->SetTimestampOffset(0); |
157 rtp_sender_->SetSSRC(kSsrc); | 157 rtp_sender_->SetSSRC(kSsrc); |
158 } | 158 } |
159 | 159 |
160 SimulatedClock fake_clock_; | 160 SimulatedClock fake_clock_; |
161 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; | 161 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; |
162 MockRtpPacketSender mock_paced_sender_; | 162 MockRtpPacketSender mock_paced_sender_; |
163 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; | 163 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 | 437 |
438 ASSERT_EQ(1u, transport_.sent_packets_.size()); | 438 ASSERT_EQ(1u, transport_.sent_packets_.size()); |
439 // Verify padding packet timestamp. | 439 // Verify padding packet timestamp. |
440 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); | 440 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
441 } | 441 } |
442 | 442 |
443 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | 443 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
444 rtp_sender_.reset(new RTPSender( | 444 rtp_sender_.reset(new RTPSender( |
445 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, | 445 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, |
446 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, | 446 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, |
447 &send_packet_observer_, &retransmission_rate_limiter_)); | 447 &send_packet_observer_, &retransmission_rate_limiter_, nullptr)); |
448 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 448 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
449 kRtpExtensionTransportSequenceNumber, | 449 kRtpExtensionTransportSequenceNumber, |
450 kTransportSequenceNumberExtensionId)); | 450 kTransportSequenceNumberExtensionId)); |
451 | 451 |
452 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 452 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
453 .WillOnce(testing::Return(kTransportSequenceNumber)); | 453 .WillOnce(testing::Return(kTransportSequenceNumber)); |
454 EXPECT_CALL(send_packet_observer_, | 454 EXPECT_CALL(send_packet_observer_, |
455 OnSendPacket(kTransportSequenceNumber, _, _)) | 455 OnSendPacket(kTransportSequenceNumber, _, _)) |
456 .Times(1); | 456 .Times(1); |
457 EXPECT_CALL(feedback_observer_, | 457 EXPECT_CALL(feedback_observer_, |
(...skipping 22 matching lines...) Expand all Loading... |
480 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 480 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
481 .WillOnce(testing::Return(kTransportSequenceNumber)); | 481 .WillOnce(testing::Return(kTransportSequenceNumber)); |
482 EXPECT_CALL(send_packet_observer_, | 482 EXPECT_CALL(send_packet_observer_, |
483 OnSendPacket(kTransportSequenceNumber, _, _)) | 483 OnSendPacket(kTransportSequenceNumber, _, _)) |
484 .Times(1); | 484 .Times(1); |
485 | 485 |
486 SendGenericPayload(); | 486 SendGenericPayload(); |
487 } | 487 } |
488 | 488 |
489 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { | 489 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
490 rtp_sender_.reset( | 490 rtp_sender_.reset(new RTPSender( |
491 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | 491 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
492 nullptr, &seq_num_allocator_, &feedback_observer_, nullptr, | 492 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, |
493 nullptr, nullptr, &mock_rtc_event_log_, | 493 &mock_rtc_event_log_, &send_packet_observer_, |
494 &send_packet_observer_, &retransmission_rate_limiter_)); | 494 &retransmission_rate_limiter_, nullptr)); |
495 rtp_sender_->SetSequenceNumber(kSeqNum); | 495 rtp_sender_->SetSequenceNumber(kSeqNum); |
496 rtp_sender_->SetSSRC(kSsrc); | 496 rtp_sender_->SetSSRC(kSsrc); |
497 rtp_sender_->SetStorePacketsStatus(true, 10); | 497 rtp_sender_->SetStorePacketsStatus(true, 10); |
498 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 498 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
499 kRtpExtensionTransportSequenceNumber, | 499 kRtpExtensionTransportSequenceNumber, |
500 kTransportSequenceNumberExtensionId)); | 500 kTransportSequenceNumberExtensionId)); |
501 | 501 |
502 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)); | 502 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)); |
503 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 503 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
504 .WillOnce(testing::Return(kTransportSequenceNumber)); | 504 .WillOnce(testing::Return(kTransportSequenceNumber)); |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 768 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
769 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 769 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
770 PacketInfo::kNotAProbe); | 770 PacketInfo::kNotAProbe); |
771 EXPECT_EQ(1, transport_.packets_sent()); | 771 EXPECT_EQ(1, transport_.packets_sent()); |
772 } | 772 } |
773 | 773 |
774 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { | 774 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
775 rtp_sender_.reset(new RTPSender( | 775 rtp_sender_.reset(new RTPSender( |
776 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, | 776 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, |
777 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, | 777 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
778 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_)); | 778 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, |
| 779 nullptr)); |
779 rtp_sender_->SetSequenceNumber(kSeqNum); | 780 rtp_sender_->SetSequenceNumber(kSeqNum); |
780 rtp_sender_->SetSSRC(kSsrc); | 781 rtp_sender_->SetSSRC(kSsrc); |
781 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 782 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
782 kRtpExtensionTransportSequenceNumber, | 783 kRtpExtensionTransportSequenceNumber, |
783 kTransportSequenceNumberExtensionId)); | 784 kTransportSequenceNumberExtensionId)); |
784 rtp_sender_->SetSequenceNumber(kSeqNum); | 785 rtp_sender_->SetSequenceNumber(kSeqNum); |
785 rtp_sender_->SetStorePacketsStatus(true, 10); | 786 rtp_sender_->SetStorePacketsStatus(true, 10); |
786 | 787 |
787 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 788 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
788 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) | 789 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) |
789 .Times(1); | 790 .Times(1); |
790 | 791 |
791 SendGenericPayload(); // Packet passed to pacer. | 792 SendGenericPayload(); // Packet passed to pacer. |
792 const bool kIsRetransmit = false; | 793 const bool kIsRetransmit = false; |
793 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, | 794 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, |
794 fake_clock_.TimeInMilliseconds(), kIsRetransmit, | 795 fake_clock_.TimeInMilliseconds(), kIsRetransmit, |
795 PacketInfo::kNotAProbe); | 796 PacketInfo::kNotAProbe); |
796 EXPECT_EQ(1, transport_.packets_sent()); | 797 EXPECT_EQ(1, transport_.packets_sent()); |
797 } | 798 } |
798 | 799 |
799 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 800 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
800 MockTransport transport; | 801 MockTransport transport; |
801 rtp_sender_.reset(new RTPSender( | 802 rtp_sender_.reset(new RTPSender( |
802 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, | 803 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, |
803 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, | 804 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, |
804 &retransmission_rate_limiter_)); | 805 &retransmission_rate_limiter_, nullptr)); |
805 rtp_sender_->SetSequenceNumber(kSeqNum); | 806 rtp_sender_->SetSequenceNumber(kSeqNum); |
806 rtp_sender_->SetSSRC(kSsrc); | 807 rtp_sender_->SetSSRC(kSsrc); |
807 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 808 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
808 | 809 |
809 uint16_t seq_num = kSeqNum; | 810 uint16_t seq_num = kSeqNum; |
810 rtp_sender_->SetStorePacketsStatus(true, 10); | 811 rtp_sender_->SetStorePacketsStatus(true, 10); |
811 int32_t rtp_header_len = kRtpHeaderSize; | 812 int32_t rtp_header_len = kRtpHeaderSize; |
812 EXPECT_EQ( | 813 EXPECT_EQ( |
813 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 814 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
814 kAbsoluteSendTimeExtensionId)); | 815 kAbsoluteSendTimeExtensionId)); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
912 TEST_F(RtpSenderTest, SendFlexfecPackets) { | 913 TEST_F(RtpSenderTest, SendFlexfecPackets) { |
913 constexpr int kMediaPayloadType = 127; | 914 constexpr int kMediaPayloadType = 127; |
914 constexpr int kFlexfecPayloadType = 118; | 915 constexpr int kFlexfecPayloadType = 118; |
915 constexpr uint32_t kMediaSsrc = 1234; | 916 constexpr uint32_t kMediaSsrc = 1234; |
916 constexpr uint32_t kFlexfecSsrc = 5678; | 917 constexpr uint32_t kFlexfecSsrc = 5678; |
917 const std::vector<RtpExtension> kNoRtpExtensions; | 918 const std::vector<RtpExtension> kNoRtpExtensions; |
918 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 919 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
919 kNoRtpExtensions, &fake_clock_); | 920 kNoRtpExtensions, &fake_clock_); |
920 | 921 |
921 // Reset |rtp_sender_| to use FlexFEC. | 922 // Reset |rtp_sender_| to use FlexFEC. |
922 rtp_sender_.reset( | 923 rtp_sender_.reset(new RTPSender( |
923 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, | 924 false, &fake_clock_, &transport_, &mock_paced_sender_, &flexfec_sender, |
924 &flexfec_sender, &seq_num_allocator_, nullptr, nullptr, | 925 &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
925 nullptr, nullptr, &mock_rtc_event_log_, | 926 &mock_rtc_event_log_, &send_packet_observer_, |
926 &send_packet_observer_, &retransmission_rate_limiter_)); | 927 &retransmission_rate_limiter_, nullptr)); |
927 rtp_sender_->SetSSRC(kMediaSsrc); | 928 rtp_sender_->SetSSRC(kMediaSsrc); |
928 rtp_sender_->SetSequenceNumber(kSeqNum); | 929 rtp_sender_->SetSequenceNumber(kSeqNum); |
929 rtp_sender_->SetSendPayloadType(kMediaPayloadType); | 930 rtp_sender_->SetSendPayloadType(kMediaPayloadType); |
930 rtp_sender_->SetStorePacketsStatus(true, 10); | 931 rtp_sender_->SetStorePacketsStatus(true, 10); |
931 | 932 |
932 // Parameters selected to generate a single FEC packet per media packet. | 933 // Parameters selected to generate a single FEC packet per media packet. |
933 FecProtectionParams params; | 934 FecProtectionParams params; |
934 params.fec_rate = 15; | 935 params.fec_rate = 15; |
935 params.max_fec_frames = 1; | 936 params.max_fec_frames = 1; |
936 params.fec_mask_type = kFecMaskRandom; | 937 params.fec_mask_type = kFecMaskRandom; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 constexpr uint32_t kFlexfecSsrc = 5678; | 971 constexpr uint32_t kFlexfecSsrc = 5678; |
971 const std::vector<RtpExtension> kNoRtpExtensions; | 972 const std::vector<RtpExtension> kNoRtpExtensions; |
972 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 973 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
973 kNoRtpExtensions, &fake_clock_); | 974 kNoRtpExtensions, &fake_clock_); |
974 | 975 |
975 // Reset |rtp_sender_| to use FlexFEC. | 976 // Reset |rtp_sender_| to use FlexFEC. |
976 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 977 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
977 &flexfec_sender, &seq_num_allocator_, nullptr, | 978 &flexfec_sender, &seq_num_allocator_, nullptr, |
978 nullptr, nullptr, nullptr, | 979 nullptr, nullptr, nullptr, |
979 &mock_rtc_event_log_, &send_packet_observer_, | 980 &mock_rtc_event_log_, &send_packet_observer_, |
980 &retransmission_rate_limiter_)); | 981 &retransmission_rate_limiter_, nullptr)); |
981 rtp_sender_->SetSSRC(kMediaSsrc); | 982 rtp_sender_->SetSSRC(kMediaSsrc); |
982 rtp_sender_->SetSequenceNumber(kSeqNum); | 983 rtp_sender_->SetSequenceNumber(kSeqNum); |
983 rtp_sender_->SetSendPayloadType(kMediaPayloadType); | 984 rtp_sender_->SetSendPayloadType(kMediaPayloadType); |
984 | 985 |
985 // Parameters selected to generate a single FEC packet per media packet. | 986 // Parameters selected to generate a single FEC packet per media packet. |
986 FecProtectionParams params; | 987 FecProtectionParams params; |
987 params.fec_rate = 15; | 988 params.fec_rate = 15; |
988 params.max_fec_frames = 1; | 989 params.max_fec_frames = 1; |
989 params.fec_mask_type = kFecMaskRandom; | 990 params.fec_mask_type = kFecMaskRandom; |
990 rtp_sender_->SetFecParameters(params, params); | 991 rtp_sender_->SetFecParameters(params, params); |
(...skipping 22 matching lines...) Expand all Loading... |
1013 ++num_calls_; | 1014 ++num_calls_; |
1014 ssrc_ = ssrc; | 1015 ssrc_ = ssrc; |
1015 frame_counts_ = frame_counts; | 1016 frame_counts_ = frame_counts; |
1016 } | 1017 } |
1017 | 1018 |
1018 uint32_t num_calls_; | 1019 uint32_t num_calls_; |
1019 uint32_t ssrc_; | 1020 uint32_t ssrc_; |
1020 FrameCounts frame_counts_; | 1021 FrameCounts frame_counts_; |
1021 } callback; | 1022 } callback; |
1022 | 1023 |
1023 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, | 1024 rtp_sender_.reset( |
1024 &mock_paced_sender_, nullptr, nullptr, | 1025 new RTPSender(false, &fake_clock_, &transport_, &mock_paced_sender_, |
1025 nullptr, nullptr, &callback, nullptr, nullptr, | 1026 nullptr, nullptr, nullptr, nullptr, &callback, nullptr, |
1026 nullptr, &retransmission_rate_limiter_)); | 1027 nullptr, nullptr, &retransmission_rate_limiter_, nullptr)); |
1027 | 1028 |
1028 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1029 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1029 const uint8_t payload_type = 127; | 1030 const uint8_t payload_type = 127; |
1030 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1031 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1031 0, 1500)); | 1032 0, 1500)); |
1032 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1033 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1033 rtp_sender_->SetStorePacketsStatus(true, 1); | 1034 rtp_sender_->SetStorePacketsStatus(true, 1); |
1034 uint32_t ssrc = rtp_sender_->SSRC(); | 1035 uint32_t ssrc = rtp_sender_->SSRC(); |
1035 | 1036 |
1036 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1037 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1078 } | 1079 } |
1079 | 1080 |
1080 uint32_t num_calls_; | 1081 uint32_t num_calls_; |
1081 uint32_t ssrc_; | 1082 uint32_t ssrc_; |
1082 uint32_t total_bitrate_; | 1083 uint32_t total_bitrate_; |
1083 uint32_t retransmit_bitrate_; | 1084 uint32_t retransmit_bitrate_; |
1084 } callback; | 1085 } callback; |
1085 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, | 1086 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
1086 nullptr, nullptr, nullptr, &callback, nullptr, | 1087 nullptr, nullptr, nullptr, &callback, nullptr, |
1087 nullptr, nullptr, nullptr, | 1088 nullptr, nullptr, nullptr, |
1088 &retransmission_rate_limiter_)); | 1089 &retransmission_rate_limiter_, nullptr)); |
1089 | 1090 |
1090 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the | 1091 // Simulate kNumPackets sent with kPacketInterval ms intervals, with the |
1091 // number of packets selected so that we fill (but don't overflow) the one | 1092 // number of packets selected so that we fill (but don't overflow) the one |
1092 // second averaging window. | 1093 // second averaging window. |
1093 const uint32_t kWindowSizeMs = 1000; | 1094 const uint32_t kWindowSizeMs = 1000; |
1094 const uint32_t kPacketInterval = 20; | 1095 const uint32_t kPacketInterval = 20; |
1095 const uint32_t kNumPackets = | 1096 const uint32_t kNumPackets = |
1096 (kWindowSizeMs - kPacketInterval) / kPacketInterval; | 1097 (kWindowSizeMs - kPacketInterval) / kPacketInterval; |
1097 // Overhead = 12 bytes RTP header + 1 byte generic header. | 1098 // Overhead = 12 bytes RTP header + 1 byte generic header. |
1098 const uint32_t kPacketOverhead = 13; | 1099 const uint32_t kPacketOverhead = 13; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1136 | 1137 |
1137 class RtpSenderAudioTest : public RtpSenderTest { | 1138 class RtpSenderAudioTest : public RtpSenderTest { |
1138 protected: | 1139 protected: |
1139 RtpSenderAudioTest() {} | 1140 RtpSenderAudioTest() {} |
1140 | 1141 |
1141 void SetUp() override { | 1142 void SetUp() override { |
1142 payload_ = kAudioPayload; | 1143 payload_ = kAudioPayload; |
1143 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, | 1144 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
1144 nullptr, nullptr, nullptr, nullptr, nullptr, | 1145 nullptr, nullptr, nullptr, nullptr, nullptr, |
1145 nullptr, nullptr, nullptr, | 1146 nullptr, nullptr, nullptr, |
1146 &retransmission_rate_limiter_)); | 1147 &retransmission_rate_limiter_, nullptr)); |
1147 rtp_sender_->SetSequenceNumber(kSeqNum); | 1148 rtp_sender_->SetSequenceNumber(kSeqNum); |
1148 } | 1149 } |
1149 }; | 1150 }; |
1150 | 1151 |
1151 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1152 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
1152 class TestCallback : public StreamDataCountersCallback { | 1153 class TestCallback : public StreamDataCountersCallback { |
1153 public: | 1154 public: |
1154 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} | 1155 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
1155 virtual ~TestCallback() {} | 1156 virtual ~TestCallback() {} |
1156 | 1157 |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1487 EXPECT_EQ(kVideoRotation_0, | 1488 EXPECT_EQ(kVideoRotation_0, |
1488 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); | 1489 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); |
1489 EXPECT_EQ(kVideoRotation_90, | 1490 EXPECT_EQ(kVideoRotation_90, |
1490 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); | 1491 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); |
1491 EXPECT_EQ(kVideoRotation_180, | 1492 EXPECT_EQ(kVideoRotation_180, |
1492 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); | 1493 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); |
1493 EXPECT_EQ(kVideoRotation_270, | 1494 EXPECT_EQ(kVideoRotation_270, |
1494 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); | 1495 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); |
1495 } | 1496 } |
1496 | 1497 |
| 1498 namespace { |
| 1499 class MockOverheadObserver : public OverheadObserver { |
| 1500 public: |
| 1501 MOCK_METHOD1(OnOverheadChanged, void(size_t overhead_bytes_per_packet)); |
| 1502 }; |
| 1503 } // namespace |
| 1504 |
| 1505 TEST_F(RtpSenderTest, OnOverheadChanged) { |
| 1506 MockOverheadObserver mock_overhead_observer; |
| 1507 rtp_sender_.reset( |
| 1508 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, |
| 1509 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
| 1510 &retransmission_rate_limiter_, &mock_overhead_observer)); |
| 1511 |
| 1512 // Transport overhead is set to 28B. |
| 1513 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(28)).Times(1); |
| 1514 rtp_sender_->SetTransportOverhead(28); |
| 1515 |
| 1516 // RTP overhead is 12B. |
| 1517 // 28B + 12B = 40B |
| 1518 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(40)).Times(1); |
| 1519 SendGenericPayload(); |
| 1520 |
| 1521 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
| 1522 kTransmissionTimeOffsetExtensionId); |
| 1523 |
| 1524 // TransmissionTimeOffset extension has a size of 8B. |
| 1525 // 28B + 12B + 8B = 48B |
| 1526 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(48)).Times(1); |
| 1527 SendGenericPayload(); |
| 1528 } |
| 1529 |
| 1530 TEST_F(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) { |
| 1531 MockOverheadObserver mock_overhead_observer; |
| 1532 rtp_sender_.reset( |
| 1533 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, |
| 1534 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
| 1535 &retransmission_rate_limiter_, &mock_overhead_observer)); |
| 1536 |
| 1537 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1); |
| 1538 rtp_sender_->SetTransportOverhead(28); |
| 1539 rtp_sender_->SetTransportOverhead(28); |
| 1540 |
| 1541 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1); |
| 1542 SendGenericPayload(); |
| 1543 SendGenericPayload(); |
| 1544 } |
| 1545 |
1497 } // namespace webrtc | 1546 } // namespace webrtc |
OLD | NEW |