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}
This commit is contained in:
kthelgason 2017-03-22 00:25:28 -07:00 committed by Commit bot
parent de5954c0a5
commit 3af6cc0de9

View File

@ -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) {