| 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 |