Index: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
index ddf6422a9f16822f1b873f34f99b9e9872b2537e..a4ab7b7c882eed91cce5fe4dddaccea121fbe41c 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
@@ -891,6 +891,49 @@ TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) { |
EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); |
} |
+TEST_F(RtpSenderTest, FecOverheadRate) { |
+ constexpr int kMediaPayloadType = 127; |
+ constexpr int kFlexfecPayloadType = 118; |
+ constexpr uint32_t kMediaSsrc = 1234; |
+ constexpr uint32_t kFlexfecSsrc = 5678; |
+ const std::vector<RtpExtension> kNoRtpExtensions; |
+ FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
+ kNoRtpExtensions, &fake_clock_); |
+ |
+ // Reset |rtp_sender_| to use FlexFEC. |
+ rtp_sender_.reset(new RTPSender( |
+ false, &fake_clock_, &transport_, &mock_paced_sender_, &flexfec_sender, |
+ &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
+ &mock_rtc_event_log_, &send_packet_observer_, |
+ &retransmission_rate_limiter_, nullptr)); |
+ rtp_sender_->SetSSRC(kMediaSsrc); |
+ rtp_sender_->SetSequenceNumber(kSeqNum); |
+ rtp_sender_->SetSendPayloadType(kMediaPayloadType); |
+ |
+ // Parameters selected to generate a single FEC packet per media packet. |
+ FecProtectionParams params; |
+ params.fec_rate = 15; |
+ params.max_fec_frames = 1; |
+ params.fec_mask_type = kFecMaskRandom; |
+ rtp_sender_->SetFecParameters(params, params); |
+ |
+ // Send 10 media packet, and therefore 10 FEC packets. |
+ EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, false)) |
+ .WillRepeatedly(testing::Return()); |
danilchap
2017/01/24 09:56:27
if it doesn't matter how many times InsertPacket w
brandtr
2017/01/24 10:28:13
Done.
|
+ for (int i = 0; i < 10; ++i) { |
+ SendGenericPayload(); |
+ fake_clock_.AdvanceTimeMilliseconds(10); |
+ } |
+ constexpr size_t kRtpHeaderLength = 12; |
+ constexpr size_t kFlexfecHeaderLength = 20; |
+ constexpr size_t kGenericCodecHeaderLength = 1; |
+ constexpr size_t kPayloadLength = sizeof(kPayloadData); |
+ constexpr size_t kPacketLength = kRtpHeaderLength + kFlexfecHeaderLength + |
+ kGenericCodecHeaderLength + kPayloadLength; |
+ EXPECT_EQ(static_cast<uint32_t>(10 * 8 * kPacketLength / 0.101f), |
danilchap
2017/01/24 09:56:27
may be EXPECT_NEAR to avoid cast and magic constan
brandtr
2017/01/24 10:28:13
Done. WDYT?
danilchap
2017/01/24 10:35:13
Nice!
|
+ rtp_sender_->FecOverheadRate()); |
+} |
+ |
TEST_F(RtpSenderTest, FrameCountCallbacks) { |
class TestCallback : public FrameCountObserver { |
public: |