| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "webrtc/call.h" | 23 #include "webrtc/call.h" |
| 24 #include "webrtc/call/transport_adapter.h" | 24 #include "webrtc/call/transport_adapter.h" |
| 25 #include "webrtc/common_video/include/frame_callback.h" | 25 #include "webrtc/common_video/include/frame_callback.h" |
| 26 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" | 26 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" |
| 27 #include "webrtc/media/base/fakevideorenderer.h" | 27 #include "webrtc/media/base/fakevideorenderer.h" |
| 28 #include "webrtc/modules/include/module_common_types.h" | 28 #include "webrtc/modules/include/module_common_types.h" |
| 29 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" | 29 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" |
| 30 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 30 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
| 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h" | 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h" |
| 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h" | 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h" |
| 33 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | |
| 34 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | 33 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
| 35 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" | 34 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" |
| 36 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" | 35 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" |
| 37 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" | 36 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" |
| 38 #include "webrtc/modules/video_coding/include/video_coding_defines.h" | 37 #include "webrtc/modules/video_coding/include/video_coding_defines.h" |
| 39 #include "webrtc/system_wrappers/include/metrics.h" | 38 #include "webrtc/system_wrappers/include/metrics.h" |
| 40 #include "webrtc/system_wrappers/include/metrics_default.h" | 39 #include "webrtc/system_wrappers/include/metrics_default.h" |
| 41 #include "webrtc/system_wrappers/include/sleep.h" | 40 #include "webrtc/system_wrappers/include/sleep.h" |
| 42 #include "webrtc/test/call_test.h" | 41 #include "webrtc/test/call_test.h" |
| 43 #include "webrtc/test/direct_transport.h" | 42 #include "webrtc/test/direct_transport.h" |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 } | 390 } |
| 392 | 391 |
| 393 #endif // defined(WEBRTC_END_TO_END_H264_TESTS) | 392 #endif // defined(WEBRTC_END_TO_END_H264_TESTS) |
| 394 | 393 |
| 395 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { | 394 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { |
| 396 class SyncRtcpObserver : public test::EndToEndTest { | 395 class SyncRtcpObserver : public test::EndToEndTest { |
| 397 public: | 396 public: |
| 398 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} | 397 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} |
| 399 | 398 |
| 400 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 399 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 401 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 400 test::RtcpPacketParser parser; |
| 402 EXPECT_TRUE(parser.IsValid()); | 401 EXPECT_TRUE(parser.Parse(packet, length)); |
| 403 uint32_t ssrc = 0; | 402 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.sender_ssrc()); |
| 404 ssrc |= static_cast<uint32_t>(packet[4]) << 24; | |
| 405 ssrc |= static_cast<uint32_t>(packet[5]) << 16; | |
| 406 ssrc |= static_cast<uint32_t>(packet[6]) << 8; | |
| 407 ssrc |= static_cast<uint32_t>(packet[7]) << 0; | |
| 408 EXPECT_EQ(kReceiverLocalVideoSsrc, ssrc); | |
| 409 observation_complete_.Set(); | 403 observation_complete_.Set(); |
| 410 | 404 |
| 411 return SEND_PACKET; | 405 return SEND_PACKET; |
| 412 } | 406 } |
| 413 | 407 |
| 414 void PerformTest() override { | 408 void PerformTest() override { |
| 415 EXPECT_TRUE(Wait()) | 409 EXPECT_TRUE(Wait()) |
| 416 << "Timed out while waiting for a receiver RTCP packet to be sent."; | 410 << "Timed out while waiting for a receiver RTCP packet to be sent."; |
| 417 } | 411 } |
| 418 } test; | 412 } test; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 --packets_left_to_drop_; | 458 --packets_left_to_drop_; |
| 465 dropped_packets_.insert(header.sequenceNumber); | 459 dropped_packets_.insert(header.sequenceNumber); |
| 466 return DROP_PACKET; | 460 return DROP_PACKET; |
| 467 } | 461 } |
| 468 | 462 |
| 469 return SEND_PACKET; | 463 return SEND_PACKET; |
| 470 } | 464 } |
| 471 | 465 |
| 472 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 466 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 473 rtc::CritScope lock(&crit_); | 467 rtc::CritScope lock(&crit_); |
| 474 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 468 test::RtcpPacketParser parser; |
| 475 EXPECT_TRUE(parser.IsValid()); | 469 EXPECT_TRUE(parser.Parse(packet, length)); |
| 476 | 470 nacks_left_ -= parser.nack()->num_packets(); |
| 477 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | |
| 478 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | |
| 479 if (packet_type == RTCPUtility::RTCPPacketTypes::kRtpfbNack) { | |
| 480 --nacks_left_; | |
| 481 break; | |
| 482 } | |
| 483 packet_type = parser.Iterate(); | |
| 484 } | |
| 485 return SEND_PACKET; | 471 return SEND_PACKET; |
| 486 } | 472 } |
| 487 | 473 |
| 488 void ModifyVideoConfigs( | 474 void ModifyVideoConfigs( |
| 489 VideoSendStream::Config* send_config, | 475 VideoSendStream::Config* send_config, |
| 490 std::vector<VideoReceiveStream::Config>* receive_configs, | 476 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 491 VideoEncoderConfig* encoder_config) override { | 477 VideoEncoderConfig* encoder_config) override { |
| 492 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 478 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 493 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 479 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 494 } | 480 } |
| (...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 highest_dropped_timestamp_ = header.timestamp; | 1008 highest_dropped_timestamp_ = header.timestamp; |
| 1023 --frames_to_drop_; | 1009 --frames_to_drop_; |
| 1024 return DROP_PACKET; | 1010 return DROP_PACKET; |
| 1025 } | 1011 } |
| 1026 | 1012 |
| 1027 return SEND_PACKET; | 1013 return SEND_PACKET; |
| 1028 } | 1014 } |
| 1029 | 1015 |
| 1030 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 1016 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 1031 rtc::CritScope lock(&crit_); | 1017 rtc::CritScope lock(&crit_); |
| 1032 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 1018 test::RtcpPacketParser parser; |
| 1033 EXPECT_TRUE(parser.IsValid()); | 1019 EXPECT_TRUE(parser.Parse(packet, length)); |
| 1034 | 1020 if (!nack_enabled_) |
| 1035 for (RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 1021 EXPECT_EQ(0, parser.nack()->num_packets()); |
| 1036 packet_type != RTCPUtility::RTCPPacketTypes::kInvalid; | 1022 if (parser.pli()->num_packets() > 0) |
| 1037 packet_type = parser.Iterate()) { | 1023 received_pli_ = true; |
| 1038 if (!nack_enabled_) | |
| 1039 EXPECT_NE(packet_type, RTCPUtility::RTCPPacketTypes::kRtpfbNack); | |
| 1040 | |
| 1041 if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbPli) { | |
| 1042 received_pli_ = true; | |
| 1043 break; | |
| 1044 } | |
| 1045 } | |
| 1046 return SEND_PACKET; | 1024 return SEND_PACKET; |
| 1047 } | 1025 } |
| 1048 | 1026 |
| 1049 void OnFrame(const VideoFrame& video_frame) override { | 1027 void OnFrame(const VideoFrame& video_frame) override { |
| 1050 rtc::CritScope lock(&crit_); | 1028 rtc::CritScope lock(&crit_); |
| 1051 if (received_pli_ && | 1029 if (received_pli_ && |
| 1052 video_frame.timestamp() > highest_dropped_timestamp_) { | 1030 video_frame.timestamp() > highest_dropped_timestamp_) { |
| 1053 observation_complete_.Set(); | 1031 observation_complete_.Set(); |
| 1054 } | 1032 } |
| 1055 if (!received_pli_) | 1033 if (!received_pli_) |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1162 private: | 1140 private: |
| 1163 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1141 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| 1164 if (++sent_rtp_ % 3 == 0) | 1142 if (++sent_rtp_ % 3 == 0) |
| 1165 return DROP_PACKET; | 1143 return DROP_PACKET; |
| 1166 | 1144 |
| 1167 return SEND_PACKET; | 1145 return SEND_PACKET; |
| 1168 } | 1146 } |
| 1169 | 1147 |
| 1170 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 1148 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 1171 ++sent_rtcp_; | 1149 ++sent_rtcp_; |
| 1172 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 1150 test::RtcpPacketParser parser; |
| 1173 EXPECT_TRUE(parser.IsValid()); | 1151 EXPECT_TRUE(parser.Parse(packet, length)); |
| 1174 | 1152 |
| 1175 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 1153 EXPECT_EQ(0, parser.sender_report()->num_packets()); |
| 1176 bool has_report_block = false; | |
| 1177 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | |
| 1178 EXPECT_NE(RTCPUtility::RTCPPacketTypes::kSr, packet_type); | |
| 1179 if (packet_type == RTCPUtility::RTCPPacketTypes::kRr) { | |
| 1180 has_report_block = true; | |
| 1181 break; | |
| 1182 } | |
| 1183 packet_type = parser.Iterate(); | |
| 1184 } | |
| 1185 | 1154 |
| 1186 switch (rtcp_mode_) { | 1155 switch (rtcp_mode_) { |
| 1187 case RtcpMode::kCompound: | 1156 case RtcpMode::kCompound: |
| 1188 if (!has_report_block) { | 1157 if (parser.receiver_report()->num_packets() == 0) { |
| 1189 ADD_FAILURE() << "Received RTCP packet without receiver report for " | 1158 ADD_FAILURE() << "Received RTCP packet without receiver report for " |
| 1190 "RtcpMode::kCompound."; | 1159 "RtcpMode::kCompound."; |
| 1191 observation_complete_.Set(); | 1160 observation_complete_.Set(); |
| 1192 } | 1161 } |
| 1193 | 1162 |
| 1194 if (sent_rtcp_ >= kNumCompoundRtcpPacketsToObserve) | 1163 if (sent_rtcp_ >= kNumCompoundRtcpPacketsToObserve) |
| 1195 observation_complete_.Set(); | 1164 observation_complete_.Set(); |
| 1196 | 1165 |
| 1197 break; | 1166 break; |
| 1198 case RtcpMode::kReducedSize: | 1167 case RtcpMode::kReducedSize: |
| 1199 if (!has_report_block) | 1168 if (parser.receiver_report()->num_packets() == 0) |
| 1200 observation_complete_.Set(); | 1169 observation_complete_.Set(); |
| 1201 break; | 1170 break; |
| 1202 case RtcpMode::kOff: | 1171 case RtcpMode::kOff: |
| 1203 RTC_NOTREACHED(); | 1172 RTC_NOTREACHED(); |
| 1204 break; | 1173 break; |
| 1205 } | 1174 } |
| 1206 | 1175 |
| 1207 return SEND_PACKET; | 1176 return SEND_PACKET; |
| 1208 } | 1177 } |
| 1209 | 1178 |
| (...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1632 return SEND_PACKET; | 1601 return SEND_PACKET; |
| 1633 } | 1602 } |
| 1634 | 1603 |
| 1635 Action OnReceiveRtcp(const uint8_t* data, size_t length) override { | 1604 Action OnReceiveRtcp(const uint8_t* data, size_t length) override { |
| 1636 if (HasTransportFeedback(data, length)) | 1605 if (HasTransportFeedback(data, length)) |
| 1637 observation_complete_.Set(); | 1606 observation_complete_.Set(); |
| 1638 return SEND_PACKET; | 1607 return SEND_PACKET; |
| 1639 } | 1608 } |
| 1640 | 1609 |
| 1641 bool HasTransportFeedback(const uint8_t* data, size_t length) const { | 1610 bool HasTransportFeedback(const uint8_t* data, size_t length) const { |
| 1642 RTCPUtility::RTCPParserV2 parser(data, length, true); | 1611 test::RtcpPacketParser parser; |
| 1643 EXPECT_TRUE(parser.IsValid()); | 1612 EXPECT_TRUE(parser.Parse(data, length)); |
| 1644 | 1613 return parser.transport_feedback()->num_packets() > 0; |
| 1645 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | |
| 1646 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | |
| 1647 if (packet_type == RTCPUtility::RTCPPacketTypes::kTransportFeedback) | |
| 1648 return true; | |
| 1649 packet_type = parser.Iterate(); | |
| 1650 } | |
| 1651 | |
| 1652 return false; | |
| 1653 } | 1614 } |
| 1654 | 1615 |
| 1655 void PerformTest() override { | 1616 void PerformTest() override { |
| 1656 const int64_t kDisabledFeedbackTimeoutMs = 5000; | 1617 const int64_t kDisabledFeedbackTimeoutMs = 5000; |
| 1657 EXPECT_EQ(feedback_enabled_, | 1618 EXPECT_EQ(feedback_enabled_, |
| 1658 observation_complete_.Wait(feedback_enabled_ | 1619 observation_complete_.Wait(feedback_enabled_ |
| 1659 ? test::CallTest::kDefaultTimeoutMs | 1620 ? test::CallTest::kDefaultTimeoutMs |
| 1660 : kDisabledFeedbackTimeoutMs)); | 1621 : kDisabledFeedbackTimeoutMs)); |
| 1661 } | 1622 } |
| 1662 | 1623 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1795 | 1756 |
| 1796 DestroyStreams(); | 1757 DestroyStreams(); |
| 1797 } | 1758 } |
| 1798 | 1759 |
| 1799 TEST_F(EndToEndTest, ReceiveStreamSendsRemb) { | 1760 TEST_F(EndToEndTest, ReceiveStreamSendsRemb) { |
| 1800 class RembObserver : public test::EndToEndTest { | 1761 class RembObserver : public test::EndToEndTest { |
| 1801 public: | 1762 public: |
| 1802 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {} | 1763 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {} |
| 1803 | 1764 |
| 1804 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 1765 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 1805 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 1766 test::RtcpPacketParser parser; |
| 1806 EXPECT_TRUE(parser.IsValid()); | 1767 EXPECT_TRUE(parser.Parse(packet, length)); |
| 1807 | 1768 |
| 1808 bool received_psfb = false; | 1769 if (parser.remb()->num_packets() > 0) { |
| 1809 bool received_remb = false; | 1770 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.remb()->sender_ssrc()); |
| 1810 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 1771 EXPECT_LT(0U, parser.remb()->bitrate_bps()); |
| 1811 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | 1772 EXPECT_EQ(1U, parser.remb()->ssrcs().size()); |
| 1812 if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRemb) { | 1773 EXPECT_EQ(kVideoSendSsrcs[0], parser.remb()->ssrcs()[0]); |
| 1813 const RTCPUtility::RTCPPacket& packet = parser.Packet(); | 1774 observation_complete_.Set(); |
| 1814 EXPECT_EQ(packet.PSFBAPP.SenderSSRC, kReceiverLocalVideoSsrc); | |
| 1815 received_psfb = true; | |
| 1816 } else if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRembItem) { | |
| 1817 const RTCPUtility::RTCPPacket& packet = parser.Packet(); | |
| 1818 EXPECT_GT(packet.REMBItem.BitRate, 0u); | |
| 1819 EXPECT_EQ(packet.REMBItem.NumberOfSSRCs, 1u); | |
| 1820 EXPECT_EQ(packet.REMBItem.SSRCs[0], kVideoSendSsrcs[0]); | |
| 1821 received_remb = true; | |
| 1822 } | |
| 1823 packet_type = parser.Iterate(); | |
| 1824 } | 1775 } |
| 1825 if (received_psfb && received_remb) | 1776 |
| 1826 observation_complete_.Set(); | |
| 1827 return SEND_PACKET; | 1777 return SEND_PACKET; |
| 1828 } | 1778 } |
| 1829 void PerformTest() override { | 1779 void PerformTest() override { |
| 1830 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " | 1780 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " |
| 1831 "receiver RTCP REMB packet to be " | 1781 "receiver RTCP REMB packet to be " |
| 1832 "sent."; | 1782 "sent."; |
| 1833 } | 1783 } |
| 1834 } test; | 1784 } test; |
| 1835 | 1785 |
| 1836 RunBaseTest(&test); | 1786 RunBaseTest(&test); |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2379 enable_rrtr_(enable_rrtr), | 2329 enable_rrtr_(enable_rrtr), |
| 2380 sent_rtcp_sr_(0), | 2330 sent_rtcp_sr_(0), |
| 2381 sent_rtcp_rr_(0), | 2331 sent_rtcp_rr_(0), |
| 2382 sent_rtcp_rrtr_(0), | 2332 sent_rtcp_rrtr_(0), |
| 2383 sent_rtcp_dlrr_(0) {} | 2333 sent_rtcp_dlrr_(0) {} |
| 2384 | 2334 |
| 2385 private: | 2335 private: |
| 2386 // Receive stream should send RR packets (and RRTR packets if enabled). | 2336 // Receive stream should send RR packets (and RRTR packets if enabled). |
| 2387 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 2337 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 2388 rtc::CritScope lock(&crit_); | 2338 rtc::CritScope lock(&crit_); |
| 2389 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 2339 test::RtcpPacketParser parser; |
| 2390 EXPECT_TRUE(parser.IsValid()); | 2340 EXPECT_TRUE(parser.Parse(packet, length)); |
| 2391 | 2341 |
| 2392 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 2342 sent_rtcp_rr_ += parser.receiver_report()->num_packets(); |
| 2393 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | 2343 EXPECT_EQ(0, parser.sender_report()->num_packets()); |
| 2394 if (packet_type == RTCPUtility::RTCPPacketTypes::kRr) { | 2344 EXPECT_GE(1, parser.xr()->num_packets()); |
| 2395 ++sent_rtcp_rr_; | 2345 if (parser.xr()->num_packets() > 0) { |
| 2396 } else if (packet_type == | 2346 if (parser.xr()->rrtr()) |
| 2397 RTCPUtility::RTCPPacketTypes::kXrReceiverReferenceTime) { | |
| 2398 ++sent_rtcp_rrtr_; | 2347 ++sent_rtcp_rrtr_; |
| 2399 } | 2348 EXPECT_FALSE(parser.xr()->dlrr()); |
| 2400 EXPECT_NE(packet_type, RTCPUtility::RTCPPacketTypes::kSr); | |
| 2401 EXPECT_NE(packet_type, | |
| 2402 RTCPUtility::RTCPPacketTypes::kXrDlrrReportBlockItem); | |
| 2403 packet_type = parser.Iterate(); | |
| 2404 } | 2349 } |
| 2350 |
| 2405 return SEND_PACKET; | 2351 return SEND_PACKET; |
| 2406 } | 2352 } |
| 2407 // Send stream should send SR packets (and DLRR packets if enabled). | 2353 // Send stream should send SR packets (and DLRR packets if enabled). |
| 2408 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | 2354 Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
| 2409 rtc::CritScope lock(&crit_); | 2355 rtc::CritScope lock(&crit_); |
| 2410 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 2356 test::RtcpPacketParser parser; |
| 2411 EXPECT_TRUE(parser.IsValid()); | 2357 EXPECT_TRUE(parser.Parse(packet, length)); |
| 2412 | 2358 |
| 2413 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 2359 sent_rtcp_sr_ += parser.sender_report()->num_packets(); |
| 2414 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | 2360 EXPECT_GE(1, parser.xr()->num_packets()); |
| 2415 if (packet_type == RTCPUtility::RTCPPacketTypes::kSr) { | 2361 if (parser.xr()->num_packets() > 0) { |
| 2416 ++sent_rtcp_sr_; | 2362 EXPECT_FALSE(parser.xr()->rrtr()); |
| 2417 } else if (packet_type == | 2363 if (parser.xr()->dlrr()) |
| 2418 RTCPUtility::RTCPPacketTypes::kXrDlrrReportBlockItem) { | |
| 2419 ++sent_rtcp_dlrr_; | 2364 ++sent_rtcp_dlrr_; |
| 2420 } | |
| 2421 EXPECT_NE(packet_type, | |
| 2422 RTCPUtility::RTCPPacketTypes::kXrReceiverReferenceTime); | |
| 2423 packet_type = parser.Iterate(); | |
| 2424 } | 2365 } |
| 2366 |
| 2425 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && | 2367 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && |
| 2426 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve) { | 2368 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve) { |
| 2427 if (enable_rrtr_) { | 2369 if (enable_rrtr_) { |
| 2428 EXPECT_GT(sent_rtcp_rrtr_, 0); | 2370 EXPECT_LT(0, sent_rtcp_rrtr_); |
| 2429 EXPECT_GT(sent_rtcp_dlrr_, 0); | 2371 EXPECT_LT(0, sent_rtcp_dlrr_); |
| 2430 } else { | 2372 } else { |
| 2431 EXPECT_EQ(0, sent_rtcp_rrtr_); | 2373 EXPECT_EQ(0, sent_rtcp_rrtr_); |
| 2432 EXPECT_EQ(0, sent_rtcp_dlrr_); | 2374 EXPECT_EQ(0, sent_rtcp_dlrr_); |
| 2433 } | 2375 } |
| 2434 observation_complete_.Set(); | 2376 observation_complete_.Set(); |
| 2435 } | 2377 } |
| 2436 return SEND_PACKET; | 2378 return SEND_PACKET; |
| 2437 } | 2379 } |
| 2438 | 2380 |
| 2439 void ModifyVideoConfigs( | 2381 void ModifyVideoConfigs( |
| (...skipping 1522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3962 std::unique_ptr<VideoEncoder> encoder_; | 3904 std::unique_ptr<VideoEncoder> encoder_; |
| 3963 std::unique_ptr<VideoDecoder> decoder_; | 3905 std::unique_ptr<VideoDecoder> decoder_; |
| 3964 rtc::CriticalSection crit_; | 3906 rtc::CriticalSection crit_; |
| 3965 int recorded_frames_ GUARDED_BY(crit_); | 3907 int recorded_frames_ GUARDED_BY(crit_); |
| 3966 } test(this); | 3908 } test(this); |
| 3967 | 3909 |
| 3968 RunBaseTest(&test); | 3910 RunBaseTest(&test); |
| 3969 } | 3911 } |
| 3970 | 3912 |
| 3971 } // namespace webrtc | 3913 } // namespace webrtc |
| OLD | NEW |