diff options
Diffstat (limited to 'call/adaptation')
-rw-r--r-- | call/adaptation/BUILD.gn | 2 | ||||
-rw-r--r-- | call/adaptation/degradation_preference_listener.cc | 17 | ||||
-rw-r--r-- | call/adaptation/degradation_preference_listener.h | 28 | ||||
-rw-r--r-- | call/adaptation/resource_adaptation_processor.cc | 30 | ||||
-rw-r--r-- | call/adaptation/resource_adaptation_processor.h | 15 | ||||
-rw-r--r-- | call/adaptation/resource_adaptation_processor_unittest.cc | 66 | ||||
-rw-r--r-- | call/adaptation/video_stream_adapter.cc | 19 | ||||
-rw-r--r-- | call/adaptation/video_stream_adapter.h | 2 | ||||
-rw-r--r-- | call/adaptation/video_stream_adapter_unittest.cc | 22 |
9 files changed, 64 insertions, 137 deletions
diff --git a/call/adaptation/BUILD.gn b/call/adaptation/BUILD.gn index 6aa82e5780..94944d6820 100644 --- a/call/adaptation/BUILD.gn +++ b/call/adaptation/BUILD.gn @@ -16,8 +16,6 @@ rtc_library("resource_adaptation") { "adaptation_listener.h", "broadcast_resource_listener.cc", "broadcast_resource_listener.h", - "degradation_preference_listener.cc", - "degradation_preference_listener.h", "degradation_preference_provider.cc", "degradation_preference_provider.h", "encoder_settings.cc", diff --git a/call/adaptation/degradation_preference_listener.cc b/call/adaptation/degradation_preference_listener.cc deleted file mode 100644 index 3425e59aa0..0000000000 --- a/call/adaptation/degradation_preference_listener.cc +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 The WebRTC Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "call/adaptation/degradation_preference_listener.h" - -namespace webrtc { - -DegradationPreferenceListener::~DegradationPreferenceListener() = default; - -} // namespace webrtc diff --git a/call/adaptation/degradation_preference_listener.h b/call/adaptation/degradation_preference_listener.h deleted file mode 100644 index d085b220e8..0000000000 --- a/call/adaptation/degradation_preference_listener.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2020 The WebRTC Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef CALL_ADAPTATION_DEGRADATION_PREFERENCE_LISTENER_H_ -#define CALL_ADAPTATION_DEGRADATION_PREFERENCE_LISTENER_H_ - -#include "api/rtp_parameters.h" - -namespace webrtc { - -class DegradationPreferenceListener { - public: - virtual ~DegradationPreferenceListener(); - - virtual void OnDegradationPreferenceUpdated( - DegradationPreference degradation_preference) = 0; -}; - -} // namespace webrtc - -#endif // CALL_ADAPTATION_DEGRADATION_PREFERENCE_LISTENER_H_ diff --git a/call/adaptation/resource_adaptation_processor.cc b/call/adaptation/resource_adaptation_processor.cc index 414132dfc6..dd273acb26 100644 --- a/call/adaptation/resource_adaptation_processor.cc +++ b/call/adaptation/resource_adaptation_processor.cc @@ -75,7 +75,6 @@ ResourceAdaptationProcessor::ResourceAdaptationProcessor( new rtc::RefCountedObject<ResourceListenerDelegate>(this)), encoder_stats_observer_(encoder_stats_observer), resources_(), - effective_degradation_preference_(DegradationPreference::DISABLED), stream_adapter_(stream_adapter), last_reported_source_restrictions_(), previous_mitigation_results_(), @@ -201,23 +200,6 @@ void ResourceAdaptationProcessor::RemoveAdaptationListener( adaptation_listeners_.erase(it); } -void ResourceAdaptationProcessor::OnDegradationPreferenceUpdated( - DegradationPreference degradation_preference) { - if (!resource_adaptation_queue_->IsCurrent()) { - resource_adaptation_queue_->PostTask( - ToQueuedTask([this, degradation_preference]() { - OnDegradationPreferenceUpdated(degradation_preference); - })); - return; - } - RTC_DCHECK_RUN_ON(resource_adaptation_queue_); - if (degradation_preference == effective_degradation_preference_) { - return; - } - effective_degradation_preference_ = degradation_preference; - stream_adapter_->SetDegradationPreference(effective_degradation_preference_); -} - void ResourceAdaptationProcessor::OnResourceUsageStateMeasured( rtc::scoped_refptr<Resource> resource, ResourceUsageState usage_state) { @@ -263,12 +245,6 @@ ResourceAdaptationProcessor::OnResourceUnderuse( RTC_DCHECK_RUN_ON(resource_adaptation_queue_); RTC_DCHECK(!processing_in_progress_); processing_in_progress_ = true; - if (effective_degradation_preference_ == DegradationPreference::DISABLED) { - processing_in_progress_ = false; - return MitigationResultAndLogMessage( - MitigationResult::kDisabled, - "Not adapting up because DegradationPreference is disabled"); - } // How can this stream be adapted up? Adaptation adaptation = stream_adapter_->GetAdaptationUp(); if (adaptation.status() != Adaptation::Status::kValid) { @@ -351,12 +327,6 @@ ResourceAdaptationProcessor::OnResourceOveruse( RTC_DCHECK_RUN_ON(resource_adaptation_queue_); RTC_DCHECK(!processing_in_progress_); processing_in_progress_ = true; - if (effective_degradation_preference_ == DegradationPreference::DISABLED) { - processing_in_progress_ = false; - return MitigationResultAndLogMessage( - MitigationResult::kDisabled, - "Not adapting down because DegradationPreference is disabled"); - } // How can this stream be adapted up? Adaptation adaptation = stream_adapter_->GetAdaptationDown(); if (adaptation.min_pixel_limit_reached()) { diff --git a/call/adaptation/resource_adaptation_processor.h b/call/adaptation/resource_adaptation_processor.h index 33e964ea1a..f519fcc860 100644 --- a/call/adaptation/resource_adaptation_processor.h +++ b/call/adaptation/resource_adaptation_processor.h @@ -27,7 +27,6 @@ #include "api/video/video_stream_encoder_observer.h" #include "call/adaptation/adaptation_constraint.h" #include "call/adaptation/adaptation_listener.h" -#include "call/adaptation/degradation_preference_listener.h" #include "call/adaptation/resource_adaptation_processor_interface.h" #include "call/adaptation/video_source_restrictions.h" #include "call/adaptation/video_stream_adapter.h" @@ -54,8 +53,7 @@ namespace webrtc { // i.e. the "resource adaptation task queue". class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface, public VideoSourceRestrictionsListener, - public ResourceListener, - public DegradationPreferenceListener { + public ResourceListener { public: ResourceAdaptationProcessor( VideoStreamEncoderObserver* encoder_stats_observer, @@ -92,9 +90,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface, const VideoAdaptationCounters& adaptation_counters, rtc::scoped_refptr<Resource> reason, const VideoSourceRestrictions& unfiltered_restrictions) override; - // DegradationPreferenceListener implementation. - void OnDegradationPreferenceUpdated( - DegradationPreference degradation_preference) override; private: // If resource usage measurements happens off the adaptation task queue, this @@ -119,7 +114,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface, }; enum class MitigationResult { - kDisabled, kNotMostLimitedResource, kSharedMostLimitedResource, kRejectedByAdapter, @@ -142,10 +136,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface, MitigationResultAndLogMessage OnResourceOveruse( rtc::scoped_refptr<Resource> reason_resource); - // Needs to be invoked any time |degradation_preference_| or |is_screenshare_| - // changes to ensure |effective_degradation_preference_| is up-to-date. - void MaybeUpdateEffectiveDegradationPreference(); - void UpdateResourceLimitations(rtc::scoped_refptr<Resource> reason_resource, const VideoSourceRestrictions& restrictions, const VideoAdaptationCounters& counters) @@ -182,9 +172,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface, VideoStreamAdapter::RestrictionsWithCounters> adaptation_limits_by_resources_ RTC_GUARDED_BY(resource_adaptation_queue_); - // Adaptation strategy settings. - DegradationPreference effective_degradation_preference_ - RTC_GUARDED_BY(resource_adaptation_queue_); // Responsible for generating and applying possible adaptations. VideoStreamAdapter* const stream_adapter_ RTC_GUARDED_BY(resource_adaptation_queue_); diff --git a/call/adaptation/resource_adaptation_processor_unittest.cc b/call/adaptation/resource_adaptation_processor_unittest.cc index e7298d6e3c..0b16fabca7 100644 --- a/call/adaptation/resource_adaptation_processor_unittest.cc +++ b/call/adaptation/resource_adaptation_processor_unittest.cc @@ -163,7 +163,7 @@ TEST_F(ResourceAdaptationProcessorTest, DisabledByDefault) { } TEST_F(ResourceAdaptationProcessorTest, InsufficientInput) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); // Adaptation does not happen if input is insufficient. // When frame size is missing (OnFrameSizeObserved not called yet). @@ -183,7 +183,7 @@ TEST_F(ResourceAdaptationProcessorTest, InsufficientInput) { // restrictions. For that, see video_stream_adapter_unittest.cc. TEST_F(ResourceAdaptationProcessorTest, OveruseTriggersRestrictingResolutionInMaintainFrameRate) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -194,7 +194,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, OveruseTriggersRestrictingFrameRateInMaintainResolution) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_RESOLUTION); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -205,7 +205,8 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, OveruseTriggersRestrictingFrameRateAndResolutionInBalanced) { - processor_->OnDegradationPreferenceUpdated(DegradationPreference::BALANCED); + video_stream_adapter_->SetDegradationPreference( + DegradationPreference::BALANCED); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); // Adapting multiple times eventually resticts both frame rate and // resolution. Exactly many times we need to adapt depends on @@ -223,7 +224,7 @@ TEST_F(ResourceAdaptationProcessorTest, } TEST_F(ResourceAdaptationProcessorTest, AwaitingPreviousAdaptation) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -235,7 +236,7 @@ TEST_F(ResourceAdaptationProcessorTest, AwaitingPreviousAdaptation) { } TEST_F(ResourceAdaptationProcessorTest, CannotAdaptUpWhenUnrestricted) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kUnderuse); @@ -243,7 +244,7 @@ TEST_F(ResourceAdaptationProcessorTest, CannotAdaptUpWhenUnrestricted) { } TEST_F(ResourceAdaptationProcessorTest, UnderuseTakesUsBackToUnrestricted) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -255,7 +256,7 @@ TEST_F(ResourceAdaptationProcessorTest, UnderuseTakesUsBackToUnrestricted) { } TEST_F(ResourceAdaptationProcessorTest, ResourcesCanPreventAdaptingUp) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); // Adapt down so that we can adapt up. @@ -270,7 +271,7 @@ TEST_F(ResourceAdaptationProcessorTest, ResourcesCanPreventAdaptingUp) { TEST_F(ResourceAdaptationProcessorTest, ResourcesCanNotAdaptUpIfNeverAdaptedDown) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -284,7 +285,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, ResourcesCanNotAdaptUpIfNotAdaptedDownAfterReset) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -303,7 +304,7 @@ TEST_F(ResourceAdaptationProcessorTest, } TEST_F(ResourceAdaptationProcessorTest, OnlyMostLimitedResourceMayAdaptUp) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -333,7 +334,7 @@ TEST_F(ResourceAdaptationProcessorTest, OnlyMostLimitedResourceMayAdaptUp) { TEST_F(ResourceAdaptationProcessorTest, MultipleResourcesCanTriggerMultipleAdaptations) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -391,7 +392,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, MostLimitedResourceAdaptationWorksAfterChangingDegradataionPreference) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); // Adapt down until we can't anymore. @@ -407,7 +408,7 @@ TEST_F(ResourceAdaptationProcessorTest, RestrictSource(restrictions_listener_.restrictions()); int last_total = restrictions_listener_.adaptation_counters().Total(); - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_RESOLUTION); // resource_ can not adapt up since we have never reduced FPS. resource_->SetUsageState(ResourceUsageState::kUnderuse); @@ -423,7 +424,7 @@ TEST_F(ResourceAdaptationProcessorTest, } TEST_F(ResourceAdaptationProcessorTest, AdaptingTriggersOnAdaptationApplied) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -432,7 +433,7 @@ TEST_F(ResourceAdaptationProcessorTest, AdaptingTriggersOnAdaptationApplied) { TEST_F(ResourceAdaptationProcessorTest, AdaptsDownWhenOtherResourceIsAlwaysUnderused) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); other_resource_->SetUsageState(ResourceUsageState::kUnderuse); @@ -453,7 +454,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, TriggerOveruseNotOnAdaptationTaskQueue) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -467,7 +468,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, DestroyProcessorWhileResourceListenerDelegateHasTaskInFlight) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -491,7 +492,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, ResourceOveruseIgnoredWhenSignalledDuringRemoval) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -520,7 +521,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovingOnlyAdaptedResourceResetsAdaptation) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -537,7 +538,8 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovingMostLimitedResourceSetsAdaptationToNextLimitedLevel) { - processor_->OnDegradationPreferenceUpdated(DegradationPreference::BALANCED); + video_stream_adapter_->SetDegradationPreference( + DegradationPreference::BALANCED); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); other_resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -565,7 +567,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovingMostLimitedResourceSetsAdaptationIfInputStateUnchanged) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -602,7 +604,8 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovingResourceNotMostLimitedHasNoEffectOnLimitations) { - processor_->OnDegradationPreferenceUpdated(DegradationPreference::BALANCED); + video_stream_adapter_->SetDegradationPreference( + DegradationPreference::BALANCED); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); other_resource_->SetUsageState(ResourceUsageState::kOveruse); @@ -628,7 +631,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovingMostLimitedResourceAfterSwitchingDegradationPreferences) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -640,7 +643,7 @@ TEST_F(ResourceAdaptationProcessorTest, VideoAdaptationCounters next_limited_counters = restrictions_listener_.adaptation_counters(); - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_RESOLUTION); resource_->SetUsageState(ResourceUsageState::kOveruse); RestrictSource(restrictions_listener_.restrictions()); @@ -654,7 +657,7 @@ TEST_F(ResourceAdaptationProcessorTest, // After switching back to MAINTAIN_FRAMERATE, the next most limited settings // are restored. - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); EXPECT_EQ(next_limited_restrictions, restrictions_listener_.restrictions()); @@ -664,7 +667,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovingMostLimitedResourceSetsNextLimitationsInDisabled) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -679,7 +682,8 @@ TEST_F(ResourceAdaptationProcessorTest, RestrictSource(restrictions_listener_.restrictions()); EXPECT_EQ(2, restrictions_listener_.adaptation_counters().Total()); - processor_->OnDegradationPreferenceUpdated(DegradationPreference::DISABLED); + video_stream_adapter_->SetDegradationPreference( + DegradationPreference::DISABLED); // Revert to |other_resource_| when removing |resource_| even though the // current degradataion preference is disabled. @@ -687,7 +691,7 @@ TEST_F(ResourceAdaptationProcessorTest, // After switching back to MAINTAIN_FRAMERATE, the next most limited settings // are restored. - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); EXPECT_EQ(next_limited_restrictions, restrictions_listener_.restrictions()); EXPECT_EQ(next_limited_counters, @@ -699,7 +703,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovedResourceSignalsIgnoredByProcessor) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); @@ -713,7 +717,7 @@ TEST_F(ResourceAdaptationProcessorTest, TEST_F(ResourceAdaptationProcessorTest, RemovingResourceWhenMultipleMostLimtedHasNoEffect) { - processor_->OnDegradationPreferenceUpdated( + video_stream_adapter_->SetDegradationPreference( DegradationPreference::MAINTAIN_FRAMERATE); SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize); diff --git a/call/adaptation/video_stream_adapter.cc b/call/adaptation/video_stream_adapter.cc index 0cc03e48d6..51433efee4 100644 --- a/call/adaptation/video_stream_adapter.cc +++ b/call/adaptation/video_stream_adapter.cc @@ -151,6 +151,8 @@ const char* Adaptation::StatusToString(Adaptation::Status status) { return "kAwaitingPreviousAdaptation"; case Status::kInsufficientInput: return "kInsufficientInput"; + case Status::kAdaptationDisabled: + return "kAdaptationDisabled"; } } @@ -305,7 +307,6 @@ Adaptation VideoStreamAdapter::GetAdaptationUp( Adaptation VideoStreamAdapter::GetAdaptationUp() { RTC_DCHECK_RUN_ON(&sequence_checker_); - RTC_DCHECK_NE(degradation_preference_, DegradationPreference::DISABLED); VideoStreamInputState input_state = input_state_provider_->InputState(); ++adaptation_validation_id_; Adaptation adaptation = GetAdaptationUp(input_state); @@ -348,14 +349,12 @@ VideoStreamAdapter::RestrictionsOrState VideoStreamAdapter::GetAdaptationUpStep( return IncreaseFramerate(input_state, current_restrictions_); } case DegradationPreference::DISABLED: - RTC_NOTREACHED(); - return Adaptation::Status::kLimitReached; + return Adaptation::Status::kAdaptationDisabled; } } Adaptation VideoStreamAdapter::GetAdaptationDown() { RTC_DCHECK_RUN_ON(&sequence_checker_); - RTC_DCHECK_NE(degradation_preference_, DegradationPreference::DISABLED); VideoStreamInputState input_state = input_state_provider_->InputState(); ++adaptation_validation_id_; return RestrictionsOrStateToAdaptation(GetAdaptationDownStep(input_state), @@ -397,8 +396,7 @@ VideoStreamAdapter::GetAdaptationDownStep( return DecreaseFramerate(input_state, current_restrictions_); } case DegradationPreference::DISABLED: - RTC_NOTREACHED(); - return Adaptation::Status::kLimitReached; + return Adaptation::Status::kAdaptationDisabled; } } @@ -526,10 +524,11 @@ Adaptation VideoStreamAdapter::GetAdaptDownResolution() { VideoStreamInputState input_state = input_state_provider_->InputState(); switch (degradation_preference_) { case DegradationPreference::DISABLED: - case DegradationPreference::MAINTAIN_RESOLUTION: { - return Adaptation(adaptation_validation_id_, - Adaptation::Status::kLimitReached, input_state, false); - } + return RestrictionsOrStateToAdaptation( + Adaptation::Status::kAdaptationDisabled, input_state); + case DegradationPreference::MAINTAIN_RESOLUTION: + return RestrictionsOrStateToAdaptation(Adaptation::Status::kLimitReached, + input_state); case DegradationPreference::MAINTAIN_FRAMERATE: return GetAdaptationDown(); case DegradationPreference::BALANCED: { diff --git a/call/adaptation/video_stream_adapter.h b/call/adaptation/video_stream_adapter.h index f9202ea0d2..00a52a9ef5 100644 --- a/call/adaptation/video_stream_adapter.h +++ b/call/adaptation/video_stream_adapter.h @@ -74,6 +74,8 @@ class Adaptation final { kAwaitingPreviousAdaptation, // Not enough input. kInsufficientInput, + // Adaptation disabled via degradation preference. + kAdaptationDisabled, }; static const char* StatusToString(Status status); diff --git a/call/adaptation/video_stream_adapter_unittest.cc b/call/adaptation/video_stream_adapter_unittest.cc index 99b9e9c8df..86c53a96bc 100644 --- a/call/adaptation/video_stream_adapter_unittest.cc +++ b/call/adaptation/video_stream_adapter_unittest.cc @@ -794,15 +794,14 @@ TEST_F(VideoStreamAdapterTest, EXPECT_EQ(0, adaptation.counters().fps_adaptations); } -TEST_F( - VideoStreamAdapterTest, - GetAdaptDownResolutionReturnsLimitReachedInDisabledAndMaintainResolution) { +TEST_F(VideoStreamAdapterTest, + GetAdaptDownResolutionReturnsWithStatusInDisabledAndMaintainResolution) { adapter_.SetDegradationPreference(DegradationPreference::DISABLED); input_state_provider_.SetInputState(1280 * 720, 30, kDefaultMinPixelsPerFrame); - EXPECT_EQ(Adaptation::Status::kLimitReached, + EXPECT_EQ(Adaptation::Status::kAdaptationDisabled, adapter_.GetAdaptDownResolution().status()); - adapter_.SetDegradationPreference(DegradationPreference::DISABLED); + adapter_.SetDegradationPreference(DegradationPreference::MAINTAIN_RESOLUTION); EXPECT_EQ(Adaptation::Status::kLimitReached, adapter_.GetAdaptDownResolution().status()); } @@ -858,6 +857,19 @@ TEST_F(VideoStreamAdapterTest, EXPECT_EQ(1, adaptation.counters().fps_adaptations); } +TEST_F(VideoStreamAdapterTest, + AdaptationDisabledStatusAlwaysWhenDegradationPreferenceDisabled) { + adapter_.SetDegradationPreference(DegradationPreference::DISABLED); + input_state_provider_.SetInputState(1280 * 720, 30, + kDefaultMinPixelsPerFrame); + EXPECT_EQ(Adaptation::Status::kAdaptationDisabled, + adapter_.GetAdaptationDown().status()); + EXPECT_EQ(Adaptation::Status::kAdaptationDisabled, + adapter_.GetAdaptationUp().status()); + EXPECT_EQ(Adaptation::Status::kAdaptationDisabled, + adapter_.GetAdaptDownResolution().status()); +} + // Death tests. // Disabled on Android because death tests misbehave on Android, see // base/test/gtest_util.h. |