From 8e321cd690ad2789c43bf1e2e2ce4267cd130eb8 Mon Sep 17 00:00:00 2001 From: Ilya Nikolaevskiy Date: Mon, 11 May 2020 15:33:23 +0200 Subject: [PATCH] [Adaptation] Make QuailtyScalerResourse to report underuse if quality scaling is off MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: chromium:1080789 Change-Id: I3aefb746fd6f4adae4b32db322af6b787e8ede1d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174804 Commit-Queue: Ilya Nikolaevskiy Commit-Queue: Henrik Boström Reviewed-by: Henrik Boström Reviewed-by: Evan Shrubsole Cr-Commit-Position: refs/heads/master@{#31213} --- .../resource_adaptation_processor_unittest.cc | 22 +++++++++++++++++++ video/adaptation/quality_scaler_resource.cc | 10 ++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/call/adaptation/resource_adaptation_processor_unittest.cc b/call/adaptation/resource_adaptation_processor_unittest.cc index 6fb56c9abd..7e7fe590dc 100644 --- a/call/adaptation/resource_adaptation_processor_unittest.cc +++ b/call/adaptation/resource_adaptation_processor_unittest.cc @@ -325,4 +325,26 @@ TEST_F(ResourceAdaptationProcessorTest, EXPECT_FALSE(resource_.usage_state().has_value()); } +TEST_F(ResourceAdaptationProcessorTest, + AdaptsDownWhenOtherResourceIsAlwaysUnderused) { + processor_.SetDegradationPreference( + DegradationPreference::MAINTAIN_FRAMERATE); + processor_.StartResourceAdaptation(); + SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); + other_resource_.set_usage_state(ResourceUsageState::kUnderuse); + // Does not trigger adapataion because there's no restriction. + EXPECT_EQ(0, processor_listener_.adaptation_counters().Total()); + + RestrictSource(processor_listener_.restrictions()); + resource_.set_usage_state(ResourceUsageState::kOveruse); + // Adapts down even if other resource asked for adapting up. + EXPECT_EQ(1, processor_listener_.adaptation_counters().Total()); + + RestrictSource(processor_listener_.restrictions()); + other_resource_.set_usage_state(ResourceUsageState::kUnderuse); + // Doesn't adapt up because adaptation is due to another resource. + EXPECT_EQ(1, processor_listener_.adaptation_counters().Total()); + RestrictSource(processor_listener_.restrictions()); +} + } // namespace webrtc diff --git a/video/adaptation/quality_scaler_resource.cc b/video/adaptation/quality_scaler_resource.cc index ac35d613cd..ca317e5a8c 100644 --- a/video/adaptation/quality_scaler_resource.cc +++ b/video/adaptation/quality_scaler_resource.cc @@ -50,8 +50,16 @@ bool QualityScalerResource::QpFastFilterLow() { void QualityScalerResource::OnEncodeCompleted(const EncodedImage& encoded_image, int64_t time_sent_in_us) { - if (quality_scaler_ && encoded_image.qp_ >= 0) + if (quality_scaler_ && encoded_image.qp_ >= 0) { quality_scaler_->ReportQp(encoded_image.qp_, time_sent_in_us); + } else if (!quality_scaler_) { + // TODO(webrtc:11553): this is a workaround to ensure that all quality + // scaler imposed limitations are removed once qualty scaler is disabled + // mid call. + // Instead it should be done at a higher layer in the same way for all + // resources. + OnResourceUsageStateMeasured(ResourceUsageState::kUnderuse); + } } void QualityScalerResource::OnFrameDropped(