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

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

Issue 1692783005: Revert of Don't send FEC for H.264 with NACK enabled. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « no previous file | webrtc/video/video_send_stream.cc » ('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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 ADD_FAILURE() << "Unexpected RTP sent."; 69 ADD_FAILURE() << "Unexpected RTP sent.";
70 return false; 70 return false;
71 } 71 }
72 72
73 bool SendRtcp(const uint8_t* packet, size_t length) override { 73 bool SendRtcp(const uint8_t* packet, size_t length) override {
74 ADD_FAILURE() << "Unexpected RTCP sent."; 74 ADD_FAILURE() << "Unexpected RTCP sent.";
75 return false; 75 return false;
76 } 76 }
77 }; 77 };
78 78
79 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); 79 void DecodesRetransmittedFrame(bool use_rtx, bool use_red);
80 void ReceivesPliAndRecovers(int rtp_history_ms); 80 void ReceivesPliAndRecovers(int rtp_history_ms);
81 void RespectsRtcpMode(RtcpMode rtcp_mode); 81 void RespectsRtcpMode(RtcpMode rtcp_mode);
82 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); 82 void TestXrReceiverReferenceTimeReport(bool enable_rrtr);
83 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); 83 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first);
84 void TestRtpStatePreservation(bool use_rtx); 84 void TestRtpStatePreservation(bool use_rtx);
85 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); 85 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare);
86 }; 86 };
87 87
88 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { 88 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) {
89 CreateCalls(Call::Config(), Call::Config()); 89 CreateCalls(Call::Config(), Call::Config());
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 uint16_t fec_sequence_number_ GUARDED_BY(&crit_); 694 uint16_t fec_sequence_number_ GUARDED_BY(&crit_);
695 bool has_last_sequence_number_; 695 bool has_last_sequence_number_;
696 uint16_t last_sequence_number_; 696 uint16_t last_sequence_number_;
697 } test; 697 } test;
698 698
699 RunBaseTest(&test); 699 RunBaseTest(&test);
700 } 700 }
701 701
702 // This test drops second RTP packet with a marker bit set, makes sure it's 702 // This test drops second RTP packet with a marker bit set, makes sure it's
703 // retransmitted and renders. Retransmission SSRCs are also checked. 703 // retransmitted and renders. Retransmission SSRCs are also checked.
704 void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) { 704 void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) {
705 // Must be set high enough to allow the bitrate probing to finish. 705 // Must be set high enough to allow the bitrate probing to finish.
706 static const int kMinProbePackets = 30; 706 static const int kMinProbePackets = 30;
707 static const int kDroppedFrameNumber = kMinProbePackets + 1; 707 static const int kDroppedFrameNumber = kMinProbePackets + 1;
708 class RetransmissionObserver : public test::EndToEndTest, 708 class RetransmissionObserver : public test::EndToEndTest,
709 public I420FrameCallback { 709 public I420FrameCallback {
710 public: 710 public:
711 RetransmissionObserver(bool enable_rtx, bool enable_red) 711 explicit RetransmissionObserver(bool use_rtx, bool use_red)
712 : EndToEndTest(kDefaultTimeoutMs), 712 : EndToEndTest(kDefaultTimeoutMs),
713 payload_type_(GetPayloadType(false, enable_red)), 713 payload_type_(GetPayloadType(false, use_red)),
714 retransmission_ssrc_(enable_rtx ? kSendRtxSsrcs[0] 714 retransmission_ssrc_(use_rtx ? kSendRtxSsrcs[0] : kVideoSendSsrcs[0]),
715 : kVideoSendSsrcs[0]), 715 retransmission_payload_type_(GetPayloadType(use_rtx, use_red)),
716 retransmission_payload_type_(GetPayloadType(enable_rtx, enable_red)),
717 encoder_(VideoEncoder::Create(VideoEncoder::EncoderType::kVp8)),
718 marker_bits_observed_(0), 716 marker_bits_observed_(0),
719 num_packets_observed_(0), 717 num_packets_observed_(0),
720 retransmitted_timestamp_(0), 718 retransmitted_timestamp_(0),
721 frame_retransmitted_(false) {} 719 frame_retransmitted_(false) {}
722 720
723 private: 721 private:
724 Action OnSendRtp(const uint8_t* packet, size_t length) override { 722 Action OnSendRtp(const uint8_t* packet, size_t length) override {
725 rtc::CritScope lock(&crit_); 723 rtc::CritScope lock(&crit_);
726 RTPHeader header; 724 RTPHeader header;
727 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 725 EXPECT_TRUE(parser_->Parse(packet, length, &header));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 send_config->rtp.fec.red_rtx_payload_type; 783 send_config->rtp.fec.red_rtx_payload_type;
786 } 784 }
787 785
788 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { 786 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) {
789 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); 787 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
790 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; 788 send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
791 (*receive_configs)[0].rtp.rtx[payload_type_].ssrc = kSendRtxSsrcs[0]; 789 (*receive_configs)[0].rtp.rtx[payload_type_].ssrc = kSendRtxSsrcs[0];
792 (*receive_configs)[0].rtp.rtx[payload_type_].payload_type = 790 (*receive_configs)[0].rtp.rtx[payload_type_].payload_type =
793 kSendRtxPayloadType; 791 kSendRtxPayloadType;
794 } 792 }
795 // Configure encoding and decoding with VP8, since generic packetization
796 // doesn't support FEC with NACK.
797 RTC_DCHECK_EQ(1u, (*receive_configs)[0].decoders.size());
798 send_config->encoder_settings.encoder = encoder_.get();
799 send_config->encoder_settings.payload_name = "VP8";
800 (*receive_configs)[0].decoders[0].payload_name = "VP8";
801 } 793 }
802 794
803 void PerformTest() override { 795 void PerformTest() override {
804 EXPECT_TRUE(Wait()) 796 EXPECT_TRUE(Wait())
805 << "Timed out while waiting for retransmission to render."; 797 << "Timed out while waiting for retransmission to render.";
806 } 798 }
807 799
808 int GetPayloadType(bool use_rtx, bool use_red) { 800 int GetPayloadType(bool use_rtx, bool use_red) {
809 if (use_red) { 801 if (use_red) {
810 if (use_rtx) 802 if (use_rtx)
811 return kRtxRedPayloadType; 803 return kRtxRedPayloadType;
812 return kRedPayloadType; 804 return kRedPayloadType;
813 } 805 }
814 if (use_rtx) 806 if (use_rtx)
815 return kSendRtxPayloadType; 807 return kSendRtxPayloadType;
816 return kFakeVideoSendPayloadType; 808 return kFakeVideoSendPayloadType;
817 } 809 }
818 810
819 rtc::CriticalSection crit_; 811 rtc::CriticalSection crit_;
820 const int payload_type_; 812 const int payload_type_;
821 const uint32_t retransmission_ssrc_; 813 const uint32_t retransmission_ssrc_;
822 const int retransmission_payload_type_; 814 const int retransmission_payload_type_;
823 rtc::scoped_ptr<VideoEncoder> encoder_;
824 const std::string payload_name_;
825 int marker_bits_observed_; 815 int marker_bits_observed_;
826 int num_packets_observed_; 816 int num_packets_observed_;
827 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); 817 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_);
828 bool frame_retransmitted_; 818 bool frame_retransmitted_;
829 } test(enable_rtx, enable_red); 819 } test(use_rtx, use_red);
830 820
831 RunBaseTest(&test); 821 RunBaseTest(&test);
832 } 822 }
833 823
834 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { 824 TEST_F(EndToEndTest, DecodesRetransmittedFrame) {
835 DecodesRetransmittedFrame(false, false); 825 DecodesRetransmittedFrame(false, false);
836 } 826 }
837 827
838 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) { 828 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) {
839 DecodesRetransmittedFrame(true, false); 829 DecodesRetransmittedFrame(true, false);
(...skipping 1251 matching lines...) Expand 10 before | Expand all | Expand 10 after
2091 void EndToEndTest::VerifyHistogramStats(bool use_rtx, 2081 void EndToEndTest::VerifyHistogramStats(bool use_rtx,
2092 bool use_red, 2082 bool use_red,
2093 bool screenshare) { 2083 bool screenshare) {
2094 class StatsObserver : public test::EndToEndTest { 2084 class StatsObserver : public test::EndToEndTest {
2095 public: 2085 public:
2096 StatsObserver(bool use_rtx, bool use_red, bool screenshare) 2086 StatsObserver(bool use_rtx, bool use_red, bool screenshare)
2097 : EndToEndTest(kLongTimeoutMs), 2087 : EndToEndTest(kLongTimeoutMs),
2098 use_rtx_(use_rtx), 2088 use_rtx_(use_rtx),
2099 use_red_(use_red), 2089 use_red_(use_red),
2100 screenshare_(screenshare), 2090 screenshare_(screenshare),
2101 // This test uses NACK, so to send FEC we can't use a fake encoder.
2102 vp8_encoder_(
2103 use_red ? VideoEncoder::Create(VideoEncoder::EncoderType::kVp8)
2104 : nullptr),
2105 sender_call_(nullptr), 2091 sender_call_(nullptr),
2106 receiver_call_(nullptr), 2092 receiver_call_(nullptr),
2107 start_runtime_ms_(-1) {} 2093 start_runtime_ms_(-1) {}
2108 2094
2109 private: 2095 private:
2110 Action OnSendRtp(const uint8_t* packet, size_t length) override { 2096 Action OnSendRtp(const uint8_t* packet, size_t length) override {
2111 if (MinMetricRunTimePassed()) 2097 if (MinMetricRunTimePassed())
2112 observation_complete_.Set(); 2098 observation_complete_.Set();
2113 2099
2114 // GetStats calls GetSendChannelRtcpStatistics 2100 // GetStats calls GetSendChannelRtcpStatistics
(...skipping 19 matching lines...) Expand all
2134 VideoSendStream::Config* send_config, 2120 VideoSendStream::Config* send_config,
2135 std::vector<VideoReceiveStream::Config>* receive_configs, 2121 std::vector<VideoReceiveStream::Config>* receive_configs,
2136 VideoEncoderConfig* encoder_config) override { 2122 VideoEncoderConfig* encoder_config) override {
2137 // NACK 2123 // NACK
2138 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 2124 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
2139 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 2125 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
2140 // FEC 2126 // FEC
2141 if (use_red_) { 2127 if (use_red_) {
2142 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 2128 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
2143 send_config->rtp.fec.red_payload_type = kRedPayloadType; 2129 send_config->rtp.fec.red_payload_type = kRedPayloadType;
2144 send_config->encoder_settings.encoder = vp8_encoder_.get();
2145 send_config->encoder_settings.payload_name = "VP8";
2146 (*receive_configs)[0].decoders[0].payload_name = "VP8";
2147 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; 2130 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
2148 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 2131 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
2149 } 2132 }
2150 // RTX 2133 // RTX
2151 if (use_rtx_) { 2134 if (use_rtx_) {
2152 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); 2135 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
2153 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; 2136 send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
2154 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].ssrc = 2137 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].ssrc =
2155 kSendRtxSsrcs[0]; 2138 kSendRtxSsrcs[0];
2156 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].payload_type = 2139 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].payload_type =
2157 kSendRtxPayloadType; 2140 kSendRtxPayloadType;
2158 } 2141 }
2159 encoder_config->content_type = 2142 encoder_config->content_type =
2160 screenshare_ ? VideoEncoderConfig::ContentType::kScreen 2143 screenshare_ ? VideoEncoderConfig::ContentType::kScreen
2161 : VideoEncoderConfig::ContentType::kRealtimeVideo; 2144 : VideoEncoderConfig::ContentType::kRealtimeVideo;
2162 } 2145 }
2163 2146
2164 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 2147 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
2165 sender_call_ = sender_call; 2148 sender_call_ = sender_call;
2166 receiver_call_ = receiver_call; 2149 receiver_call_ = receiver_call;
2167 } 2150 }
2168 2151
2169 void PerformTest() override { 2152 void PerformTest() override {
2170 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed."; 2153 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed.";
2171 } 2154 }
2172 2155
2173 const bool use_rtx_; 2156 const bool use_rtx_;
2174 const bool use_red_; 2157 const bool use_red_;
2175 const bool screenshare_; 2158 const bool screenshare_;
2176 const rtc::scoped_ptr<VideoEncoder> vp8_encoder_;
2177 Call* sender_call_; 2159 Call* sender_call_;
2178 Call* receiver_call_; 2160 Call* receiver_call_;
2179 int64_t start_runtime_ms_; 2161 int64_t start_runtime_ms_;
2180 } test(use_rtx, use_red, screenshare); 2162 } test(use_rtx, use_red, screenshare);
2181 2163
2182 test::ClearHistograms(); 2164 test::ClearHistograms();
2183 RunBaseTest(&test); 2165 RunBaseTest(&test);
2184 2166
2185 // Delete the call for Call stats to be reported. 2167 // Delete the call for Call stats to be reported.
2186 sender_call_.reset(); 2168 sender_call_.reset();
(...skipping 1350 matching lines...) Expand 10 before | Expand all | Expand 10 after
3537 private: 3519 private:
3538 bool video_observed_; 3520 bool video_observed_;
3539 bool audio_observed_; 3521 bool audio_observed_;
3540 SequenceNumberUnwrapper unwrapper_; 3522 SequenceNumberUnwrapper unwrapper_;
3541 std::set<int64_t> received_packet_ids_; 3523 std::set<int64_t> received_packet_ids_;
3542 } test; 3524 } test;
3543 3525
3544 RunBaseTest(&test); 3526 RunBaseTest(&test);
3545 } 3527 }
3546 } // namespace webrtc 3528 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/video/video_send_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698