diff --git a/api/fec_controller.h b/api/fec_controller.h index 24c004ec95..aad2316afb 100644 --- a/api/fec_controller.h +++ b/api/fec_controller.h @@ -74,6 +74,9 @@ class FecController { // Informs of encoded output. virtual void UpdateWithEncodedData(const EncodedImage& encoded_image) = 0; + + // Returns whether this FEC Controller needs Loss Vector Mask as input. + virtual bool UseLossVectorMask() = 0; }; } // namespace webrtc diff --git a/modules/video_coding/fec_controller_default.h b/modules/video_coding/fec_controller_default.h index 8c795cb6bd..a7f445fa24 100644 --- a/modules/video_coding/fec_controller_default.h +++ b/modules/video_coding/fec_controller_default.h @@ -40,6 +40,7 @@ class FecControllerDefault : public FecController { std::vector loss_mask_vector, int64_t round_trip_time_ms) override; void UpdateWithEncodedData(const EncodedImage& encoded_image) override; + bool UseLossVectorMask() override { return false; } private: enum { kBitrateAverageWinMs = 1000 }; diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc index 1e749155d9..3db592da8c 100644 --- a/video/video_send_stream.cc +++ b/video/video_send_stream.cc @@ -846,7 +846,9 @@ VideoSendStreamImpl::VideoSendStreamImpl( fec_controller_->SetProtectionCallback(this); // Signal congestion controller this object is ready for OnPacket* callbacks. - transport_->send_side_cc()->RegisterPacketFeedbackObserver(this); + if (fec_controller_->UseLossVectorMask()) { + transport_->send_side_cc()->RegisterPacketFeedbackObserver(this); + } RTC_DCHECK(config_->encoder_settings.encoder); RTC_DCHECK_GE(config_->encoder_settings.payload_type, 0); @@ -890,7 +892,9 @@ VideoSendStreamImpl::~VideoSendStreamImpl() { RTC_DCHECK(!payload_router_.IsActive()) << "VideoSendStreamImpl::Stop not called"; RTC_LOG(LS_INFO) << "~VideoSendStreamInternal: " << config_->ToString(); - transport_->send_side_cc()->DeRegisterPacketFeedbackObserver(this); + if (fec_controller_->UseLossVectorMask()) { + transport_->send_side_cc()->DeRegisterPacketFeedbackObserver(this); + } for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { transport_->packet_router()->RemoveSendRtpModule(rtp_rtcp); delete rtp_rtcp;