| 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 15 matching lines...) Expand all Loading... |
| 26 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | 26 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
| 27 | 27 |
| 28 namespace webrtc { | 28 namespace webrtc { |
| 29 | 29 |
| 30 namespace { // Anonymous namespace; hide utility functions and classes. | 30 namespace { // Anonymous namespace; hide utility functions and classes. |
| 31 | 31 |
| 32 // This test transport verifies that no functions get called. | 32 // This test transport verifies that no functions get called. |
| 33 class TestTransport : public Transport, | 33 class TestTransport : public Transport, |
| 34 public NullRtpData { | 34 public NullRtpData { |
| 35 public: | 35 public: |
| 36 explicit TestTransport() : rtcp_receiver_(nullptr) {} | 36 explicit TestTransport() |
| 37 : rtcp_receiver_(NULL) { |
| 38 } |
| 37 void SetRTCPReceiver(RTCPReceiver* rtcp_receiver) { | 39 void SetRTCPReceiver(RTCPReceiver* rtcp_receiver) { |
| 38 rtcp_receiver_ = rtcp_receiver; | 40 rtcp_receiver_ = rtcp_receiver; |
| 39 } | 41 } |
| 40 int SendPacket(const void* /*data*/, size_t /*len*/) override { | 42 int SendPacket(const void* /*data*/, size_t /*len*/) override { |
| 41 ADD_FAILURE(); // FAIL() gives a compile error. | 43 ADD_FAILURE(); // FAIL() gives a compile error. |
| 42 return -1; | 44 return -1; |
| 43 } | 45 } |
| 44 | 46 |
| 45 int SendRTCPPacket(const void* packet, size_t packet_len) override { | 47 int SendRTCPPacket(const void* packet, size_t packet_len) override { |
| 46 ADD_FAILURE(); | 48 ADD_FAILURE(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 69 &system_clock_, | 71 &system_clock_, |
| 70 kRemoteBitrateEstimatorMinBitrateBps)) { | 72 kRemoteBitrateEstimatorMinBitrateBps)) { |
| 71 test_transport_ = new TestTransport(); | 73 test_transport_ = new TestTransport(); |
| 72 | 74 |
| 73 RtpRtcp::Configuration configuration; | 75 RtpRtcp::Configuration configuration; |
| 74 configuration.audio = false; | 76 configuration.audio = false; |
| 75 configuration.clock = &system_clock_; | 77 configuration.clock = &system_clock_; |
| 76 configuration.outgoing_transport = test_transport_; | 78 configuration.outgoing_transport = test_transport_; |
| 77 configuration.remote_bitrate_estimator = remote_bitrate_estimator_.get(); | 79 configuration.remote_bitrate_estimator = remote_bitrate_estimator_.get(); |
| 78 rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration); | 80 rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration); |
| 79 rtcp_receiver_ = new RTCPReceiver(&system_clock_, false, nullptr, nullptr, | 81 rtcp_receiver_ = new RTCPReceiver(&system_clock_, false, NULL, NULL, NULL, |
| 80 nullptr, nullptr, rtp_rtcp_impl_); | 82 rtp_rtcp_impl_); |
| 81 test_transport_->SetRTCPReceiver(rtcp_receiver_); | 83 test_transport_->SetRTCPReceiver(rtcp_receiver_); |
| 82 } | 84 } |
| 83 ~RtcpReceiverTest() { | 85 ~RtcpReceiverTest() { |
| 84 delete rtcp_receiver_; | 86 delete rtcp_receiver_; |
| 85 delete rtp_rtcp_impl_; | 87 delete rtp_rtcp_impl_; |
| 86 delete test_transport_; | 88 delete test_transport_; |
| 87 } | 89 } |
| 88 | 90 |
| 89 // Injects an RTCP packet into the receiver. | 91 // Injects an RTCP packet into the receiver. |
| 90 // Returns 0 for OK, non-0 for failure. | 92 // Returns 0 for OK, non-0 for failure. |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 } | 355 } |
| 354 | 356 |
| 355 TEST_F(RtcpReceiverTest, GetRtt) { | 357 TEST_F(RtcpReceiverTest, GetRtt) { |
| 356 const uint32_t kSenderSsrc = 0x10203; | 358 const uint32_t kSenderSsrc = 0x10203; |
| 357 const uint32_t kSourceSsrc = 0x123456; | 359 const uint32_t kSourceSsrc = 0x123456; |
| 358 std::set<uint32_t> ssrcs; | 360 std::set<uint32_t> ssrcs; |
| 359 ssrcs.insert(kSourceSsrc); | 361 ssrcs.insert(kSourceSsrc); |
| 360 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 362 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 361 | 363 |
| 362 // No report block received. | 364 // No report block received. |
| 363 EXPECT_EQ( | 365 EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc, NULL, NULL, NULL, NULL)); |
| 364 -1, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); | |
| 365 | 366 |
| 366 rtcp::ReportBlock rb; | 367 rtcp::ReportBlock rb; |
| 367 rb.To(kSourceSsrc); | 368 rb.To(kSourceSsrc); |
| 368 rtcp::ReceiverReport rr; | 369 rtcp::ReceiverReport rr; |
| 369 rr.From(kSenderSsrc); | 370 rr.From(kSenderSsrc); |
| 370 rr.WithReportBlock(rb); | 371 rr.WithReportBlock(rb); |
| 371 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 372 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); |
| 372 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 373 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 373 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 374 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); |
| 374 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 375 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 375 EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 376 EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size()); |
| 376 EXPECT_EQ( | 377 EXPECT_EQ(0, rtcp_receiver_->RTT(kSenderSsrc, NULL, NULL, NULL, NULL)); |
| 377 0, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); | |
| 378 | 378 |
| 379 // Report block not received. | 379 // Report block not received. |
| 380 EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, nullptr, nullptr, nullptr, | 380 EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, NULL, NULL, NULL, NULL)); |
| 381 nullptr)); | |
| 382 } | 381 } |
| 383 | 382 |
| 384 TEST_F(RtcpReceiverTest, InjectIjWithNoItem) { | 383 TEST_F(RtcpReceiverTest, InjectIjWithNoItem) { |
| 385 rtcp::Ij ij; | 384 rtcp::Ij ij; |
| 386 rtc::scoped_ptr<rtcp::RawPacket> packet(ij.Build()); | 385 rtc::scoped_ptr<rtcp::RawPacket> packet(ij.Build()); |
| 387 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 386 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 388 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 387 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 389 } | 388 } |
| 390 | 389 |
| 391 TEST_F(RtcpReceiverTest, InjectIjWithOneItem) { | 390 TEST_F(RtcpReceiverTest, InjectIjWithOneItem) { |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 | 582 |
| 584 const uint8_t kLossRate = 123; | 583 const uint8_t kLossRate = 123; |
| 585 rtcp::VoipMetric voip_metric; | 584 rtcp::VoipMetric voip_metric; |
| 586 voip_metric.To(kSourceSsrc); | 585 voip_metric.To(kSourceSsrc); |
| 587 voip_metric.LossRate(kLossRate); | 586 voip_metric.LossRate(kLossRate); |
| 588 rtcp::Xr xr; | 587 rtcp::Xr xr; |
| 589 xr.From(0x2345); | 588 xr.From(0x2345); |
| 590 xr.WithVoipMetric(&voip_metric); | 589 xr.WithVoipMetric(&voip_metric); |
| 591 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 590 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 592 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 591 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 593 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); | 592 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != NULL); |
| 594 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); | 593 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); |
| 595 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); | 594 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 596 } | 595 } |
| 597 | 596 |
| 598 TEST_F(RtcpReceiverTest, XrVoipPacketNotToUsIgnored) { | 597 TEST_F(RtcpReceiverTest, XrVoipPacketNotToUsIgnored) { |
| 599 const uint32_t kSourceSsrc = 0x123456; | 598 const uint32_t kSourceSsrc = 0x123456; |
| 600 std::set<uint32_t> ssrcs; | 599 std::set<uint32_t> ssrcs; |
| 601 ssrcs.insert(kSourceSsrc); | 600 ssrcs.insert(kSourceSsrc); |
| 602 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 601 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 603 | 602 |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 837 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 836 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); |
| 838 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); | 837 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); |
| 839 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 838 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
| 840 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 839 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
| 841 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); | 840 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); |
| 842 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 841 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
| 843 } | 842 } |
| 844 | 843 |
| 845 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { | 844 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { |
| 846 // This call is expected to fail because no data has arrived. | 845 // This call is expected to fail because no data has arrived. |
| 847 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 846 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, NULL)); |
| 848 } | 847 } |
| 849 | 848 |
| 850 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { | 849 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { |
| 851 const uint32_t kMediaFlowSsrc = 0x2040608; | 850 const uint32_t kMediaFlowSsrc = 0x2040608; |
| 852 const uint32_t kSenderSsrc = 0x10203; | 851 const uint32_t kSenderSsrc = 0x10203; |
| 853 std::set<uint32_t> ssrcs; | 852 std::set<uint32_t> ssrcs; |
| 854 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 853 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
| 855 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 854 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
| 856 | 855 |
| 857 rtcp::Tmmbr tmmbr; | 856 rtcp::Tmmbr tmmbr; |
| 858 tmmbr.From(kSenderSsrc); | 857 tmmbr.From(kSenderSsrc); |
| 859 tmmbr.To(kMediaFlowSsrc); | 858 tmmbr.To(kMediaFlowSsrc); |
| 860 tmmbr.WithBitrateKbps(30); | 859 tmmbr.WithBitrateKbps(30); |
| 861 | 860 |
| 862 rtcp::SenderReport sr; | 861 rtcp::SenderReport sr; |
| 863 sr.From(kSenderSsrc); | 862 sr.From(kSenderSsrc); |
| 864 sr.Append(&tmmbr); | 863 sr.Append(&tmmbr); |
| 865 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 864 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); |
| 866 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 865 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 867 | 866 |
| 868 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 867 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, NULL)); |
| 869 TMMBRSet candidate_set; | 868 TMMBRSet candidate_set; |
| 870 candidate_set.VerifyAndAllocateSet(1); | 869 candidate_set.VerifyAndAllocateSet(1); |
| 871 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); | 870 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); |
| 872 EXPECT_LT(0U, candidate_set.Tmmbr(0)); | 871 EXPECT_LT(0U, candidate_set.Tmmbr(0)); |
| 873 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0)); | 872 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0)); |
| 874 } | 873 } |
| 875 | 874 |
| 876 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { | 875 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { |
| 877 const uint32_t kMediaFlowSsrc = 0x2040608; | 876 const uint32_t kMediaFlowSsrc = 0x2040608; |
| 878 const uint32_t kSenderSsrc = 0x10203; | 877 const uint32_t kSenderSsrc = 0x10203; |
| 879 | 878 |
| 880 rtcp::Tmmbr tmmbr; | 879 rtcp::Tmmbr tmmbr; |
| 881 tmmbr.From(kSenderSsrc); | 880 tmmbr.From(kSenderSsrc); |
| 882 tmmbr.To(kMediaFlowSsrc + 1); // This SSRC is not what we are sending. | 881 tmmbr.To(kMediaFlowSsrc + 1); // This SSRC is not what we are sending. |
| 883 tmmbr.WithBitrateKbps(30); | 882 tmmbr.WithBitrateKbps(30); |
| 884 | 883 |
| 885 rtcp::SenderReport sr; | 884 rtcp::SenderReport sr; |
| 886 sr.From(kSenderSsrc); | 885 sr.From(kSenderSsrc); |
| 887 sr.Append(&tmmbr); | 886 sr.Append(&tmmbr); |
| 888 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 887 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); |
| 889 | 888 |
| 890 std::set<uint32_t> ssrcs; | 889 std::set<uint32_t> ssrcs; |
| 891 ssrcs.insert(kMediaFlowSsrc); | 890 ssrcs.insert(kMediaFlowSsrc); |
| 892 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 891 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
| 893 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 892 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 894 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 893 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, NULL)); |
| 895 } | 894 } |
| 896 | 895 |
| 897 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { | 896 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { |
| 898 const uint32_t kMediaFlowSsrc = 0x2040608; | 897 const uint32_t kMediaFlowSsrc = 0x2040608; |
| 899 const uint32_t kSenderSsrc = 0x10203; | 898 const uint32_t kSenderSsrc = 0x10203; |
| 900 std::set<uint32_t> ssrcs; | 899 std::set<uint32_t> ssrcs; |
| 901 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 900 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
| 902 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 901 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
| 903 | 902 |
| 904 rtcp::Tmmbr tmmbr; | 903 rtcp::Tmmbr tmmbr; |
| 905 tmmbr.From(kSenderSsrc); | 904 tmmbr.From(kSenderSsrc); |
| 906 tmmbr.To(kMediaFlowSsrc); | 905 tmmbr.To(kMediaFlowSsrc); |
| 907 tmmbr.WithBitrateKbps(0); | 906 tmmbr.WithBitrateKbps(0); |
| 908 | 907 |
| 909 rtcp::SenderReport sr; | 908 rtcp::SenderReport sr; |
| 910 sr.From(kSenderSsrc); | 909 sr.From(kSenderSsrc); |
| 911 sr.Append(&tmmbr); | 910 sr.Append(&tmmbr); |
| 912 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 911 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); |
| 913 | 912 |
| 914 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 913 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 915 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 914 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, NULL)); |
| 916 } | 915 } |
| 917 | 916 |
| 918 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { | 917 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { |
| 919 const uint32_t kMediaFlowSsrc = 0x2040608; | 918 const uint32_t kMediaFlowSsrc = 0x2040608; |
| 920 const uint32_t kSenderSsrc = 0x10203; | 919 const uint32_t kSenderSsrc = 0x10203; |
| 921 std::set<uint32_t> ssrcs; | 920 std::set<uint32_t> ssrcs; |
| 922 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 921 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
| 923 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 922 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
| 924 | 923 |
| 925 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. | 924 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. |
| 926 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. | 925 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. |
| 927 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { | 926 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { |
| 928 rtcp::Tmmbr tmmbr; | 927 rtcp::Tmmbr tmmbr; |
| 929 tmmbr.From(ssrc); | 928 tmmbr.From(ssrc); |
| 930 tmmbr.To(kMediaFlowSsrc); | 929 tmmbr.To(kMediaFlowSsrc); |
| 931 tmmbr.WithBitrateKbps(30); | 930 tmmbr.WithBitrateKbps(30); |
| 932 | 931 |
| 933 rtcp::SenderReport sr; | 932 rtcp::SenderReport sr; |
| 934 sr.From(ssrc); | 933 sr.From(ssrc); |
| 935 sr.Append(&tmmbr); | 934 sr.Append(&tmmbr); |
| 936 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 935 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); |
| 937 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 936 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 938 // 5 seconds between each packet. | 937 // 5 seconds between each packet. |
| 939 system_clock_.AdvanceTimeMilliseconds(5000); | 938 system_clock_.AdvanceTimeMilliseconds(5000); |
| 940 } | 939 } |
| 941 // It is now starttime + 15. | 940 // It is now starttime + 15. |
| 942 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 941 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, NULL)); |
| 943 TMMBRSet candidate_set; | 942 TMMBRSet candidate_set; |
| 944 candidate_set.VerifyAndAllocateSet(3); | 943 candidate_set.VerifyAndAllocateSet(3); |
| 945 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); | 944 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); |
| 946 EXPECT_LT(0U, candidate_set.Tmmbr(0)); | 945 EXPECT_LT(0U, candidate_set.Tmmbr(0)); |
| 947 // We expect the timeout to be 25 seconds. Advance the clock by 12 | 946 // We expect the timeout to be 25 seconds. Advance the clock by 12 |
| 948 // seconds, timing out the first packet. | 947 // seconds, timing out the first packet. |
| 949 system_clock_.AdvanceTimeMilliseconds(12000); | 948 system_clock_.AdvanceTimeMilliseconds(12000); |
| 950 // Odd behaviour: Just counting them does not trigger the timeout. | 949 // Odd behaviour: Just counting them does not trigger the timeout. |
| 951 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 950 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, NULL)); |
| 952 EXPECT_EQ(2, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); | 951 EXPECT_EQ(2, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); |
| 953 EXPECT_EQ(kSenderSsrc + 1, candidate_set.Ssrc(0)); | 952 EXPECT_EQ(kSenderSsrc + 1, candidate_set.Ssrc(0)); |
| 954 } | 953 } |
| 955 | 954 |
| 956 TEST_F(RtcpReceiverTest, Callbacks) { | 955 TEST_F(RtcpReceiverTest, Callbacks) { |
| 957 class RtcpCallbackImpl : public RtcpStatisticsCallback { | 956 class RtcpCallbackImpl : public RtcpStatisticsCallback { |
| 958 public: | 957 public: |
| 959 RtcpCallbackImpl() : RtcpStatisticsCallback(), ssrc_(0) {} | 958 RtcpCallbackImpl() : RtcpStatisticsCallback(), ssrc_(0) {} |
| 960 virtual ~RtcpCallbackImpl() {} | 959 virtual ~RtcpCallbackImpl() {} |
| 961 | 960 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1002 rb1.WithJitter(kJitter); | 1001 rb1.WithJitter(kJitter); |
| 1003 | 1002 |
| 1004 rtcp::ReceiverReport rr1; | 1003 rtcp::ReceiverReport rr1; |
| 1005 rr1.From(kSenderSsrc); | 1004 rr1.From(kSenderSsrc); |
| 1006 rr1.WithReportBlock(rb1); | 1005 rr1.WithReportBlock(rb1); |
| 1007 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 1006 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); |
| 1008 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 1007 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); |
| 1009 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 1008 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, |
| 1010 kCumulativeLoss, kJitter)); | 1009 kCumulativeLoss, kJitter)); |
| 1011 | 1010 |
| 1012 rtcp_receiver_->RegisterRtcpStatisticsCallback(nullptr); | 1011 rtcp_receiver_->RegisterRtcpStatisticsCallback(NULL); |
| 1013 | 1012 |
| 1014 // Add arbitrary numbers, callback should not be called (retain old values). | 1013 // Add arbitrary numbers, callback should not be called (retain old values). |
| 1015 rtcp::ReportBlock rb2; | 1014 rtcp::ReportBlock rb2; |
| 1016 rb2.To(kSourceSsrc); | 1015 rb2.To(kSourceSsrc); |
| 1017 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); | 1016 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); |
| 1018 rb2.WithFractionLost(42); | 1017 rb2.WithFractionLost(42); |
| 1019 rb2.WithCumulativeLost(137); | 1018 rb2.WithCumulativeLost(137); |
| 1020 rb2.WithJitter(4711); | 1019 rb2.WithJitter(4711); |
| 1021 | 1020 |
| 1022 rtcp::ReceiverReport rr2; | 1021 rtcp::ReceiverReport rr2; |
| 1023 rr2.From(kSenderSsrc); | 1022 rr2.From(kSenderSsrc); |
| 1024 rr2.WithReportBlock(rb2); | 1023 rr2.WithReportBlock(rb2); |
| 1025 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 1024 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); |
| 1026 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 1025 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); |
| 1027 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 1026 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, |
| 1028 kCumulativeLoss, kJitter)); | 1027 kCumulativeLoss, kJitter)); |
| 1029 } | 1028 } |
| 1030 | 1029 |
| 1031 } // Anonymous namespace | 1030 } // Anonymous namespace |
| 1032 | 1031 |
| 1033 } // namespace webrtc | 1032 } // namespace webrtc |
| OLD | NEW |