From 3af6cc0de9ccfa07a3626be652c114ecca1a587f Mon Sep 17 00:00:00 2001 From: kthelgason Date: Wed, 22 Mar 2017 00:25:28 -0700 Subject: [PATCH] Don't reset quality scaler on resolution change. This was causing the QualityScaler to be reconstructed each time the resolution changes and thus the fast_rampup logic was not working as intended. We now properly change the checking period to 5 seconds after a downscale. BUG=b/36457883 Review-Url: https://codereview.webrtc.org/2766513003 Cr-Commit-Position: refs/heads/master@{#17335} --- webrtc/video/vie_encoder.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc index 2cf08b9e01..19e8df1844 100644 --- a/webrtc/video/vie_encoder.cc +++ b/webrtc/video/vie_encoder.cc @@ -463,7 +463,16 @@ void ViEEncoder::ConfigureQualityScaler() { const auto scaling_settings = settings_.encoder->GetScalingSettings(); const bool degradation_preference_allows_scaling = degradation_preference_ != DegradationPreference::kMaintainResolution; - if (degradation_preference_allows_scaling && scaling_settings.enabled) { + + stats_proxy_->SetResolutionRestrictionStats( + degradation_preference_allows_scaling, scale_counter_[kCpu] > 0, + scale_counter_[kQuality]); + + if (degradation_preference_allows_scaling && + scaling_settings.enabled) { + // Abort if quality scaler has already been configured. + if (quality_scaler_.get() != nullptr) + return; // Drop frames and scale down until desired quality is achieved. if (scaling_settings.thresholds) { quality_scaler_.reset( @@ -475,9 +484,6 @@ void ViEEncoder::ConfigureQualityScaler() { quality_scaler_.reset(nullptr); initial_rampup_ = kMaxInitialFramedrop; } - stats_proxy_->SetResolutionRestrictionStats( - degradation_preference_allows_scaling, scale_counter_[kCpu] > 0, - scale_counter_[kQuality]); } void ViEEncoder::OnFrame(const VideoFrame& video_frame) {