| Index: video/end_to_end_tests.cc | 
| diff --git a/video/end_to_end_tests.cc b/video/end_to_end_tests.cc | 
| index 06a711822814c264936f0797619498673cae819f..2ae3ceefbc2f6190508e7df2e8a8befcb7878648 100644 | 
| --- a/video/end_to_end_tests.cc | 
| +++ b/video/end_to_end_tests.cc | 
| @@ -140,7 +140,7 @@ class EndToEndTest : public test::CallTest { | 
| void RespectsRtcpMode(RtcpMode rtcp_mode); | 
| void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); | 
| void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); | 
| -  void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); | 
| +  void VerifyHistogramStats(bool use_rtx, bool use_fec, bool screenshare); | 
| void VerifyNewVideoSendStreamsRespectNetworkState( | 
| MediaType network_to_bring_up, | 
| VideoEncoder* encoder, | 
| @@ -696,8 +696,8 @@ TEST_F(EndToEndTest, ReceivesUlpfec) { | 
| // Enable ULPFEC over RED. | 
| send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 
| send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 
| -      (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 
| -      (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 
| +      (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; | 
| +      (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; | 
|  | 
| (*receive_configs)[0].renderer = this; | 
| } | 
| @@ -853,16 +853,11 @@ class FlexfecRenderObserver : public test::EndToEndTest, | 
|  | 
| if (enable_nack_) { | 
| send_config->rtp.nack.rtp_history_ms = test::CallTest::kNackRtpHistoryMs; | 
| -      send_config->rtp.ulpfec.red_rtx_payload_type = | 
| -          test::CallTest::kRtxRedPayloadType; | 
| send_config->rtp.rtx.ssrcs.push_back(test::CallTest::kSendRtxSsrcs[0]); | 
| send_config->rtp.rtx.payload_type = test::CallTest::kSendRtxPayloadType; | 
|  | 
| (*receive_configs)[0].rtp.nack.rtp_history_ms = | 
| test::CallTest::kNackRtpHistoryMs; | 
| -      (*receive_configs)[0].rtp.ulpfec.red_rtx_payload_type = | 
| -          test::CallTest::kRtxRedPayloadType; | 
| - | 
| (*receive_configs)[0].rtp.rtx_ssrc = test::CallTest::kSendRtxSsrcs[0]; | 
| (*receive_configs)[0] | 
| .rtp | 
| @@ -1043,8 +1038,8 @@ TEST_F(EndToEndTest, ReceivedUlpfecPacketsNotNacked) { | 
| send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType; | 
|  | 
| (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 
| -      (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 
| -      (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 
| +      (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; | 
| +      (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; | 
|  | 
| (*receive_configs)[0].decoders.resize(1); | 
| (*receive_configs)[0].decoders[0].payload_type = | 
| @@ -1171,12 +1166,10 @@ void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) { | 
| send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 
| if (retransmission_ssrc_ == kSendRtxSsrcs[0]) | 
| send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; | 
| -        (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = | 
| +        (*receive_configs)[0].rtp.ulpfec_payload_type = | 
| send_config->rtp.ulpfec.ulpfec_payload_type; | 
| -        (*receive_configs)[0].rtp.ulpfec.red_payload_type = | 
| +        (*receive_configs)[0].rtp.red_payload_type = | 
| send_config->rtp.ulpfec.red_payload_type; | 
| -        (*receive_configs)[0].rtp.ulpfec.red_rtx_payload_type = | 
| -            send_config->rtp.ulpfec.red_rtx_payload_type; | 
| } | 
|  | 
| if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { | 
| @@ -1207,8 +1200,8 @@ void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) { | 
| << "Timed out while waiting for retransmission to render."; | 
| } | 
|  | 
| -    int GetPayloadType(bool use_rtx, bool use_red) { | 
| -      if (use_red) { | 
| +    int GetPayloadType(bool use_rtx, bool use_fec) { | 
| +      if (use_fec) { | 
| if (use_rtx) | 
| return kRtxRedPayloadType; | 
| return kRedPayloadType; | 
| @@ -2700,18 +2693,18 @@ TEST_F(EndToEndTest, VerifyNackStats) { | 
| } | 
|  | 
| void EndToEndTest::VerifyHistogramStats(bool use_rtx, | 
| -                                        bool use_red, | 
| +                                        bool use_fec, | 
| bool screenshare) { | 
| class StatsObserver : public test::EndToEndTest, | 
| public rtc::VideoSinkInterface<VideoFrame> { | 
| public: | 
| -    StatsObserver(bool use_rtx, bool use_red, bool screenshare) | 
| +    StatsObserver(bool use_rtx, bool use_fec, bool screenshare) | 
| : EndToEndTest(kLongTimeoutMs), | 
| use_rtx_(use_rtx), | 
| -          use_red_(use_red), | 
| +          use_fec_(use_fec), | 
| screenshare_(screenshare), | 
| // This test uses NACK, so to send FEC we can't use a fake encoder. | 
| -          vp8_encoder_(use_red ? VP8Encoder::Create() : nullptr), | 
| +          vp8_encoder_(use_fec ? VP8Encoder::Create() : nullptr), | 
| sender_call_(nullptr), | 
| receiver_call_(nullptr), | 
| start_runtime_ms_(-1), | 
| @@ -2762,15 +2755,14 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx, | 
| (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 
| (*receive_configs)[0].renderer = this; | 
| // FEC | 
| -      if (use_red_) { | 
| +      if (use_fec_) { | 
| send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 
| send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 
| send_config->encoder_settings.encoder = vp8_encoder_.get(); | 
| send_config->encoder_settings.payload_name = "VP8"; | 
| (*receive_configs)[0].decoders[0].payload_name = "VP8"; | 
| -        (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 
| -        (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = | 
| -            kUlpfecPayloadType; | 
| +        (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; | 
| +        (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; | 
| } | 
| // RTX | 
| if (use_rtx_) { | 
| @@ -2780,6 +2772,12 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx, | 
| (*receive_configs)[0] | 
| .rtp.rtx_associated_payload_types[kSendRtxPayloadType] = | 
| kFakeVideoSendPayloadType; | 
| +        if (use_fec_) { | 
| +          send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; | 
| +          (*receive_configs)[0] | 
| +              .rtp.rtx_associated_payload_types[kRtxRedPayloadType] = | 
| +              kSendRtxPayloadType; | 
| +        } | 
| } | 
| // RTT needed for RemoteNtpTimeEstimator for the receive stream. | 
| (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = true; | 
| @@ -2799,14 +2797,14 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx, | 
|  | 
| rtc::CriticalSection crit_; | 
| const bool use_rtx_; | 
| -    const bool use_red_; | 
| +    const bool use_fec_; | 
| const bool screenshare_; | 
| const std::unique_ptr<VideoEncoder> vp8_encoder_; | 
| Call* sender_call_; | 
| Call* receiver_call_; | 
| int64_t start_runtime_ms_; | 
| int num_frames_received_ RTC_GUARDED_BY(&crit_); | 
| -  } test(use_rtx, use_red, screenshare); | 
| +  } test(use_rtx, use_fec, screenshare); | 
|  | 
| metrics::Reset(); | 
| RunBaseTest(&test); | 
| @@ -2916,7 +2914,7 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx, | 
| EXPECT_EQ(num_rtx_samples, | 
| metrics::NumSamples("WebRTC.Video.RtxBitrateReceivedInKbps")); | 
|  | 
| -  int num_red_samples = use_red ? 1 : 0; | 
| +  int num_red_samples = use_fec ? 1 : 0; | 
| EXPECT_EQ(num_red_samples, | 
| metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); | 
| EXPECT_EQ(num_red_samples, | 
| @@ -4838,7 +4836,10 @@ TEST_F(EndToEndTest, VerifyDefaultVideoReceiveConfigParameters) { | 
| << "Enabling RTP extensions require negotiation."; | 
|  | 
| VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 
| -  VerifyEmptyUlpfecConfig(default_receive_config.rtp.ulpfec); | 
| +  EXPECT_EQ(-1, default_receive_config.rtp.ulpfec_payload_type) | 
| +      << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; | 
| +  EXPECT_EQ(-1, default_receive_config.rtp.red_payload_type) | 
| +      << "Enabling ULPFEC requires rtpmap: red negotiation."; | 
| } | 
|  | 
| TEST_F(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { | 
|  |