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

Side by Side Diff: webrtc/video/end_to_end_tests.cc

Issue 2541303003: Wire up BitrateAllocation to be sent as RTCP TargetBitrate (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « webrtc/modules/video_coding/video_sender_unittest.cc ('k') | webrtc/video/payload_router.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/video_sender_unittest.cc ('k') | webrtc/video/payload_router.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698