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 |
11 #include <memory> | 11 #include <memory> |
12 | 12 |
| 13 #include "webrtc/base/arraysize.h" |
13 #include "webrtc/base/array_view.h" | 14 #include "webrtc/base/array_view.h" |
14 #include "webrtc/base/random.h" | 15 #include "webrtc/base/random.h" |
15 #include "webrtc/common_types.h" | 16 #include "webrtc/common_types.h" |
16 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 17 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" | 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" |
18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" | 19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" |
19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" | 20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" |
20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h" | 21 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h" |
21 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" | 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" |
22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" | 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" |
(...skipping 1177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1200 | 1201 |
1201 // Stress no transport feedback is expected. | 1202 // Stress no transport feedback is expected. |
1202 EXPECT_CALL(transport_feedback_observer_, OnTransportFeedback(_)).Times(0); | 1203 EXPECT_CALL(transport_feedback_observer_, OnTransportFeedback(_)).Times(0); |
1203 // But remb should be processed and cause a callback | 1204 // But remb should be processed and cause a callback |
1204 EXPECT_CALL(bandwidth_observer_, OnReceivedEstimatedBitrate(kBitrateBps)); | 1205 EXPECT_CALL(bandwidth_observer_, OnReceivedEstimatedBitrate(kBitrateBps)); |
1205 InjectRtcpPacket(built_packet); | 1206 InjectRtcpPacket(built_packet); |
1206 } | 1207 } |
1207 | 1208 |
1208 TEST_F(RtcpReceiverTest, Nack) { | 1209 TEST_F(RtcpReceiverTest, Nack) { |
1209 const uint16_t kNackList1[] = {1, 2, 3, 5}; | 1210 const uint16_t kNackList1[] = {1, 2, 3, 5}; |
1210 const size_t kNackListLength1 = std::end(kNackList1) - std::begin(kNackList1); | 1211 const uint16_t kNackList23[] = {5, 7, 30, 40, 41, 58, 59, 61, 63}; |
1211 const uint16_t kNackList2[] = {5, 7, 30, 40}; | 1212 const size_t kNackListLength2 = 4; |
1212 const size_t kNackListLength2 = std::end(kNackList2) - std::begin(kNackList2); | 1213 const size_t kNackListLength3 = arraysize(kNackList23) - kNackListLength2; |
1213 std::set<uint16_t> nack_set; | 1214 std::set<uint16_t> nack_set; |
1214 nack_set.insert(std::begin(kNackList1), std::end(kNackList1)); | 1215 nack_set.insert(std::begin(kNackList1), std::end(kNackList1)); |
1215 nack_set.insert(std::begin(kNackList2), std::end(kNackList2)); | 1216 nack_set.insert(std::begin(kNackList23), std::end(kNackList23)); |
1216 | 1217 |
1217 rtcp::Nack nack; | 1218 rtcp::Nack nack1; |
1218 nack.SetSenderSsrc(kSenderSsrc); | 1219 nack1.SetSenderSsrc(kSenderSsrc); |
1219 nack.SetMediaSsrc(kReceiverMainSsrc); | 1220 nack1.SetMediaSsrc(kReceiverMainSsrc); |
1220 nack.SetPacketIds(kNackList1, kNackListLength1); | 1221 nack1.SetPacketIds(kNackList1, arraysize(kNackList1)); |
1221 | 1222 |
1222 EXPECT_CALL(rtp_rtcp_impl_, OnReceivedNack(ElementsAreArray(kNackList1))); | 1223 EXPECT_CALL(rtp_rtcp_impl_, OnReceivedNack(ElementsAreArray(kNackList1))); |
1223 EXPECT_CALL( | 1224 EXPECT_CALL(packet_type_counter_observer_, |
1224 packet_type_counter_observer_, | 1225 RtcpPacketTypesCounterUpdated( |
1225 RtcpPacketTypesCounterUpdated( | 1226 kReceiverMainSsrc, |
1226 kReceiverMainSsrc, | 1227 AllOf(Field(&RtcpPacketTypeCounter::nack_requests, |
1227 AllOf(Field(&RtcpPacketTypeCounter::nack_requests, kNackListLength1), | 1228 arraysize(kNackList1)), |
1228 Field(&RtcpPacketTypeCounter::unique_nack_requests, | 1229 Field(&RtcpPacketTypeCounter::unique_nack_requests, |
1229 kNackListLength1)))); | 1230 arraysize(kNackList1))))); |
1230 InjectRtcpPacket(nack); | 1231 InjectRtcpPacket(nack1); |
1231 | 1232 |
1232 rtcp::Nack nack2; | 1233 rtcp::Nack nack2; |
1233 nack2.SetSenderSsrc(kSenderSsrc); | 1234 nack2.SetSenderSsrc(kSenderSsrc); |
1234 nack2.SetMediaSsrc(kReceiverMainSsrc); | 1235 nack2.SetMediaSsrc(kReceiverMainSsrc); |
1235 nack2.SetPacketIds(kNackList2, kNackListLength2); | 1236 nack2.SetPacketIds(kNackList23, kNackListLength2); |
1236 EXPECT_CALL(rtp_rtcp_impl_, OnReceivedNack(ElementsAreArray(kNackList2))); | 1237 |
| 1238 rtcp::Nack nack3; |
| 1239 nack3.SetSenderSsrc(kSenderSsrc); |
| 1240 nack3.SetMediaSsrc(kReceiverMainSsrc); |
| 1241 nack3.SetPacketIds(kNackList23 + kNackListLength2, kNackListLength3); |
| 1242 |
| 1243 rtcp::CompoundPacket two_nacks; |
| 1244 two_nacks.Append(&nack2); |
| 1245 two_nacks.Append(&nack3); |
| 1246 |
| 1247 EXPECT_CALL(rtp_rtcp_impl_, OnReceivedNack(ElementsAreArray(kNackList23))); |
1237 EXPECT_CALL(packet_type_counter_observer_, | 1248 EXPECT_CALL(packet_type_counter_observer_, |
1238 RtcpPacketTypesCounterUpdated( | 1249 RtcpPacketTypesCounterUpdated( |
1239 kReceiverMainSsrc, | 1250 kReceiverMainSsrc, |
1240 AllOf(Field(&RtcpPacketTypeCounter::nack_requests, | 1251 AllOf(Field(&RtcpPacketTypeCounter::nack_requests, |
1241 kNackListLength1 + kNackListLength2), | 1252 arraysize(kNackList1) + arraysize(kNackList23)), |
1242 Field(&RtcpPacketTypeCounter::unique_nack_requests, | 1253 Field(&RtcpPacketTypeCounter::unique_nack_requests, |
1243 nack_set.size())))); | 1254 nack_set.size())))); |
1244 InjectRtcpPacket(nack2); | 1255 InjectRtcpPacket(two_nacks); |
1245 } | 1256 } |
1246 | 1257 |
1247 TEST_F(RtcpReceiverTest, NackNotForUsIgnored) { | 1258 TEST_F(RtcpReceiverTest, NackNotForUsIgnored) { |
1248 const uint16_t kNackList1[] = {1, 2, 3, 5}; | 1259 const uint16_t kNackList1[] = {1, 2, 3, 5}; |
1249 const size_t kNackListLength1 = std::end(kNackList1) - std::begin(kNackList1); | 1260 const size_t kNackListLength1 = std::end(kNackList1) - std::begin(kNackList1); |
1250 | 1261 |
1251 rtcp::Nack nack; | 1262 rtcp::Nack nack; |
1252 nack.SetSenderSsrc(kSenderSsrc); | 1263 nack.SetSenderSsrc(kSenderSsrc); |
1253 nack.SetMediaSsrc(kNotToUsSsrc); | 1264 nack.SetMediaSsrc(kNotToUsSsrc); |
1254 nack.SetPacketIds(kNackList1, kNackListLength1); | 1265 nack.SetPacketIds(kNackList1, kNackListLength1); |
1255 | 1266 |
1256 EXPECT_CALL(packet_type_counter_observer_, | 1267 EXPECT_CALL(packet_type_counter_observer_, |
1257 RtcpPacketTypesCounterUpdated( | 1268 RtcpPacketTypesCounterUpdated( |
1258 _, Field(&RtcpPacketTypeCounter::nack_requests, 0))); | 1269 _, Field(&RtcpPacketTypeCounter::nack_requests, 0))); |
1259 InjectRtcpPacket(nack); | 1270 InjectRtcpPacket(nack); |
1260 } | 1271 } |
1261 | 1272 |
1262 TEST_F(RtcpReceiverTest, ForceSenderReport) { | 1273 TEST_F(RtcpReceiverTest, ForceSenderReport) { |
1263 rtcp::RapidResyncRequest rr; | 1274 rtcp::RapidResyncRequest rr; |
1264 rr.SetSenderSsrc(kSenderSsrc); | 1275 rr.SetSenderSsrc(kSenderSsrc); |
1265 rr.SetMediaSsrc(kReceiverMainSsrc); | 1276 rr.SetMediaSsrc(kReceiverMainSsrc); |
1266 | 1277 |
1267 EXPECT_CALL(rtp_rtcp_impl_, OnRequestSendReport()); | 1278 EXPECT_CALL(rtp_rtcp_impl_, OnRequestSendReport()); |
1268 InjectRtcpPacket(rr); | 1279 InjectRtcpPacket(rr); |
1269 } | 1280 } |
1270 | 1281 |
1271 } // namespace webrtc | 1282 } // namespace webrtc |
OLD | NEW |