From 8ed653d1c4ea94a6f4b0d0d4114f3f0b0de251d1 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Tue, 23 Jan 2018 16:37:22 +0100 Subject: [PATCH] Do not register VideoSendStream to PacketFeedbackObserver when the current FEC controller do not use Loss Vector Mask. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: chromium:804865 Change-Id: Ib197ff05266a20b8358724e7d8bfe2b085a2de23 Reviewed-on: https://webrtc-review.googlesource.com/43123 Reviewed-by: Björn Terelius Reviewed-by: Stefan Holmer Commit-Queue: Ying Wang Cr-Commit-Position: refs/heads/master@{#21742} --- api/fec_controller.h | 3 +++ modules/video_coding/fec_controller_default.h | 1 + video/video_send_stream.cc | 8 ++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) 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;