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

Unified Diff: webrtc/video/end_to_end_tests.cc

Issue 2753253002: Re-enable ULPFEC end-to-end test. (Closed)
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/end_to_end_tests.cc
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index 6d56da5e0184c27d2f582ac220213ebc71494047..91b1e1d6b6d3fd6b55bc4604281ed27a6c31e32e 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -576,14 +576,13 @@ TEST_F(EndToEndTest, ReceivesNackAndRetransmitsAudio) {
RunBaseTest(&test);
}
-// Disabled due to flakyness, see
-// https://bugs.chromium.org/p/webrtc/issues/detail?id=7047.
-TEST_F(EndToEndTest, DISABLED_ReceivesUlpfec) {
+TEST_F(EndToEndTest, ReceivesUlpfec) {
class UlpfecRenderObserver : public test::EndToEndTest,
public rtc::VideoSinkInterface<VideoFrame> {
public:
UlpfecRenderObserver()
: EndToEndTest(kDefaultTimeoutMs),
+ encoder_(VP8Encoder::Create()),
random_(0xcafef00d1),
num_packets_sent_(0) {}
@@ -593,7 +592,7 @@ TEST_F(EndToEndTest, DISABLED_ReceivesUlpfec) {
RTPHeader header;
EXPECT_TRUE(parser_->Parse(packet, length, &header));
- EXPECT_TRUE(header.payloadType == kFakeVideoSendPayloadType ||
+ EXPECT_TRUE(header.payloadType == kVideoSendPayloadType ||
header.payloadType == kRedPayloadType)
<< "Unknown payload type received.";
EXPECT_EQ(kVideoSendSsrcs[0], header.ssrc) << "Unknown SSRC received.";
@@ -604,12 +603,12 @@ TEST_F(EndToEndTest, DISABLED_ReceivesUlpfec) {
encapsulated_payload_type =
static_cast<int>(packet[header.headerLength]);
- EXPECT_TRUE(encapsulated_payload_type == kFakeVideoSendPayloadType ||
+ EXPECT_TRUE(encapsulated_payload_type == kVideoSendPayloadType ||
encapsulated_payload_type == kUlpfecPayloadType)
<< "Unknown encapsulated payload type received.";
}
- // To reduce test flakiness, always let ULPFEC packets through.
+ // To minimize test flakiness, always let ULPFEC packets through.
if (encapsulated_payload_type == kUlpfecPayloadType) {
return SEND_PACKET;
}
@@ -617,11 +616,10 @@ TEST_F(EndToEndTest, DISABLED_ReceivesUlpfec) {
// Simulate 5% video packet loss after rampup period. Record the
// corresponding timestamps that were dropped.
if (num_packets_sent_++ > 100 && random_.Rand(1, 100) <= 5) {
- if (encapsulated_payload_type == kFakeVideoSendPayloadType) {
+ if (encapsulated_payload_type == kVideoSendPayloadType) {
dropped_sequence_numbers_.insert(header.sequenceNumber);
dropped_timestamps_.insert(header.timestamp);
}
-
return DROP_PACKET;
}
@@ -642,15 +640,23 @@ TEST_F(EndToEndTest, DISABLED_ReceivesUlpfec) {
VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
- send_config->rtp.extensions.push_back(
- RtpExtension(RtpExtension::kTransportSequenceNumberUri,
- test::kTransportSequenceNumberExtensionId));
+ // Use VP8 instead of FAKE, since the latter does not have PictureID
+ // in the packetization headers.
philipel 2017/03/20 12:09:07 I can't see why picture id matters in the case of
brandtr_google 2017/03/20 12:12:09 I believe it has something to do with key frame re
brandtr_google 2017/03/20 12:14:14 I guess the main point is that switching to VP8 se
+ send_config->encoder_settings.encoder = encoder_.get();
+ send_config->encoder_settings.payload_name = "VP8";
+ send_config->encoder_settings.payload_type = kVideoSendPayloadType;
+ VideoReceiveStream::Decoder decoder =
+ test::CreateMatchingDecoder(send_config->encoder_settings);
+ decoder_.reset(decoder.decoder);
+ (*receive_configs)[0].decoders.clear();
+ (*receive_configs)[0].decoders.push_back(decoder);
+
+ // Enable ULPFEC over RED.
send_config->rtp.ulpfec.red_payload_type = kRedPayloadType;
send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
-
- (*receive_configs)[0].rtp.transport_cc = true;
(*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType;
(*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
+
(*receive_configs)[0].renderer = this;
}
@@ -660,11 +666,13 @@ TEST_F(EndToEndTest, DISABLED_ReceivesUlpfec) {
}
rtc::CriticalSection crit_;
+ std::unique_ptr<VideoEncoder> encoder_;
+ std::unique_ptr<VideoDecoder> decoder_;
std::set<uint32_t> dropped_sequence_numbers_ GUARDED_BY(crit_);
// Several packets can have the same timestamp.
std::multiset<uint32_t> dropped_timestamps_ GUARDED_BY(crit_);
Random random_;
- int num_packets_sent_;
+ int num_packets_sent_ GUARDED_BY(crit_);
} test;
RunBaseTest(&test);
@@ -793,12 +801,7 @@ class FlexfecRenderObserver : public test::EndToEndTest,
VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
- send_config->rtp.extensions.push_back(
- RtpExtension(RtpExtension::kTransportSequenceNumberUri,
- test::kTransportSequenceNumberExtensionId));
-
(*receive_configs)[0].rtp.local_ssrc = kVideoLocalSsrc;
- (*receive_configs)[0].rtp.transport_cc = true;
(*receive_configs)[0].renderer = this;
if (enable_nack_) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698