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