From 67daf71689c33a50318746e5579055ec29621f59 Mon Sep 17 00:00:00 2001 From: Elad Alon Date: Fri, 28 Jun 2019 18:14:36 +0200 Subject: [PATCH] Implement RtpVideoSender::SetFecAllowed() Bug: webrtc:10769 Change-Id: I7214b2eaad828c59fd9836e85a3ecd8e737fe5f7 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/143966 Commit-Queue: Elad Alon Reviewed-by: Niels Moller Cr-Commit-Position: refs/heads/master@{#28420} --- call/rtp_video_sender.cc | 10 +++++++++- call/rtp_video_sender.h | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc index bf9e94ef63..529e0ad98c 100644 --- a/call/rtp_video_sender.cc +++ b/call/rtp_video_sender.cc @@ -225,6 +225,7 @@ RtpVideoSender::RtpVideoSender( flexfec_sender_( MaybeCreateFlexfecSender(clock, rtp_config, suspended_ssrcs_)), fec_controller_(std::move(fec_controller)), + fec_allowed_(true), rtp_streams_( CreateRtpStreamSenders(clock, rtp_config, @@ -705,6 +706,12 @@ void RtpVideoSender::OnBitrateUpdated(uint32_t bitrate_bps, // protection overhead. encoder_target_rate_bps_ = fec_controller_->UpdateFecRates( payload_bitrate_bps, framerate, fraction_loss, loss_mask_vector_, rtt); + if (!fec_allowed_) { + encoder_target_rate_bps_ = payload_bitrate_bps; + // fec_controller_->UpdateFecRates() was still called so as to allow + // |fec_controller_| to update whatever internal state it might have, + // since |fec_allowed_| may be toggled back on at any moment. + } uint32_t packetization_rate_bps = 0; if (account_for_packetization_overhead_) { @@ -783,7 +790,8 @@ int RtpVideoSender::ProtectionRequest(const FecProtectionParams* delta_params, } void RtpVideoSender::SetFecAllowed(bool fec_allowed) { - // TODO(bugs.webrtc.og/10769): Handle this message. + rtc::CritScope cs(&crit_); + fec_allowed_ = fec_allowed; } void RtpVideoSender::OnPacketFeedbackVector( diff --git a/call/rtp_video_sender.h b/call/rtp_video_sender.h index 333bfeaf81..2f13752625 100644 --- a/call/rtp_video_sender.h +++ b/call/rtp_video_sender.h @@ -178,7 +178,10 @@ class RtpVideoSender : public RtpVideoSenderInterface, std::map suspended_ssrcs_; std::unique_ptr flexfec_sender_; + const std::unique_ptr fec_controller_; + bool fec_allowed_ RTC_GUARDED_BY(crit_); + // Rtp modules are assumed to be sorted in simulcast index order. const std::vector rtp_streams_;