Unify AdaptationReason and AdaptReason enums.

Moves the unified AdaptationReason to the api/ folder.

Bug: webrtc:11392
Change-Id: I28782e82ef6cc3ca3b061f65b0bbdc3766df1f9c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/172583
Commit-Queue: Evan Shrubsole <eshr@google.com>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31084}
diff --git a/api/video/BUILD.gn b/api/video/BUILD.gn
index eb9e919..290c2f2 100644
--- a/api/video/BUILD.gn
+++ b/api/video/BUILD.gn
@@ -234,6 +234,7 @@
   sources = [
     "video_adaptation_counters.cc",
     "video_adaptation_counters.h",
+    "video_adaptation_reason.h",
   ]
 
   deps = [ "../../rtc_base:checks" ]
diff --git a/api/video/video_adaptation_reason.h b/api/video/video_adaptation_reason.h
new file mode 100644
index 0000000..3b7fc36
--- /dev/null
+++ b/api/video/video_adaptation_reason.h
@@ -0,0 +1,20 @@
+/*
+ *  Copyright (c) 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 API_VIDEO_VIDEO_ADAPTATION_REASON_H_
+#define API_VIDEO_VIDEO_ADAPTATION_REASON_H_
+
+namespace webrtc {
+
+enum class VideoAdaptationReason { kQuality, kCpu };
+
+}  // namespace webrtc
+
+#endif  // API_VIDEO_VIDEO_ADAPTATION_REASON_H_
diff --git a/api/video/video_stream_encoder_observer.h b/api/video/video_stream_encoder_observer.h
index ab889bc..e027755 100644
--- a/api/video/video_stream_encoder_observer.h
+++ b/api/video/video_stream_encoder_observer.h
@@ -16,6 +16,7 @@
 
 #include "absl/types/optional.h"
 #include "api/video/video_adaptation_counters.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video/video_bitrate_allocation.h"
 #include "api/video/video_codec_constants.h"
 #include "api/video_codecs/video_encoder.h"
@@ -39,14 +40,6 @@
 
 class VideoStreamEncoderObserver : public CpuOveruseMetricsObserver {
  public:
-  // TODO(nisse): There are too many enums to represent this. Besides
-  // this one, see AdaptationObserverInterface::AdaptReason and
-  // WebRtcVideoChannel::AdaptReason.
-  enum class AdaptationReason {
-    kCpu,
-    kQuality,
-  };
-
   struct AdaptationSettings {
     AdaptationSettings()
         : resolution_scaling_enabled(false), framerate_scaling_enabled(false) {}
@@ -90,7 +83,7 @@
       const std::vector<VideoStream>& streams) = 0;
 
   virtual void OnAdaptationChanged(
-      AdaptationReason reason,
+      VideoAdaptationReason reason,
       const VideoAdaptationCounters& cpu_steps,
       const VideoAdaptationCounters& quality_steps) = 0;
   virtual void ClearAdaptationStats() = 0;
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 0183a3a..3b97cac 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -83,6 +83,7 @@
     "../../api:array_view",
     "../../api:scoped_refptr",
     "../../api/video:encoded_image",
+    "../../api/video:video_adaptation",
     "../../api/video:video_bitrate_allocation",
     "../../api/video:video_bitrate_allocator_factory",
     "../../rtc_base:deprecation",
@@ -153,6 +154,7 @@
     "../../api/units:time_delta",
     "../../api/video:builtin_video_bitrate_allocator_factory",
     "../../api/video:encoded_frame",
+    "../../api/video:video_adaptation",
     "../../api/video:video_bitrate_allocator",
     "../../api/video:video_frame",
     "../../api/video:video_frame_i420",
@@ -303,6 +305,7 @@
     "..:module_api",
     "../../api/video:encoded_frame",
     "../../api/video:encoded_image",
+    "../../api/video:video_adaptation",
     "../../api/video:video_bitrate_allocation",
     "../../api/video:video_bitrate_allocator",
     "../../api/video_codecs:video_codecs_api",
@@ -914,6 +917,7 @@
       "../../api/task_queue:default_task_queue_factory",
       "../../api/test/video:function_video_factory",
       "../../api/video:builtin_video_bitrate_allocator_factory",
+      "../../api/video:video_adaptation",
       "../../api/video:video_bitrate_allocation",
       "../../api/video:video_bitrate_allocator",
       "../../api/video:video_bitrate_allocator_factory",
diff --git a/modules/video_coding/utility/quality_scaler.cc b/modules/video_coding/utility/quality_scaler.cc
index 7e55d31..c3d8b2e 100644
--- a/modules/video_coding/utility/quality_scaler.cc
+++ b/modules/video_coding/utility/quality_scaler.cc
@@ -13,6 +13,7 @@
 #include <memory>
 #include <utility>
 
+#include "api/video/video_adaptation_reason.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/experiments/quality_scaler_settings.h"
 #include "rtc_base/logging.h"
@@ -234,15 +235,14 @@
 void QualityScaler::ReportQpLow() {
   RTC_DCHECK_RUN_ON(&task_checker_);
   ClearSamples();
-  observer_->AdaptUp(AdaptationObserverInterface::AdaptReason::kQuality);
+  observer_->AdaptUp(VideoAdaptationReason::kQuality);
   adapt_called_ = true;
 }
 
 void QualityScaler::ReportQpHigh() {
   RTC_DCHECK_RUN_ON(&task_checker_);
 
-  if (observer_->AdaptDown(
-          AdaptationObserverInterface::AdaptReason::kQuality)) {
+  if (observer_->AdaptDown(VideoAdaptationReason::kQuality)) {
     ClearSamples();
   } else {
     adapt_failed_ = true;
diff --git a/modules/video_coding/utility/quality_scaler.h b/modules/video_coding/utility/quality_scaler.h
index 29d7ad7..d6fd599 100644
--- a/modules/video_coding/utility/quality_scaler.h
+++ b/modules/video_coding/utility/quality_scaler.h
@@ -17,6 +17,7 @@
 #include <memory>
 
 #include "absl/types/optional.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video_codecs/video_encoder.h"
 #include "rtc_base/experiments/quality_scaling_experiment.h"
 #include "rtc_base/numerics/moving_average.h"
@@ -35,16 +36,12 @@
 // stream.
 class AdaptationObserverInterface {
  public:
-  // Indicates if the adaptation is due to overuse of the CPU resources, or if
-  // the quality of the encoded frames have dropped too low.
-  enum AdaptReason : size_t { kQuality = 0, kCpu = 1 };
-  static const size_t kScaleReasonSize = 2;
   // Called to signal that we can handle larger or more frequent frames.
-  virtual void AdaptUp(AdaptReason reason) = 0;
+  virtual void AdaptUp(VideoAdaptationReason reason) = 0;
   // Called to signal that the source should reduce the resolution or framerate.
   // Returns false if a downgrade was requested but the request did not result
   // in a new limiting resolution or fps.
-  virtual bool AdaptDown(AdaptReason reason) = 0;
+  virtual bool AdaptDown(VideoAdaptationReason reason) = 0;
 
  protected:
   virtual ~AdaptationObserverInterface() {}
diff --git a/modules/video_coding/utility/quality_scaler_unittest.cc b/modules/video_coding/utility/quality_scaler_unittest.cc
index 6f16dc8..a000504 100644
--- a/modules/video_coding/utility/quality_scaler_unittest.cc
+++ b/modules/video_coding/utility/quality_scaler_unittest.cc
@@ -13,6 +13,7 @@
 #include <memory>
 #include <string>
 
+#include "api/video/video_adaptation_reason.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/event.h"
 #include "rtc_base/task_queue_for_test.h"
@@ -32,11 +33,11 @@
  public:
   virtual ~MockAdaptationObserver() {}
 
-  void AdaptUp(AdaptReason r) override {
+  void AdaptUp(VideoAdaptationReason r) override {
     adapt_up_events_++;
     event.Set();
   }
-  bool AdaptDown(AdaptReason r) override {
+  bool AdaptDown(VideoAdaptationReason r) override {
     adapt_down_events_++;
     event.Set();
     return true;
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 9d26ee2..f8ad66b 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -199,6 +199,7 @@
     "../api/task_queue:task_queue",
     "../api/units:data_rate",
     "../api/video:encoded_image",
+    "../api/video:video_adaptation",
     "../api/video:video_bitrate_allocation",
     "../api/video:video_bitrate_allocator",
     "../api/video:video_bitrate_allocator_factory",
@@ -548,6 +549,7 @@
       "../api/units:timestamp",
       "../api/video:builtin_video_bitrate_allocator_factory",
       "../api/video:encoded_image",
+      "../api/video:video_adaptation",
       "../api/video:video_bitrate_allocation",
       "../api/video:video_frame",
       "../api/video:video_frame_i420",
diff --git a/video/adaptation/encode_usage_resource.cc b/video/adaptation/encode_usage_resource.cc
index 385a8b9..45cba1a 100644
--- a/video/adaptation/encode_usage_resource.cc
+++ b/video/adaptation/encode_usage_resource.cc
@@ -13,6 +13,7 @@
 #include <limits>
 #include <utility>
 
+#include "api/video/video_adaptation_reason.h"
 #include "rtc_base/checks.h"
 
 namespace webrtc {
@@ -65,13 +66,13 @@
                                encode_duration_us);
 }
 
-void EncodeUsageResource::AdaptUp(AdaptReason reason) {
-  RTC_DCHECK_EQ(reason, AdaptReason::kCpu);
+void EncodeUsageResource::AdaptUp(VideoAdaptationReason reason) {
+  RTC_DCHECK_EQ(reason, VideoAdaptationReason::kCpu);
   OnResourceUsageStateMeasured(ResourceUsageState::kUnderuse);
 }
 
-bool EncodeUsageResource::AdaptDown(AdaptReason reason) {
-  RTC_DCHECK_EQ(reason, AdaptReason::kCpu);
+bool EncodeUsageResource::AdaptDown(VideoAdaptationReason reason) {
+  RTC_DCHECK_EQ(reason, VideoAdaptationReason::kCpu);
   return OnResourceUsageStateMeasured(ResourceUsageState::kOveruse) !=
          ResourceListenerResponse::kQualityScalerShouldIncreaseFrequency;
 }
diff --git a/video/adaptation/encode_usage_resource.h b/video/adaptation/encode_usage_resource.h
index e626c2f..6c1827d 100644
--- a/video/adaptation/encode_usage_resource.h
+++ b/video/adaptation/encode_usage_resource.h
@@ -15,6 +15,7 @@
 #include <string>
 
 #include "absl/types/optional.h"
+#include "api/video/video_adaptation_reason.h"
 #include "call/adaptation/resource.h"
 #include "modules/video_coding/utility/quality_scaler.h"
 #include "video/adaptation/overuse_frame_detector.h"
@@ -48,8 +49,8 @@
   // AdaptationObserverInterface implementation.
   // TODO(https://crbug.com/webrtc/11222, 11172): This resource also needs to
   // signal when its stable to support multi-stream aware modules.
-  void AdaptUp(AdaptReason reason) override;
-  bool AdaptDown(AdaptReason reason) override;
+  void AdaptUp(VideoAdaptationReason reason) override;
+  bool AdaptDown(VideoAdaptationReason reason) override;
 
   std::string name() const override { return "EncoderUsageResource"; }
 
diff --git a/video/adaptation/overuse_frame_detector.cc b/video/adaptation/overuse_frame_detector.cc
index 64b6768..abd6f95 100644
--- a/video/adaptation/overuse_frame_detector.cc
+++ b/video/adaptation/overuse_frame_detector.cc
@@ -20,6 +20,7 @@
 #include <string>
 #include <utility>
 
+#include "api/video/video_adaptation_reason.h"
 #include "api/video/video_frame.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
@@ -64,7 +65,7 @@
 const int kMinFramerate = 7;
 const int kMaxFramerate = 30;
 
-const auto kScaleReasonCpu = AdaptationObserverInterface::AdaptReason::kCpu;
+const auto kScaleReasonCpu = VideoAdaptationReason::kCpu;
 
 // Class for calculating the processing usage on the send-side (the average
 // processing time of a frame divided by the average time difference between
diff --git a/video/adaptation/overuse_frame_detector_unittest.cc b/video/adaptation/overuse_frame_detector_unittest.cc
index 5ace2f2..d3eeb53 100644
--- a/video/adaptation/overuse_frame_detector_unittest.cc
+++ b/video/adaptation/overuse_frame_detector_unittest.cc
@@ -14,6 +14,7 @@
 
 #include "api/video/encoded_image.h"
 #include "api/video/i420_buffer.h"
+#include "api/video/video_adaptation_reason.h"
 #include "modules/video_coding/utility/quality_scaler.h"
 #include "rtc_base/event.h"
 #include "rtc_base/fake_clock.h"
@@ -40,8 +41,8 @@
   MockCpuOveruseObserver() {}
   virtual ~MockCpuOveruseObserver() {}
 
-  MOCK_METHOD1(AdaptUp, void(AdaptReason));
-  MOCK_METHOD1(AdaptDown, bool(AdaptReason));
+  MOCK_METHOD1(AdaptUp, void(VideoAdaptationReason));
+  MOCK_METHOD1(AdaptDown, bool(VideoAdaptationReason));
 };
 
 class CpuOveruseObserverImpl : public AdaptationObserverInterface {
@@ -49,11 +50,11 @@
   CpuOveruseObserverImpl() : overuse_(0), normaluse_(0) {}
   virtual ~CpuOveruseObserverImpl() {}
 
-  bool AdaptDown(AdaptReason) override {
+  bool AdaptDown(VideoAdaptationReason) override {
     ++overuse_;
     return true;
   }
-  void AdaptUp(AdaptReason) override { ++normaluse_; }
+  void AdaptUp(VideoAdaptationReason) override { ++normaluse_; }
 
   int overuse_;
   int normaluse_;
@@ -235,7 +236,7 @@
   std::unique_ptr<OveruseFrameDetectorUnderTest> overuse_detector_;
   int encode_usage_percent_ = -1;
 
-  static const auto reason_ = AdaptationObserverInterface::AdaptReason::kCpu;
+  static const auto reason_ = VideoAdaptationReason::kCpu;
 };
 
 // UsagePercent() > high_encode_usage_threshold_percent => overuse.
diff --git a/video/adaptation/quality_scaler_resource.cc b/video/adaptation/quality_scaler_resource.cc
index 489c035..1d5f7dd 100644
--- a/video/adaptation/quality_scaler_resource.cc
+++ b/video/adaptation/quality_scaler_resource.cc
@@ -62,13 +62,13 @@
   }
 }
 
-void QualityScalerResource::AdaptUp(AdaptReason reason) {
-  RTC_DCHECK_EQ(reason, AdaptReason::kQuality);
+void QualityScalerResource::AdaptUp(VideoAdaptationReason reason) {
+  RTC_DCHECK_EQ(reason, VideoAdaptationReason::kQuality);
   OnResourceUsageStateMeasured(ResourceUsageState::kUnderuse);
 }
 
-bool QualityScalerResource::AdaptDown(AdaptReason reason) {
-  RTC_DCHECK_EQ(reason, AdaptReason::kQuality);
+bool QualityScalerResource::AdaptDown(VideoAdaptationReason reason) {
+  RTC_DCHECK_EQ(reason, VideoAdaptationReason::kQuality);
   return OnResourceUsageStateMeasured(ResourceUsageState::kOveruse) !=
          ResourceListenerResponse::kQualityScalerShouldIncreaseFrequency;
 }
diff --git a/video/adaptation/quality_scaler_resource.h b/video/adaptation/quality_scaler_resource.h
index 7708710..77bb606 100644
--- a/video/adaptation/quality_scaler_resource.h
+++ b/video/adaptation/quality_scaler_resource.h
@@ -14,6 +14,7 @@
 #include <memory>
 #include <string>
 
+#include "api/video/video_adaptation_reason.h"
 #include "api/video_codecs/video_encoder.h"
 #include "call/adaptation/resource.h"
 #include "modules/video_coding/utility/quality_scaler.h"
@@ -46,8 +47,8 @@
   // AdaptationObserverInterface implementation.
   // TODO(https://crbug.com/webrtc/11222, 11172): This resource also needs to
   // signal when its stable to support multi-stream aware modules.
-  void AdaptUp(AdaptReason reason) override;
-  bool AdaptDown(AdaptReason reason) override;
+  void AdaptUp(VideoAdaptationReason reason) override;
+  bool AdaptDown(VideoAdaptationReason reason) override;
 
   std::string name() const override { return "QualityScalerResource"; }
 
diff --git a/video/adaptation/resource_adaptation_processor.cc b/video/adaptation/resource_adaptation_processor.cc
index 26d1adc..440f96f 100644
--- a/video/adaptation/resource_adaptation_processor.cc
+++ b/video/adaptation/resource_adaptation_processor.cc
@@ -19,6 +19,7 @@
 #include "absl/algorithm/container.h"
 #include "absl/base/macros.h"
 #include "api/task_queue/task_queue_base.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video/video_source_interface.h"
 #include "call/adaptation/resource.h"
 #include "call/adaptation/video_source_restrictions.h"
@@ -93,13 +94,21 @@
   return counters;
 }
 
-VideoStreamEncoderObserver::AdaptationReason ToAdaptationReason(
-    AdaptationObserverInterface::AdaptReason reason) {
+std::string ToString(VideoAdaptationReason reason) {
   switch (reason) {
-    case AdaptationObserverInterface::kQuality:
-      return VideoStreamEncoderObserver::AdaptationReason::kQuality;
-    case AdaptationObserverInterface::kCpu:
-      return VideoStreamEncoderObserver::AdaptationReason::kCpu;
+    case VideoAdaptationReason::kQuality:
+      return "quality";
+    case VideoAdaptationReason::kCpu:
+      return "cpu";
+  }
+}
+
+VideoAdaptationReason OtherReason(VideoAdaptationReason reason) {
+  switch (reason) {
+    case VideoAdaptationReason::kQuality:
+      return VideoAdaptationReason::kCpu;
+    case VideoAdaptationReason::kCpu:
+      return VideoAdaptationReason::kQuality;
   }
 }
 
@@ -205,10 +214,8 @@
       active_counts_() {
   RTC_DCHECK(adaptation_listener_);
   RTC_DCHECK(encoder_stats_observer_);
-  AddResource(encode_usage_resource_.get(),
-              AdaptationObserverInterface::AdaptReason::kCpu);
-  AddResource(quality_scaler_resource_.get(),
-              AdaptationObserverInterface::AdaptReason::kQuality);
+  AddResource(encode_usage_resource_.get(), VideoAdaptationReason::kCpu);
+  AddResource(quality_scaler_resource_.get(), VideoAdaptationReason::kQuality);
 }
 
 ResourceAdaptationProcessor::~ResourceAdaptationProcessor() {
@@ -240,12 +247,11 @@
 }
 
 void ResourceAdaptationProcessor::AddResource(Resource* resource) {
-  return AddResource(resource, AdaptationObserverInterface::AdaptReason::kCpu);
+  return AddResource(resource, VideoAdaptationReason::kCpu);
 }
 
-void ResourceAdaptationProcessor::AddResource(
-    Resource* resource,
-    AdaptationObserverInterface::AdaptReason reason) {
+void ResourceAdaptationProcessor::AddResource(Resource* resource,
+                                              VideoAdaptationReason reason) {
   RTC_DCHECK(resource);
   RTC_DCHECK(absl::c_find_if(resources_,
                              [resource](const ResourceAndReason& r) {
@@ -268,7 +274,7 @@
   if (stream_adapter_->SetDegradationPreference(degradation_preference) ==
       VideoStreamAdapter::SetDegradationPreferenceResult::
           kRestrictionsCleared) {
-    active_counts_.fill(VideoAdaptationCounters());
+    ResetActiveCounts();
     encoder_stats_observer_->ClearAdaptationStats();
   }
   MaybeUpdateVideoSourceRestrictions();
@@ -305,7 +311,7 @@
 
 void ResourceAdaptationProcessor::ResetVideoSourceRestrictions() {
   stream_adapter_->ClearRestrictions();
-  active_counts_.fill(VideoAdaptationCounters());
+  ResetActiveCounts();
   encoder_stats_observer_->ClearAdaptationStats();
   MaybeUpdateVideoSourceRestrictions();
 }
@@ -317,12 +323,12 @@
 void ResourceAdaptationProcessor::OnFrameDroppedDueToSize() {
   VideoAdaptationCounters counters_before =
       stream_adapter_->adaptation_counters();
-  OnResourceOveruse(AdaptationObserverInterface::AdaptReason::kQuality);
+  OnResourceOveruse(VideoAdaptationReason::kQuality);
   if (degradation_preference() == DegradationPreference::BALANCED &&
       stream_adapter_->adaptation_counters().fps_adaptations >
           counters_before.fps_adaptations) {
     // Adapt framerate in same step as resolution.
-    OnResourceOveruse(AdaptationObserverInterface::AdaptReason::kQuality);
+    OnResourceOveruse(VideoAdaptationReason::kQuality);
   }
   if (stream_adapter_->adaptation_counters().resolution_adaptations >
       counters_before.resolution_adaptations) {
@@ -428,8 +434,7 @@
   RTC_DCHECK(registered_resource != resources_.end())
       << resource.name() << " not found.";
 
-  const AdaptationObserverInterface::AdaptReason reason =
-      registered_resource->reason;
+  const VideoAdaptationReason reason = registered_resource->reason;
   switch (resource.usage_state()) {
     case ResourceUsageState::kOveruse:
       return OnResourceOveruse(reason);
@@ -449,7 +454,7 @@
 }
 
 void ResourceAdaptationProcessor::OnResourceUnderuse(
-    AdaptationObserverInterface::AdaptReason reason) {
+    VideoAdaptationReason reason) {
   // We can't adapt up if we're already at the highest setting.
   // Note that this only includes counts relevant to the current degradation
   // preference. e.g. we previously adapted resolution, now prefer adpating fps,
@@ -489,7 +494,7 @@
 }
 
 ResourceListenerResponse ResourceAdaptationProcessor::OnResourceOveruse(
-    AdaptationObserverInterface::AdaptReason reason) {
+    VideoAdaptationReason reason) {
   if (!has_input_video_)
     return ResourceListenerResponse::kQualityScalerShouldIncreaseFrequency;
   // Update video input states and encoder settings for accurate adaptation.
@@ -643,22 +648,19 @@
   RTC_DCHECK_GE(other_active->fps_adaptations, 0);
 }
 
-// TODO(nisse): Delete, once AdaptReason and AdaptationReason are merged.
 void ResourceAdaptationProcessor::UpdateAdaptationStats(
-    AdaptationObserverInterface::AdaptReason reason) {
+    VideoAdaptationReason reason) {
   // Update active counts
   VideoAdaptationCounters& active_count = active_counts_[reason];
-  VideoAdaptationCounters& other_active = active_counts_[(reason + 1) % 2];
+  VideoAdaptationCounters& other_active = active_counts_[OtherReason(reason)];
   const VideoAdaptationCounters total_counts =
       stream_adapter_->adaptation_counters();
 
   OnAdaptationCountChanged(total_counts, &active_count, &other_active);
 
   encoder_stats_observer_->OnAdaptationChanged(
-      ToAdaptationReason(reason),
-      std::get<AdaptationObserverInterface::AdaptReason::kCpu>(active_counts_),
-      std::get<AdaptationObserverInterface::AdaptReason::kQuality>(
-          active_counts_));
+      reason, active_counts_[VideoAdaptationReason::kCpu],
+      active_counts_[VideoAdaptationReason::kQuality]);
 }
 
 void ResourceAdaptationProcessor::UpdateStatsAdaptationSettings() const {
@@ -710,9 +712,9 @@
   // TODO(https://crbug.com/webrtc/11392): See if we can rely on the total
   // counts or the stats, and not the active counts.
   const VideoAdaptationCounters& qp_counts =
-      std::get<AdaptationObserverInterface::kQuality>(active_counts_);
+      active_counts_[VideoAdaptationReason::kQuality];
   const VideoAdaptationCounters& cpu_counts =
-      std::get<AdaptationObserverInterface::kCpu>(active_counts_);
+      active_counts_[VideoAdaptationReason::kCpu];
   if (try_quality_rampup && qp_counts.resolution_adaptations > 0 &&
       cpu_counts.Total() == 0) {
     RTC_LOG(LS_INFO) << "Reset quality limitations.";
@@ -721,18 +723,25 @@
   }
 }
 
+void ResourceAdaptationProcessor::ResetActiveCounts() {
+  active_counts_.clear();
+  active_counts_[VideoAdaptationReason::kCpu] = VideoAdaptationCounters();
+  active_counts_[VideoAdaptationReason::kQuality] = VideoAdaptationCounters();
+}
+
 std::string ResourceAdaptationProcessor::ActiveCountsToString() const {
+  RTC_DCHECK_EQ(2, active_counts_.size());
   rtc::StringBuilder ss;
 
   ss << "Downgrade counts: fps: {";
-  for (size_t reason = 0; reason < active_counts_.size(); ++reason) {
-    ss << (reason ? " cpu" : "quality") << ":";
-    ss << active_counts_[reason].fps_adaptations;
+  for (auto& reason_count : active_counts_) {
+    ss << ToString(reason_count.first) << ":";
+    ss << reason_count.second.fps_adaptations;
   }
   ss << "}, resolution {";
-  for (size_t reason = 0; reason < active_counts_.size(); ++reason) {
-    ss << (reason ? " cpu" : "quality") << ":";
-    ss << active_counts_[reason].resolution_adaptations;
+  for (auto& reason_count : active_counts_) {
+    ss << ToString(reason_count.first) << ":";
+    ss << reason_count.second.resolution_adaptations;
   }
   ss << "}";
 
diff --git a/video/adaptation/resource_adaptation_processor.h b/video/adaptation/resource_adaptation_processor.h
index aaaf5fb..922c624 100644
--- a/video/adaptation/resource_adaptation_processor.h
+++ b/video/adaptation/resource_adaptation_processor.h
@@ -14,12 +14,14 @@
 #include <map>
 #include <memory>
 #include <string>
+#include <unordered_map>
 #include <utility>
 #include <vector>
 
 #include "absl/types/optional.h"
 #include "api/rtp_parameters.h"
 #include "api/video/video_adaptation_counters.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video/video_frame.h"
 #include "api/video/video_source_interface.h"
 #include "api/video/video_stream_encoder_observer.h"
@@ -78,8 +80,7 @@
   void StopResourceAdaptation() override;
   // Uses a default AdaptReason of kCpu.
   void AddResource(Resource* resource) override;
-  void AddResource(Resource* resource,
-                   AdaptationObserverInterface::AdaptReason reason);
+  void AddResource(Resource* resource, VideoAdaptationReason reason);
   void SetHasInputVideo(bool has_input_video) override;
   void SetDegradationPreference(
       DegradationPreference degradation_preference) override;
@@ -134,9 +135,8 @@
 
   // Performs the adaptation by getting the next target, applying it and
   // informing listeners of the new VideoSourceRestriction and adapt counters.
-  void OnResourceUnderuse(AdaptationObserverInterface::AdaptReason reason);
-  ResourceListenerResponse OnResourceOveruse(
-      AdaptationObserverInterface::AdaptReason reason);
+  void OnResourceUnderuse(VideoAdaptationReason reason);
+  ResourceListenerResponse OnResourceOveruse(VideoAdaptationReason reason);
 
   CpuOveruseOptions GetCpuOveruseOptions() const;
   int LastInputFrameSizeOrDefault() const;
@@ -154,7 +154,7 @@
   void UpdateQualityScalerSettings(
       absl::optional<VideoEncoder::QpThresholds> qp_thresholds);
 
-  void UpdateAdaptationStats(AdaptationObserverInterface::AdaptReason reason);
+  void UpdateAdaptationStats(VideoAdaptationReason reason);
   void UpdateStatsAdaptationSettings() const;
 
   // Checks to see if we should execute the quality rampup experiment. The
@@ -165,6 +165,7 @@
   void MaybePerformQualityRampupExperiment();
   void ResetVideoSourceRestrictions();
 
+  void ResetActiveCounts();
   std::string ActiveCountsToString() const;
 
   ResourceAdaptationProcessorListener* const adaptation_listener_;
@@ -199,13 +200,12 @@
   // Ties a resource to a reason for statistical reporting. This AdaptReason is
   // also used by this module to make decisions about how to adapt up/down.
   struct ResourceAndReason {
-    ResourceAndReason(Resource* resource,
-                      AdaptationObserverInterface::AdaptReason reason)
+    ResourceAndReason(Resource* resource, VideoAdaptationReason reason)
         : resource(resource), reason(reason) {}
     virtual ~ResourceAndReason() = default;
 
     Resource* const resource;
-    const AdaptationObserverInterface::AdaptReason reason;
+    const VideoAdaptationReason reason;
   };
   std::vector<ResourceAndReason> resources_;
   // One AdaptationCounter for each reason, tracking the number of times we have
@@ -215,8 +215,7 @@
   // encoder_stats_observer_; Counters used for deciding if the video resolution
   // or framerate is currently restricted, and if so, why, on a per degradation
   // preference basis.
-  std::array<VideoAdaptationCounters,
-             AdaptationObserverInterface::kScaleReasonSize>
+  std::unordered_map<VideoAdaptationReason, VideoAdaptationCounters>
       active_counts_;
 };
 
diff --git a/video/adaptation/video_stream_adapter.cc b/video/adaptation/video_stream_adapter.cc
index 6aef432..566f67d 100644
--- a/video/adaptation/video_stream_adapter.cc
+++ b/video/adaptation/video_stream_adapter.cc
@@ -15,6 +15,7 @@
 #include <utility>
 
 #include "absl/types/optional.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video_codecs/video_encoder.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/logging.h"
@@ -385,7 +386,7 @@
 }
 
 Adaptation VideoStreamAdapter::GetAdaptationUp(
-    AdaptationObserverInterface::AdaptReason reason) const {
+    VideoAdaptationReason reason) const {
   // Don't adapt if we don't have sufficient input.
   if (input_mode_ == VideoInputMode::kNoVideo) {
     return Adaptation(adaptation_validation_id_,
@@ -403,7 +404,7 @@
   }
   // Don't adapt if BalancedDegradationSettings applies and determines this will
   // exceed bitrate constraints.
-  if (reason == AdaptationObserverInterface::AdaptReason::kQuality &&
+  if (reason == VideoAdaptationReason::kQuality &&
       EffectiveDegradationPreference() == DegradationPreference::BALANCED &&
       !balanced_settings_.CanAdaptUp(
           GetVideoCodecTypeOrGeneric(encoder_settings_), input_pixels_,
@@ -426,7 +427,7 @@
       }
       // Fall-through to maybe-adapting resolution, unless |balanced_settings_|
       // forbids it based on bitrate.
-      if (reason == AdaptationObserverInterface::AdaptReason::kQuality &&
+      if (reason == VideoAdaptationReason::kQuality &&
           !balanced_settings_.CanAdaptUpResolution(
               GetVideoCodecTypeOrGeneric(encoder_settings_), input_pixels_,
               encoder_target_bitrate_bps_.value_or(0))) {
@@ -439,7 +440,7 @@
     case DegradationPreference::MAINTAIN_FRAMERATE: {
       // Don't adapt resolution if CanAdaptUpResolution() forbids it based on
       // bitrate and limits specified by encoder capabilities.
-      if (reason == AdaptationObserverInterface::AdaptReason::kQuality &&
+      if (reason == VideoAdaptationReason::kQuality &&
           !CanAdaptUpResolution(encoder_settings_, encoder_target_bitrate_bps_,
                                 input_pixels_)) {
         return Adaptation(adaptation_validation_id_,
diff --git a/video/adaptation/video_stream_adapter.h b/video/adaptation/video_stream_adapter.h
index 073b5ab..30f95d0 100644
--- a/video/adaptation/video_stream_adapter.h
+++ b/video/adaptation/video_stream_adapter.h
@@ -16,6 +16,7 @@
 #include "absl/types/optional.h"
 #include "api/rtp_parameters.h"
 #include "api/video/video_adaptation_counters.h"
+#include "api/video/video_adaptation_reason.h"
 #include "call/adaptation/encoder_settings.h"
 #include "call/adaptation/resource.h"
 #include "call/adaptation/video_source_restrictions.h"
@@ -160,8 +161,7 @@
 
   // Returns an adaptation that we are guaranteed to be able to apply, or a
   // status code indicating the reason why we cannot adapt.
-  Adaptation GetAdaptationUp(
-      AdaptationObserverInterface::AdaptReason reason) const;
+  Adaptation GetAdaptationUp(VideoAdaptationReason reason) const;
   Adaptation GetAdaptationDown() const;
   // Returns the restrictions that result from applying the adaptation, without
   // actually applying it. If the adaptation is not valid, current restrictions
diff --git a/video/adaptation/video_stream_adapter_unittest.cc b/video/adaptation/video_stream_adapter_unittest.cc
index 46f662b..c85446b 100644
--- a/video/adaptation/video_stream_adapter_unittest.cc
+++ b/video/adaptation/video_stream_adapter_unittest.cc
@@ -14,6 +14,7 @@
 #include <utility>
 
 #include "absl/types/optional.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video_codecs/video_codec.h"
 #include "api/video_codecs/video_encoder.h"
 #include "api/video_codecs/video_encoder_config.h"
@@ -31,7 +32,7 @@
 
 // GetAdaptationUp() requires an AdaptReason. This is only used in edge cases,
 // so most tests don't care what reason is used.
-const auto kReasonDontCare = AdaptationObserverInterface::AdaptReason::kQuality;
+const auto kReasonDontCare = VideoAdaptationReason::kQuality;
 
 const int kBalancedHighResolutionPixels = 1280 * 720;
 const int kBalancedHighFrameRateFps = 30;
@@ -636,11 +637,8 @@
   // TODO(hbos): Why would the reason matter? If the signal was kCpu then the
   // current code allows us to violate this bitrate constraint. This does not
   // make any sense: either we are limited or we are not, end of story.
-  EXPECT_EQ(
-      Adaptation::Status::kIsBitrateConstrained,
-      adapter
-          .GetAdaptationUp(AdaptationObserverInterface::AdaptReason::kQuality)
-          .status());
+  EXPECT_EQ(Adaptation::Status::kIsBitrateConstrained,
+            adapter.GetAdaptationUp(VideoAdaptationReason::kQuality).status());
 }
 
 TEST(VideoStreamAdapterTest, PeekNextRestrictions) {
diff --git a/video/send_statistics_proxy.cc b/video/send_statistics_proxy.cc
index b973275..1cb059d 100644
--- a/video/send_statistics_proxy.cc
+++ b/video/send_statistics_proxy.cc
@@ -1098,7 +1098,7 @@
 }
 
 void SendStatisticsProxy::OnAdaptationChanged(
-    AdaptationReason reason,
+    VideoAdaptationReason reason,
     const VideoAdaptationCounters& cpu_counters,
     const VideoAdaptationCounters& quality_counters) {
   rtc::CritScope lock(&crit_);
@@ -1107,10 +1107,10 @@
   adaptations_.set_cpu_counts(cpu_counters);
   adaptations_.set_quality_counts(quality_counters);
   switch (reason) {
-    case AdaptationReason::kCpu:
+    case VideoAdaptationReason::kCpu:
       ++stats_.number_of_cpu_adapt_changes;
       break;
-    case AdaptationReason::kQuality:
+    case VideoAdaptationReason::kQuality:
       TryUpdateInitialQualityResolutionAdaptUp(
           receiver.resolution_adaptations,
           adaptations_.MaskedQualityCounts().resolution_adaptations);
diff --git a/video/send_statistics_proxy.h b/video/send_statistics_proxy.h
index 1bd79d8..08717ca 100644
--- a/video/send_statistics_proxy.h
+++ b/video/send_statistics_proxy.h
@@ -71,7 +71,7 @@
 
   // Adaptation stats.
   void OnAdaptationChanged(
-      AdaptationReason reason,
+      VideoAdaptationReason reason,
       const VideoAdaptationCounters& cpu_counters,
       const VideoAdaptationCounters& quality_counters) override;
   void ClearAdaptationStats() override;
diff --git a/video/send_statistics_proxy_unittest.cc b/video/send_statistics_proxy_unittest.cc
index aad9b3d..b69dfad 100644
--- a/video/send_statistics_proxy_unittest.cc
+++ b/video/send_statistics_proxy_unittest.cc
@@ -18,6 +18,7 @@
 
 #include "absl/algorithm/container.h"
 #include "api/units/timestamp.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video/video_bitrate_allocation.h"
 #include "api/video/video_codec_type.h"
 #include "api/video_codecs/video_codec.h"
@@ -449,31 +450,27 @@
   cpu_counts.fps_adaptations = 1;
   cpu_counts.resolution_adaptations = 0;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
   cpu_counts.fps_adaptations = 0;
   cpu_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
   EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
   cpu_counts.fps_adaptations = 1;
   statistics_proxy_->UpdateAdaptationSettings(kResolutionScalingDisabled,
                                               kResolutionScalingDisabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
   statistics_proxy_->UpdateAdaptationSettings(kScalingDisabled,
                                               kScalingDisabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
 }
@@ -486,31 +483,27 @@
   quality_counts.fps_adaptations = 1;
   quality_counts.resolution_adaptations = 0;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
   quality_counts.fps_adaptations = 0;
   quality_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
   EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
   quality_counts.fps_adaptations = 1;
   statistics_proxy_->UpdateAdaptationSettings(kResolutionScalingDisabled,
                                               kResolutionScalingDisabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
   statistics_proxy_->UpdateAdaptationSettings(kScalingDisabled,
                                               kScalingDisabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
 }
@@ -522,17 +515,15 @@
   EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
 
   cpu_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
   EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
   EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
 
   cpu_counts.resolution_adaptations = 2;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
   EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
   EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
@@ -546,17 +537,15 @@
   EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
 
   quality_counts.fps_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
   EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
 
   quality_counts.fps_adaptations = 0;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
   EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
@@ -571,21 +560,17 @@
   EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
 
   quality_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   quality_counts.fps_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   cpu_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   cpu_counts.fps_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   // We have 1 fps and resolution reduction for both cpu and quality
   EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
   EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
@@ -686,9 +671,8 @@
   VideoAdaptationCounters quality_counts;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
   // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(10000);
   statistics_proxy_.reset();
   EXPECT_METRIC_EQ(
@@ -705,9 +689,8 @@
   VideoAdaptationCounters quality_counts;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
   // Adapt changes: 1 (1 initial) = 0, elapsed time: 10 sec => 0 per minute.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnInitialQualityResolutionAdaptDown();
   fake_clock_.AdvanceTimeMilliseconds(10000);
   statistics_proxy_.reset();
@@ -726,19 +709,16 @@
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
   // Adapt changes: 3 (2 initial) = 1, elapsed time: 10 sec => 6 per minute.
   quality_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnInitialQualityResolutionAdaptDown();
   quality_counts.resolution_adaptations = 2;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnInitialQualityResolutionAdaptDown();
   quality_counts.resolution_adaptations = 3;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(10000);
   statistics_proxy_.reset();
   EXPECT_METRIC_EQ(
@@ -755,9 +735,8 @@
   VideoAdaptationCounters quality_counts;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
   // Adapt changes: 1 (2 initial) = 1, elapsed time: 10 sec => 6 per minute.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnInitialQualityResolutionAdaptDown();
   statistics_proxy_->OnInitialQualityResolutionAdaptDown();
   fake_clock_.AdvanceTimeMilliseconds(10000);
@@ -778,39 +757,31 @@
   statistics_proxy_->ClearAdaptationStats();
   // Adapt changes: 8 (4 initial) = 4, elapsed time: 10 sec => 24 per minute.
   quality_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnInitialQualityResolutionAdaptDown();
   quality_counts.resolution_adaptations = 2;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnInitialQualityResolutionAdaptDown();
   quality_counts.resolution_adaptations = 3;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   quality_counts.fps_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   quality_counts.fps_adaptations = 0;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   quality_counts.resolution_adaptations = 2;  // Initial resolution up.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   quality_counts.resolution_adaptations = 1;  // Initial resolution up.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   quality_counts.resolution_adaptations = 0;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
 
   fake_clock_.AdvanceTimeMilliseconds(10000);
   statistics_proxy_.reset();
@@ -840,13 +811,11 @@
   statistics_proxy_->UpdateAdaptationSettings(kResolutionScalingDisabled,
                                               kResolutionScalingDisabled);
   fake_clock_.AdvanceTimeMilliseconds(9000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(6000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
 
   // Disable quality adaptation.
   statistics_proxy_->UpdateAdaptationSettings(kScalingDisabled,
@@ -858,9 +827,8 @@
   quality_counts.resolution_adaptations = 0;
   statistics_proxy_->UpdateAdaptationSettings(kFramerateScalingDisabled,
                                               kFramerateScalingDisabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(10000);
 
   // Disable quality adaptation.
@@ -908,12 +876,10 @@
   // Adapt changes: 2, elapsed time: 20 sec.
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
   fake_clock_.AdvanceTimeMilliseconds(20000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
 
   // Suspend and resume video.
   statistics_proxy_->OnSuspendChange(true);
@@ -921,9 +887,8 @@
   statistics_proxy_->OnSuspendChange(false);
 
   // Adapt changes: 1, elapsed time: 10 sec.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(10000);
 
   // Adapt changes: 3, elapsed time: 30 sec => 6 per minute.
@@ -948,9 +913,8 @@
   // Adapt changes: 1, elapsed time: 20 sec.
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
   fake_clock_.AdvanceTimeMilliseconds(10000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   // Video not suspended, stats time already started.
   statistics_proxy_->OnSuspendChange(false);
@@ -973,9 +937,8 @@
   cpu_counts.resolution_adaptations = 0;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
   fake_clock_.AdvanceTimeMilliseconds(10000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   // Adapt changes: 2, elapsed time: 30 sec => 4 per minute.
   statistics_proxy_.reset();
@@ -1002,9 +965,8 @@
   // Adapt changes: 1, elapsed time: 10 sec.
   statistics_proxy_->OnSuspendChange(false);
   fake_clock_.AdvanceTimeMilliseconds(10000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
   statistics_proxy_.reset();
@@ -1025,9 +987,8 @@
 
   // Adapt changes: 1, elapsed time: 10 sec.
   fake_clock_.AdvanceTimeMilliseconds(10000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   UpdateDataCounters(kFirstSsrc);
 
   // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
@@ -1061,9 +1022,8 @@
 
   // Adapt changes: 1, elapsed time: 20 sec.
   fake_clock_.AdvanceTimeMilliseconds(10000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   // Adapt changes: 1, elapsed time: 20 sec => 3 per minute.
   statistics_proxy_.reset();
@@ -1082,13 +1042,11 @@
                                               kScalingDisabled);
 
   // Adapt changes: 2, elapsed time: 15 sec => 8 per minute.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(6000);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(9000);
 
   // Switch content type, real-time stats should be updated.
@@ -1108,18 +1066,14 @@
                                               kScalingDisabled);
 
   // Adapt changes: 4, elapsed time: 120 sec => 2 per minute.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(120000);
 
   statistics_proxy_.reset();
@@ -1141,9 +1095,8 @@
 
   cpu_counts.resolution_adaptations = 1;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   EXPECT_EQ(QualityLimitationReason::kCpu,
             statistics_proxy_->GetStats().quality_limitation_reason);
@@ -1157,9 +1110,8 @@
   cpu_counts.fps_adaptations = 1;
 
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   EXPECT_EQ(QualityLimitationReason::kCpu,
             statistics_proxy_->GetStats().quality_limitation_reason);
@@ -1173,9 +1125,8 @@
   quality_counts.resolution_adaptations = 1;
 
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
 
   EXPECT_EQ(QualityLimitationReason::kBandwidth,
             statistics_proxy_->GetStats().quality_limitation_reason);
@@ -1189,9 +1140,8 @@
   quality_counts.fps_adaptations = 1;
 
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
 
   EXPECT_EQ(QualityLimitationReason::kBandwidth,
             statistics_proxy_->GetStats().quality_limitation_reason);
@@ -1208,9 +1158,8 @@
 
   // Even if the last adaptation reason is kCpu, if the counters indicate being
   // both CPU and quality (=bandwidth) limited, kBandwidth takes precedence.
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   EXPECT_EQ(QualityLimitationReason::kBandwidth,
             statistics_proxy_->GetStats().quality_limitation_reason);
@@ -1224,14 +1173,12 @@
   // due to "none" being the default value.
   cpu_counts.resolution_adaptations = 1;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   // Go back to not being limited.
   cpu_counts.resolution_adaptations = 0;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   EXPECT_EQ(QualityLimitationReason::kNone,
             statistics_proxy_->GetStats().quality_limitation_reason);
@@ -1246,23 +1193,20 @@
   fake_clock_.AdvanceTimeMilliseconds(3000);
   // CPU limited for 2000 ms
   cpu_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(2000);
   // Bandwidth limited for 1000 ms
   cpu_counts.resolution_adaptations = 0;
   quality_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(1000);
   // CPU limited for another 2000 ms
   cpu_counts.resolution_adaptations = 1;
   quality_counts.resolution_adaptations = 0;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
   fake_clock_.AdvanceTimeMilliseconds(2000);
 
   auto quality_limitation_durations_ms =
@@ -1687,9 +1631,8 @@
     statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
 
   cpu_counts.resolution_adaptations = 1;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kCpu, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kCpu,
+                                         cpu_counts, quality_counts);
 
   for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
     statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
@@ -2110,9 +2053,8 @@
   VideoAdaptationCounters quality_counts;
   quality_counts.resolution_adaptations = kDownscales;
   statistics_proxy_->UpdateAdaptationSettings(kScalingEnabled, kScalingEnabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   EncodedImage encoded_image;
   encoded_image.SetSpatialIndex(0);
   for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
@@ -2159,17 +2101,15 @@
   quality_counts.resolution_adaptations = 1;
   statistics_proxy_->UpdateAdaptationSettings(kFramerateScalingDisabled,
                                               kFramerateScalingDisabled);
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
   EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
 
   // Adapt up.
   quality_counts.resolution_adaptations = 0;
-  statistics_proxy_->OnAdaptationChanged(
-      VideoStreamEncoderObserver::AdaptationReason::kQuality, cpu_counts,
-      quality_counts);
+  statistics_proxy_->OnAdaptationChanged(VideoAdaptationReason::kQuality,
+                                         cpu_counts, quality_counts);
   statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
   EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
 
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index 6ce392f..38665d8 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -21,6 +21,7 @@
 #include "absl/types/optional.h"
 #include "api/video/encoded_image.h"
 #include "api/video/i420_buffer.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video/video_bitrate_allocator_factory.h"
 #include "api/video/video_codec_constants.h"
 #include "api/video_codecs/video_encoder.h"
@@ -1917,7 +1918,7 @@
 }
 void VideoStreamEncoder::InjectAdaptationResource(
     Resource* resource,
-    AdaptationObserverInterface::AdaptReason reason) {
+    VideoAdaptationReason reason) {
   resource_adaptation_processor_->AddResource(resource, reason);
 }
 
diff --git a/video/video_stream_encoder.h b/video/video_stream_encoder.h
index 4963fb8..1d2dda1 100644
--- a/video/video_stream_encoder.h
+++ b/video/video_stream_encoder.h
@@ -112,7 +112,7 @@
   // Used for injected test resources.
   // TODO(eshr): Move all adaptation tests out of VideoStreamEncoder tests.
   void InjectAdaptationResource(Resource* resource,
-                                AdaptationObserverInterface::AdaptReason reason)
+                                VideoAdaptationReason reason)
       RTC_RUN_ON(&encoder_queue_);
 
  private:
diff --git a/video/video_stream_encoder_unittest.cc b/video/video_stream_encoder_unittest.cc
index d3baa37..44ac6e1 100644
--- a/video/video_stream_encoder_unittest.cc
+++ b/video/video_stream_encoder_unittest.cc
@@ -21,6 +21,7 @@
 #include "api/test/mock_video_encoder.h"
 #include "api/video/builtin_video_bitrate_allocator_factory.h"
 #include "api/video/i420_buffer.h"
+#include "api/video/video_adaptation_reason.h"
 #include "api/video/video_bitrate_allocation.h"
 #include "api/video_codecs/video_encoder.h"
 #include "api/video_codecs/vp8_temporal_layers.h"
@@ -48,7 +49,7 @@
 
 namespace webrtc {
 
-using ScaleReason = AdaptationObserverInterface::AdaptReason;
+using ScaleReason = VideoAdaptationReason;
 using ::testing::_;
 using ::testing::AllOf;
 using ::testing::Field;
@@ -164,20 +165,18 @@
         fake_quality_resource_(
             std::make_unique<FakeResource>(ResourceUsageState::kStable,
                                            "FakeResource[QP]")) {
-    InjectAdaptationResource(
-        fake_quality_resource_.get(),
-        AdaptationObserverInterface::AdaptReason::kQuality);
+    InjectAdaptationResource(fake_quality_resource_.get(),
+                             VideoAdaptationReason::kQuality);
     InjectAdaptationResource(fake_cpu_resource_.get(),
-                             AdaptationObserverInterface::AdaptReason::kCpu);
+                             VideoAdaptationReason::kCpu);
   }
 
-  void PostTaskAndWait(bool down,
-                       AdaptationObserverInterface::AdaptReason reason) {
+  void PostTaskAndWait(bool down, VideoAdaptationReason reason) {
     PostTaskAndWait(down, reason, /*expected_results=*/true);
   }
 
   void PostTaskAndWait(bool down,
-                       AdaptationObserverInterface::AdaptReason reason,
+                       VideoAdaptationReason reason,
                        bool expected_results) {
     rtc::Event event;
     encoder_queue()->PostTask([this, &event, reason, down, expected_results] {
@@ -186,10 +185,10 @@
 
       FakeResource* resource = nullptr;
       switch (reason) {
-        case AdaptationObserverInterface::kQuality:
+        case VideoAdaptationReason::kQuality:
           resource = fake_quality_resource_.get();
           break;
-        case AdaptationObserverInterface::kCpu:
+        case VideoAdaptationReason::kCpu:
           resource = fake_cpu_resource_.get();
           break;
         default:
@@ -198,7 +197,7 @@
 
       resource->set_usage_state(usage_state);
       if (!expected_results) {
-        ASSERT_EQ(AdaptationObserverInterface::kQuality, reason)
+        ASSERT_EQ(VideoAdaptationReason::kQuality, reason)
             << "We can only assert adaptation result for quality resources";
         EXPECT_EQ(
             ResourceListenerResponse::kQualityScalerShouldIncreaseFrequency,
@@ -222,29 +221,24 @@
   }
 
   void TriggerCpuOveruse() {
-    PostTaskAndWait(/*down=*/true,
-                    AdaptationObserverInterface::AdaptReason::kCpu);
+    PostTaskAndWait(/*down=*/true, VideoAdaptationReason::kCpu);
   }
 
   void TriggerCpuNormalUsage() {
-    PostTaskAndWait(/*down=*/false,
-                    AdaptationObserverInterface::AdaptReason::kCpu);
+    PostTaskAndWait(/*down=*/false, VideoAdaptationReason::kCpu);
   }
 
   void TriggerQualityLow() {
-    PostTaskAndWait(/*down=*/true,
-                    AdaptationObserverInterface::AdaptReason::kQuality);
+    PostTaskAndWait(/*down=*/true, VideoAdaptationReason::kQuality);
   }
 
   void TriggerQualityLowExpectFalse() {
-    PostTaskAndWait(/*down=*/true,
-                    AdaptationObserverInterface::AdaptReason::kQuality,
+    PostTaskAndWait(/*down=*/true, VideoAdaptationReason::kQuality,
                     /*expected_results=*/false);
   }
 
   void TriggerQualityHigh() {
-    PostTaskAndWait(/*down=*/false,
-                    AdaptationObserverInterface::AdaptReason::kQuality);
+    PostTaskAndWait(/*down=*/false, VideoAdaptationReason::kQuality);
   }
 
   CpuOveruseDetectorProxy* overuse_detector_proxy_;