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