[Adaptation] Make QuailtyScalerResourse to report underuse if quality scaling is off
Bug: chromium:1080789
Change-Id: I3aefb746fd6f4adae4b32db322af6b787e8ede1d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174804
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Evan Shrubsole <eshr@google.com>
Cr-Commit-Position: refs/heads/master@{#31213}
diff --git a/call/adaptation/resource_adaptation_processor_unittest.cc b/call/adaptation/resource_adaptation_processor_unittest.cc
index 6fb56c9..7e7fe59 100644
--- a/call/adaptation/resource_adaptation_processor_unittest.cc
+++ b/call/adaptation/resource_adaptation_processor_unittest.cc
@@ -325,4 +325,26 @@
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 ac35d61..ca317e5 100644
--- a/video/adaptation/quality_scaler_resource.cc
+++ b/video/adaptation/quality_scaler_resource.cc
@@ -50,8 +50,16 @@
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(