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 |