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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 return true; | 118 return true; |
119 } | 119 } |
120 bool need_rtp_; | 120 bool need_rtp_; |
121 bool need_rtcp_; | 121 bool need_rtcp_; |
122 rtc::CriticalSection crit_; | 122 rtc::CriticalSection crit_; |
123 }; | 123 }; |
124 | 124 |
125 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); | 125 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); |
126 void ReceivesPliAndRecovers(int rtp_history_ms); | 126 void ReceivesPliAndRecovers(int rtp_history_ms); |
127 void RespectsRtcpMode(RtcpMode rtcp_mode); | 127 void RespectsRtcpMode(RtcpMode rtcp_mode); |
128 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); | |
129 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); | 128 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); |
130 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); | 129 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); |
131 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); | 130 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); |
132 void VerifyNewVideoSendStreamsRespectNetworkState( | 131 void VerifyNewVideoSendStreamsRespectNetworkState( |
133 MediaType network_to_bring_up, | 132 MediaType network_to_bring_up, |
134 VideoEncoder* encoder, | 133 VideoEncoder* encoder, |
135 Transport* transport); | 134 Transport* transport); |
136 void VerifyNewVideoReceiveStreamsRespectNetworkState( | 135 void VerifyNewVideoReceiveStreamsRespectNetworkState( |
137 MediaType network_to_bring_up, | 136 MediaType network_to_bring_up, |
138 Transport* transport); | 137 Transport* transport); |
(...skipping 2289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2428 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); | 2427 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); |
2429 } | 2428 } |
2430 | 2429 |
2431 TEST_P(EndToEndTest, VerifyHistogramStatsWithScreenshare) { | 2430 TEST_P(EndToEndTest, VerifyHistogramStatsWithScreenshare) { |
2432 const bool kEnabledRtx = false; | 2431 const bool kEnabledRtx = false; |
2433 const bool kEnabledRed = false; | 2432 const bool kEnabledRed = false; |
2434 const bool kScreenshare = true; | 2433 const bool kScreenshare = true; |
2435 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); | 2434 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); |
2436 } | 2435 } |
2437 | 2436 |
2438 void EndToEndTest::TestXrReceiverReferenceTimeReport(bool enable_rrtr) { | |
2439 static const int kNumRtcpReportPacketsToObserve = 5; | |
2440 class RtcpXrObserver : public test::EndToEndTest { | |
2441 public: | |
2442 explicit RtcpXrObserver(bool enable_rrtr) | |
2443 : EndToEndTest(kDefaultTimeoutMs), | |
2444 enable_rrtr_(enable_rrtr), | |
2445 sent_rtcp_sr_(0), | |
2446 sent_rtcp_rr_(0), | |
2447 sent_rtcp_rrtr_(0), | |
2448 sent_rtcp_dlrr_(0) {} | |
2449 | |
2450 private: | |
2451 // Receive stream should send RR packets (and RRTR packets if enabled). | |
2452 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | |
2453 rtc::CritScope lock(&crit_); | |
2454 test::RtcpPacketParser parser; | |
2455 EXPECT_TRUE(parser.Parse(packet, length)); | |
2456 | |
2457 sent_rtcp_rr_ += parser.receiver_report()->num_packets(); | |
2458 EXPECT_EQ(0, parser.sender_report()->num_packets()); | |
2459 EXPECT_GE(1, parser.xr()->num_packets()); | |
2460 if (parser.xr()->num_packets() > 0) { | |
2461 if (parser.xr()->rrtr()) | |
2462 ++sent_rtcp_rrtr_; | |
2463 EXPECT_FALSE(parser.xr()->dlrr()); | |
2464 } | |
2465 | |
2466 return SEND_PACKET; | |
2467 } | |
2468 // Send stream should send SR packets (and DLRR packets if enabled). | |
2469 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | |
2470 rtc::CritScope lock(&crit_); | |
2471 test::RtcpPacketParser parser; | |
2472 EXPECT_TRUE(parser.Parse(packet, length)); | |
2473 | |
2474 sent_rtcp_sr_ += parser.sender_report()->num_packets(); | |
2475 EXPECT_GE(1, parser.xr()->num_packets()); | |
2476 if (parser.xr()->num_packets() > 0) { | |
2477 EXPECT_FALSE(parser.xr()->rrtr()); | |
2478 if (parser.xr()->dlrr()) | |
2479 ++sent_rtcp_dlrr_; | |
2480 } | |
2481 | |
2482 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && | |
2483 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve) { | |
2484 if (enable_rrtr_) { | |
2485 EXPECT_LT(0, sent_rtcp_rrtr_); | |
2486 EXPECT_LT(0, sent_rtcp_dlrr_); | |
2487 } else { | |
2488 EXPECT_EQ(0, sent_rtcp_rrtr_); | |
2489 EXPECT_EQ(0, sent_rtcp_dlrr_); | |
2490 } | |
2491 observation_complete_.Set(); | |
2492 } | |
2493 return SEND_PACKET; | |
2494 } | |
2495 | |
2496 void ModifyVideoConfigs( | |
2497 VideoSendStream::Config* send_config, | |
2498 std::vector<VideoReceiveStream::Config>* receive_configs, | |
2499 VideoEncoderConfig* encoder_config) override { | |
2500 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; | |
2501 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = | |
2502 enable_rrtr_; | |
2503 } | |
2504 | |
2505 void PerformTest() override { | |
2506 EXPECT_TRUE(Wait()) | |
2507 << "Timed out while waiting for RTCP SR/RR packets to be sent."; | |
2508 } | |
2509 | |
2510 rtc::CriticalSection crit_; | |
2511 bool enable_rrtr_; | |
2512 int sent_rtcp_sr_; | |
2513 int sent_rtcp_rr_ GUARDED_BY(&crit_); | |
2514 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); | |
2515 int sent_rtcp_dlrr_; | |
2516 } test(enable_rrtr); | |
2517 | |
2518 RunBaseTest(&test); | |
2519 } | |
2520 | |
2521 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, | 2437 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, |
2522 bool send_single_ssrc_first) { | 2438 bool send_single_ssrc_first) { |
2523 class SendsSetSsrcs : public test::EndToEndTest { | 2439 class SendsSetSsrcs : public test::EndToEndTest { |
2524 public: | 2440 public: |
2525 SendsSetSsrcs(const uint32_t* ssrcs, | 2441 SendsSetSsrcs(const uint32_t* ssrcs, |
2526 size_t num_ssrcs, | 2442 size_t num_ssrcs, |
2527 bool send_single_ssrc_first) | 2443 bool send_single_ssrc_first) |
2528 : EndToEndTest(kDefaultTimeoutMs), | 2444 : EndToEndTest(kDefaultTimeoutMs), |
2529 num_ssrcs_(num_ssrcs), | 2445 num_ssrcs_(num_ssrcs), |
2530 send_single_ssrc_first_(send_single_ssrc_first), | 2446 send_single_ssrc_first_(send_single_ssrc_first), |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3057 ReceiveStreamRenderer receive_stream_renderer_; | 2973 ReceiveStreamRenderer receive_stream_renderer_; |
3058 } test; | 2974 } test; |
3059 | 2975 |
3060 // TODO(philipel): Implement statistics for the new video jitter buffer. | 2976 // TODO(philipel): Implement statistics for the new video jitter buffer. |
3061 if (GetParam() == new_jb_enabled) | 2977 if (GetParam() == new_jb_enabled) |
3062 return; | 2978 return; |
3063 | 2979 |
3064 RunBaseTest(&test); | 2980 RunBaseTest(&test); |
3065 } | 2981 } |
3066 | 2982 |
3067 TEST_P(EndToEndTest, ReceiverReferenceTimeReportEnabled) { | 2983 class RtcpXrObserver : public test::EndToEndTest { |
3068 TestXrReceiverReferenceTimeReport(true); | 2984 public: |
| 2985 explicit RtcpXrObserver(bool enable_rrtr) |
| 2986 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
| 2987 enable_rrtr_(enable_rrtr), |
| 2988 sent_rtcp_sr_(0), |
| 2989 sent_rtcp_rr_(0), |
| 2990 sent_rtcp_rrtr_(0), |
| 2991 sent_rtcp_target_bitrate_(false), |
| 2992 sent_rtcp_dlrr_(0) {} |
| 2993 |
| 2994 private: |
| 2995 // Receive stream should send RR packets (and RRTR packets if enabled). |
| 2996 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 2997 rtc::CritScope lock(&crit_); |
| 2998 test::RtcpPacketParser parser; |
| 2999 EXPECT_TRUE(parser.Parse(packet, length)); |
| 3000 |
| 3001 sent_rtcp_rr_ += parser.receiver_report()->num_packets(); |
| 3002 EXPECT_EQ(0, parser.sender_report()->num_packets()); |
| 3003 EXPECT_GE(1, parser.xr()->num_packets()); |
| 3004 if (parser.xr()->num_packets() > 0) { |
| 3005 if (parser.xr()->rrtr()) |
| 3006 ++sent_rtcp_rrtr_; |
| 3007 EXPECT_FALSE(parser.xr()->dlrr()); |
| 3008 } |
| 3009 |
| 3010 return SEND_PACKET; |
| 3011 } |
| 3012 // Send stream should send SR packets (and DLRR packets if enabled). |
| 3013 Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
| 3014 rtc::CritScope lock(&crit_); |
| 3015 test::RtcpPacketParser parser; |
| 3016 EXPECT_TRUE(parser.Parse(packet, length)); |
| 3017 |
| 3018 sent_rtcp_sr_ += parser.sender_report()->num_packets(); |
| 3019 EXPECT_LE(parser.xr()->num_packets(), 1); |
| 3020 if (parser.xr()->num_packets() > 0) { |
| 3021 EXPECT_FALSE(parser.xr()->rrtr()); |
| 3022 if (parser.xr()->dlrr()) |
| 3023 ++sent_rtcp_dlrr_; |
| 3024 if (parser.xr()->target_bitrate()) |
| 3025 sent_rtcp_target_bitrate_ = true; |
| 3026 } |
| 3027 |
| 3028 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && |
| 3029 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve && |
| 3030 sent_rtcp_target_bitrate_) { |
| 3031 if (enable_rrtr_) { |
| 3032 EXPECT_GT(sent_rtcp_rrtr_, 0); |
| 3033 EXPECT_GT(sent_rtcp_dlrr_, 0); |
| 3034 } else { |
| 3035 EXPECT_EQ(sent_rtcp_rrtr_, 0); |
| 3036 EXPECT_EQ(sent_rtcp_dlrr_, 0); |
| 3037 } |
| 3038 observation_complete_.Set(); |
| 3039 } |
| 3040 return SEND_PACKET; |
| 3041 } |
| 3042 |
| 3043 void ModifyVideoConfigs( |
| 3044 VideoSendStream::Config* send_config, |
| 3045 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 3046 VideoEncoderConfig* encoder_config) override { |
| 3047 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; |
| 3048 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = |
| 3049 enable_rrtr_; |
| 3050 } |
| 3051 |
| 3052 void PerformTest() override { |
| 3053 EXPECT_TRUE(Wait()) |
| 3054 << "Timed out while waiting for RTCP SR/RR packets to be sent."; |
| 3055 } |
| 3056 |
| 3057 static const int kNumRtcpReportPacketsToObserve = 5; |
| 3058 |
| 3059 rtc::CriticalSection crit_; |
| 3060 bool enable_rrtr_; |
| 3061 int sent_rtcp_sr_; |
| 3062 int sent_rtcp_rr_ GUARDED_BY(&crit_); |
| 3063 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); |
| 3064 bool sent_rtcp_target_bitrate_ GUARDED_BY(&crit_); |
| 3065 int sent_rtcp_dlrr_; |
| 3066 }; |
| 3067 |
| 3068 TEST_P(EndToEndTest, TestExtendedReportsWithRrtr) { |
| 3069 RtcpXrObserver test(true); |
| 3070 RunBaseTest(&test); |
3069 } | 3071 } |
3070 | 3072 |
3071 TEST_P(EndToEndTest, ReceiverReferenceTimeReportDisabled) { | 3073 TEST_P(EndToEndTest, TestExtendedReportsWithoutRrtr) { |
3072 TestXrReceiverReferenceTimeReport(false); | 3074 RtcpXrObserver test(false); |
| 3075 RunBaseTest(&test); |
3073 } | 3076 } |
3074 | 3077 |
3075 TEST_P(EndToEndTest, TestReceivedRtpPacketStats) { | 3078 TEST_P(EndToEndTest, TestReceivedRtpPacketStats) { |
3076 static const size_t kNumRtpPacketsToSend = 5; | 3079 static const size_t kNumRtpPacketsToSend = 5; |
3077 class ReceivedRtpStatsObserver : public test::EndToEndTest { | 3080 class ReceivedRtpStatsObserver : public test::EndToEndTest { |
3078 public: | 3081 public: |
3079 ReceivedRtpStatsObserver() | 3082 ReceivedRtpStatsObserver() |
3080 : EndToEndTest(kDefaultTimeoutMs), | 3083 : EndToEndTest(kDefaultTimeoutMs), |
3081 receive_stream_(nullptr), | 3084 receive_stream_(nullptr), |
3082 sent_rtp_(0) {} | 3085 sent_rtp_(0) {} |
(...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4041 std::unique_ptr<VideoEncoder> encoder_; | 4044 std::unique_ptr<VideoEncoder> encoder_; |
4042 std::unique_ptr<VideoDecoder> decoder_; | 4045 std::unique_ptr<VideoDecoder> decoder_; |
4043 rtc::CriticalSection crit_; | 4046 rtc::CriticalSection crit_; |
4044 int recorded_frames_ GUARDED_BY(crit_); | 4047 int recorded_frames_ GUARDED_BY(crit_); |
4045 } test(this); | 4048 } test(this); |
4046 | 4049 |
4047 RunBaseTest(&test); | 4050 RunBaseTest(&test); |
4048 } | 4051 } |
4049 | 4052 |
4050 } // namespace webrtc | 4053 } // namespace webrtc |
OLD | NEW |