Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(786)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc

Issue 2250633002: Cleanup RtcpReceiver::TMMBRReceived function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); 1026 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
1027 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); 1027 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1);
1028 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 1028 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
1029 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); 1029 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs));
1030 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); 1030 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs);
1031 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 1031 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
1032 } 1032 }
1033 1033
1034 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { 1034 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) {
1035 // This call is expected to fail because no data has arrived. 1035 // This call is expected to fail because no data has arrived.
1036 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1036 EXPECT_EQ(0u, rtcp_receiver_->TMMBRReceived().size());
1037 } 1037 }
1038 1038
1039 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { 1039 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) {
1040 const uint32_t kMediaFlowSsrc = 0x2040608; 1040 const uint32_t kMediaFlowSsrc = 0x2040608;
1041 const uint32_t kSenderSsrc = 0x10203; 1041 const uint32_t kSenderSsrc = 0x10203;
1042 std::set<uint32_t> ssrcs; 1042 std::set<uint32_t> ssrcs;
1043 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 1043 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
1044 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 1044 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
1045 1045
1046 rtcp::Tmmbr tmmbr; 1046 rtcp::Tmmbr tmmbr;
1047 tmmbr.From(kSenderSsrc); 1047 tmmbr.From(kSenderSsrc);
1048 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); 1048 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0));
1049 1049
1050 rtcp::SenderReport sr; 1050 rtcp::SenderReport sr;
1051 sr.From(kSenderSsrc); 1051 sr.From(kSenderSsrc);
1052 rtcp::CompoundPacket compound; 1052 rtcp::CompoundPacket compound;
1053 compound.Append(&sr); 1053 compound.Append(&sr);
1054 compound.Append(&tmmbr); 1054 compound.Append(&tmmbr);
1055 rtc::Buffer packet = compound.Build(); 1055 rtc::Buffer packet = compound.Build();
1056 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1056 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1057 1057
1058 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1058 std::vector<rtcp::TmmbItem> candidate_set = rtcp_receiver_->TMMBRReceived();
1059 TMMBRSet candidate_set; 1059 EXPECT_EQ(1u, candidate_set.size());
1060 candidate_set.VerifyAndAllocateSet(1); 1060 EXPECT_LT(0U, candidate_set[0].bitrate_bps());
1061 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); 1061 EXPECT_EQ(kSenderSsrc, candidate_set[0].ssrc());
1062 EXPECT_LT(0U, candidate_set.Tmmbr(0));
1063 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0));
1064 } 1062 }
1065 1063
1066 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { 1064 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) {
1067 const uint32_t kMediaFlowSsrc = 0x2040608; 1065 const uint32_t kMediaFlowSsrc = 0x2040608;
1068 const uint32_t kSenderSsrc = 0x10203; 1066 const uint32_t kSenderSsrc = 0x10203;
1069 1067
1070 rtcp::Tmmbr tmmbr; 1068 rtcp::Tmmbr tmmbr;
1071 tmmbr.From(kSenderSsrc); 1069 tmmbr.From(kSenderSsrc);
1072 // This SSRC is not what we are sending. 1070 // This SSRC is not what we are sending.
1073 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0)); 1071 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0));
1074 1072
1075 rtcp::SenderReport sr; 1073 rtcp::SenderReport sr;
1076 sr.From(kSenderSsrc); 1074 sr.From(kSenderSsrc);
1077 rtcp::CompoundPacket compound; 1075 rtcp::CompoundPacket compound;
1078 compound.Append(&sr); 1076 compound.Append(&sr);
1079 compound.Append(&tmmbr); 1077 compound.Append(&tmmbr);
1080 rtc::Buffer packet = compound.Build(); 1078 rtc::Buffer packet = compound.Build();
1081 1079
1082 std::set<uint32_t> ssrcs; 1080 std::set<uint32_t> ssrcs;
1083 ssrcs.insert(kMediaFlowSsrc); 1081 ssrcs.insert(kMediaFlowSsrc);
1084 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 1082 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
1085 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1083 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1086 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1084 EXPECT_EQ(0u, rtcp_receiver_->TMMBRReceived().size());
1087 } 1085 }
1088 1086
1089 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { 1087 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) {
1090 const uint32_t kMediaFlowSsrc = 0x2040608; 1088 const uint32_t kMediaFlowSsrc = 0x2040608;
1091 const uint32_t kSenderSsrc = 0x10203; 1089 const uint32_t kSenderSsrc = 0x10203;
1092 std::set<uint32_t> ssrcs; 1090 std::set<uint32_t> ssrcs;
1093 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 1091 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
1094 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 1092 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
1095 1093
1096 rtcp::Tmmbr tmmbr; 1094 rtcp::Tmmbr tmmbr;
1097 tmmbr.From(kSenderSsrc); 1095 tmmbr.From(kSenderSsrc);
1098 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0)); 1096 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0));
1099 1097
1100 rtcp::SenderReport sr; 1098 rtcp::SenderReport sr;
1101 sr.From(kSenderSsrc); 1099 sr.From(kSenderSsrc);
1102 rtcp::CompoundPacket compound; 1100 rtcp::CompoundPacket compound;
1103 compound.Append(&sr); 1101 compound.Append(&sr);
1104 compound.Append(&tmmbr); 1102 compound.Append(&tmmbr);
1105 rtc::Buffer packet = compound.Build(); 1103 rtc::Buffer packet = compound.Build();
1106 1104
1107 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1105 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1108 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1106 EXPECT_EQ(0u, rtcp_receiver_->TMMBRReceived().size());
1109 } 1107 }
1110 1108
1111 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { 1109 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) {
1112 const uint32_t kMediaFlowSsrc = 0x2040608; 1110 const uint32_t kMediaFlowSsrc = 0x2040608;
1113 const uint32_t kSenderSsrc = 0x10203; 1111 const uint32_t kSenderSsrc = 0x10203;
1114 std::set<uint32_t> ssrcs; 1112 std::set<uint32_t> ssrcs;
1115 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 1113 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
1116 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 1114 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
1117 1115
1118 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. 1116 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2.
1119 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. 1117 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10.
1120 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { 1118 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) {
1121 rtcp::Tmmbr tmmbr; 1119 rtcp::Tmmbr tmmbr;
1122 tmmbr.From(ssrc); 1120 tmmbr.From(ssrc);
1123 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); 1121 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0));
1124 1122
1125 rtcp::SenderReport sr; 1123 rtcp::SenderReport sr;
1126 sr.From(ssrc); 1124 sr.From(ssrc);
1127 rtcp::CompoundPacket compound; 1125 rtcp::CompoundPacket compound;
1128 compound.Append(&sr); 1126 compound.Append(&sr);
1129 compound.Append(&tmmbr); 1127 compound.Append(&tmmbr);
1130 rtc::Buffer packet = compound.Build(); 1128 rtc::Buffer packet = compound.Build();
1131 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); 1129 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
1132 // 5 seconds between each packet. 1130 // 5 seconds between each packet.
1133 system_clock_.AdvanceTimeMilliseconds(5000); 1131 system_clock_.AdvanceTimeMilliseconds(5000);
1134 } 1132 }
1135 // It is now starttime + 15. 1133 // It is now starttime + 15.
1136 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1134 std::vector<rtcp::TmmbItem> candidate_set = rtcp_receiver_->TMMBRReceived();
1137 TMMBRSet candidate_set; 1135 EXPECT_EQ(3u, candidate_set.size());
1138 candidate_set.VerifyAndAllocateSet(3); 1136 EXPECT_LT(0U, candidate_set[0].bitrate_bps());
1139 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set));
1140 EXPECT_LT(0U, candidate_set.Tmmbr(0));
1141 // We expect the timeout to be 25 seconds. Advance the clock by 12 1137 // We expect the timeout to be 25 seconds. Advance the clock by 12
1142 // seconds, timing out the first packet. 1138 // seconds, timing out the first packet.
1143 system_clock_.AdvanceTimeMilliseconds(12000); 1139 system_clock_.AdvanceTimeMilliseconds(12000);
1144 // Odd behaviour: Just counting them does not trigger the timeout. 1140 candidate_set = rtcp_receiver_->TMMBRReceived();
1145 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 1141 EXPECT_EQ(2u, candidate_set.size());
1146 EXPECT_EQ(2, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); 1142 EXPECT_EQ(kSenderSsrc + 1, candidate_set[0].ssrc());
1147 EXPECT_EQ(kSenderSsrc + 1, candidate_set.Ssrc(0));
1148 } 1143 }
1149 1144
1150 TEST_F(RtcpReceiverTest, Callbacks) { 1145 TEST_F(RtcpReceiverTest, Callbacks) {
1151 class RtcpCallbackImpl : public RtcpStatisticsCallback { 1146 class RtcpCallbackImpl : public RtcpStatisticsCallback {
1152 public: 1147 public:
1153 RtcpCallbackImpl() : RtcpStatisticsCallback(), ssrc_(0) {} 1148 RtcpCallbackImpl() : RtcpStatisticsCallback(), ssrc_(0) {}
1154 virtual ~RtcpCallbackImpl() {} 1149 virtual ~RtcpCallbackImpl() {}
1155 1150
1156 void StatisticsUpdated(const RtcpStatistics& statistics, 1151 void StatisticsUpdated(const RtcpStatistics& statistics,
1157 uint32_t ssrc) override { 1152 uint32_t ssrc) override {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 1286
1292 // Transport feedback should be ignored, but next packet should work. 1287 // Transport feedback should be ignored, but next packet should work.
1293 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); 1288 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback);
1294 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); 1289 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb);
1295 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); 1290 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate);
1296 } 1291 }
1297 1292
1298 } // Anonymous namespace 1293 } // Anonymous namespace
1299 1294
1300 } // namespace webrtc 1295 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698