Fix bad license header style from CRLF to LF.

Bug: webrtc:13227
Change-Id: I39a83c7ba7ad69ee7dbbd53758d45d0b3c3b5b12
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/233884
Commit-Queue: Evan Shrubsole <eshr@webrtc.org>
Reviewed-by: Evan Shrubsole <eshr@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35189}
diff --git a/modules/video_coding/utility/bandwidth_quality_scaler.cc b/modules/video_coding/utility/bandwidth_quality_scaler.cc
index 0d6501a..7632100 100644
--- a/modules/video_coding/utility/bandwidth_quality_scaler.cc
+++ b/modules/video_coding/utility/bandwidth_quality_scaler.cc
@@ -1,150 +1,150 @@
-/*

- *  Copyright 2021 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 "modules/video_coding/utility/bandwidth_quality_scaler.h"

-

-#include <algorithm>

-#include <memory>

-#include <utility>

-#include <vector>

-

-#include "api/video/video_adaptation_reason.h"

-#include "api/video_codecs/video_encoder.h"

-#include "rtc_base/checks.h"

-#include "rtc_base/experiments/bandwidth_quality_scaler_settings.h"

-#include "rtc_base/logging.h"

-#include "rtc_base/numerics/exp_filter.h"

-#include "rtc_base/task_queue.h"

-#include "rtc_base/task_utils/to_queued_task.h"

-#include "rtc_base/time_utils.h"

-#include "rtc_base/weak_ptr.h"

-

-namespace webrtc {

-

-namespace {

-

-constexpr int kDefaultMaxWindowSizeMs = 5000;

-constexpr float kHigherMaxBitrateTolerationFactor = 0.95;

-constexpr float kLowerMinBitrateTolerationFactor = 0.8;

-constexpr int kDefaultBitrateStateUpdateIntervalSeconds = 5;

-}  // namespace

-

-BandwidthQualityScaler::BandwidthQualityScaler(

-    BandwidthQualityScalerUsageHandlerInterface* handler)

-    : kBitrateStateUpdateInterval(TimeDelta::Seconds(

-          BandwidthQualityScalerSettings::ParseFromFieldTrials()

-              .BitrateStateUpdateInterval()

-              .value_or(kDefaultBitrateStateUpdateIntervalSeconds))),

-      handler_(handler),

-      encoded_bitrate_(kDefaultMaxWindowSizeMs, RateStatistics::kBpsScale),

-      weak_ptr_factory_(this) {

-  RTC_DCHECK_RUN_ON(&task_checker_);

-  RTC_DCHECK(handler_ != nullptr);

-

-  StartCheckForBitrate();

-}

-

-BandwidthQualityScaler::~BandwidthQualityScaler() {

-  RTC_DCHECK_RUN_ON(&task_checker_);

-}

-

-void BandwidthQualityScaler::StartCheckForBitrate() {

-  RTC_DCHECK_RUN_ON(&task_checker_);

-  TaskQueueBase::Current()->PostDelayedTask(

-      ToQueuedTask([this_weak_ptr = weak_ptr_factory_.GetWeakPtr(), this] {

-        if (!this_weak_ptr) {

-          // The caller BandwidthQualityScaler has been deleted.

-          return;

-        }

-        RTC_DCHECK_RUN_ON(&task_checker_);

-        switch (CheckBitrate()) {

-          case BandwidthQualityScaler::CheckBitrateResult::kHighBitRate: {

-            handler_->OnReportUsageBandwidthHigh();

-            last_frame_size_pixels_.reset();

-            break;

-          }

-          case BandwidthQualityScaler::CheckBitrateResult::kLowBitRate: {

-            handler_->OnReportUsageBandwidthLow();

-            last_frame_size_pixels_.reset();

-            break;

-          }

-          case BandwidthQualityScaler::CheckBitrateResult::kNormalBitrate: {

-            break;

-          }

-          case BandwidthQualityScaler::CheckBitrateResult::

-              kInsufficientSamples: {

-            break;

-          }

-        }

-        StartCheckForBitrate();

-      }),

-      kBitrateStateUpdateInterval.ms());

-}

-

-void BandwidthQualityScaler::ReportEncodeInfo(int frame_size_bytes,

-                                              int64_t time_sent_in_ms,

-                                              uint32_t encoded_width,

-                                              uint32_t encoded_height) {

-  RTC_DCHECK_RUN_ON(&task_checker_);

-  last_time_sent_in_ms_ = time_sent_in_ms;

-  last_frame_size_pixels_ = encoded_width * encoded_height;

-  encoded_bitrate_.Update(frame_size_bytes, time_sent_in_ms);

-}

-

-void BandwidthQualityScaler::SetResolutionBitrateLimits(

-    const std::vector<VideoEncoder::ResolutionBitrateLimits>&

-        resolution_bitrate_limits) {

-  if (resolution_bitrate_limits.empty()) {

-    resolution_bitrate_limits_ = EncoderInfoSettings::

-        GetDefaultSinglecastBitrateLimitsWhenQpIsUntrusted();

-  } else {

-    resolution_bitrate_limits_ = resolution_bitrate_limits;

-  }

-}

-

-BandwidthQualityScaler::CheckBitrateResult

-BandwidthQualityScaler::CheckBitrate() {

-  RTC_DCHECK_RUN_ON(&task_checker_);

-  if (!last_frame_size_pixels_.has_value() ||

-      !last_time_sent_in_ms_.has_value()) {

-    return BandwidthQualityScaler::CheckBitrateResult::kInsufficientSamples;

-  }

-

-  absl::optional<int64_t> current_bitrate_bps =

-      encoded_bitrate_.Rate(last_time_sent_in_ms_.value());

-  if (!current_bitrate_bps.has_value()) {

-    // We can't get a valid bitrate due to not enough data points.

-    return BandwidthQualityScaler::CheckBitrateResult::kInsufficientSamples;

-  }

-  absl::optional<VideoEncoder::ResolutionBitrateLimits> suitable_bitrate_limit =

-      EncoderInfoSettings::

-          GetSinglecastBitrateLimitForResolutionWhenQpIsUntrusted(

-              last_frame_size_pixels_, resolution_bitrate_limits_);

-

-  if (!suitable_bitrate_limit.has_value()) {

-    return BandwidthQualityScaler::CheckBitrateResult::kInsufficientSamples;

-  }

-

-  // Multiply by toleration factor to solve the frequent adaptation due to

-  // critical value.

-  if (current_bitrate_bps > suitable_bitrate_limit->max_bitrate_bps *

-                                kHigherMaxBitrateTolerationFactor) {

-    return BandwidthQualityScaler::CheckBitrateResult::kLowBitRate;

-  } else if (current_bitrate_bps <

-             suitable_bitrate_limit->min_start_bitrate_bps *

-                 kLowerMinBitrateTolerationFactor) {

-    return BandwidthQualityScaler::CheckBitrateResult::kHighBitRate;

-  }

-  return BandwidthQualityScaler::CheckBitrateResult::kNormalBitrate;

-}

-

-BandwidthQualityScalerUsageHandlerInterface::

-    ~BandwidthQualityScalerUsageHandlerInterface() {}

-}  // namespace webrtc

+/*
+ *  Copyright (c) 2021 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 "modules/video_coding/utility/bandwidth_quality_scaler.h"
+
+#include <algorithm>
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "api/video/video_adaptation_reason.h"
+#include "api/video_codecs/video_encoder.h"
+#include "rtc_base/checks.h"
+#include "rtc_base/experiments/bandwidth_quality_scaler_settings.h"
+#include "rtc_base/logging.h"
+#include "rtc_base/numerics/exp_filter.h"
+#include "rtc_base/task_queue.h"
+#include "rtc_base/task_utils/to_queued_task.h"
+#include "rtc_base/time_utils.h"
+#include "rtc_base/weak_ptr.h"
+
+namespace webrtc {
+
+namespace {
+
+constexpr int kDefaultMaxWindowSizeMs = 5000;
+constexpr float kHigherMaxBitrateTolerationFactor = 0.95;
+constexpr float kLowerMinBitrateTolerationFactor = 0.8;
+constexpr int kDefaultBitrateStateUpdateIntervalSeconds = 5;
+}  // namespace
+
+BandwidthQualityScaler::BandwidthQualityScaler(
+    BandwidthQualityScalerUsageHandlerInterface* handler)
+    : kBitrateStateUpdateInterval(TimeDelta::Seconds(
+          BandwidthQualityScalerSettings::ParseFromFieldTrials()
+              .BitrateStateUpdateInterval()
+              .value_or(kDefaultBitrateStateUpdateIntervalSeconds))),
+      handler_(handler),
+      encoded_bitrate_(kDefaultMaxWindowSizeMs, RateStatistics::kBpsScale),
+      weak_ptr_factory_(this) {
+  RTC_DCHECK_RUN_ON(&task_checker_);
+  RTC_DCHECK(handler_ != nullptr);
+
+  StartCheckForBitrate();
+}
+
+BandwidthQualityScaler::~BandwidthQualityScaler() {
+  RTC_DCHECK_RUN_ON(&task_checker_);
+}
+
+void BandwidthQualityScaler::StartCheckForBitrate() {
+  RTC_DCHECK_RUN_ON(&task_checker_);
+  TaskQueueBase::Current()->PostDelayedTask(
+      ToQueuedTask([this_weak_ptr = weak_ptr_factory_.GetWeakPtr(), this] {
+        if (!this_weak_ptr) {
+          // The caller BandwidthQualityScaler has been deleted.
+          return;
+        }
+        RTC_DCHECK_RUN_ON(&task_checker_);
+        switch (CheckBitrate()) {
+          case BandwidthQualityScaler::CheckBitrateResult::kHighBitRate: {
+            handler_->OnReportUsageBandwidthHigh();
+            last_frame_size_pixels_.reset();
+            break;
+          }
+          case BandwidthQualityScaler::CheckBitrateResult::kLowBitRate: {
+            handler_->OnReportUsageBandwidthLow();
+            last_frame_size_pixels_.reset();
+            break;
+          }
+          case BandwidthQualityScaler::CheckBitrateResult::kNormalBitrate: {
+            break;
+          }
+          case BandwidthQualityScaler::CheckBitrateResult::
+              kInsufficientSamples: {
+            break;
+          }
+        }
+        StartCheckForBitrate();
+      }),
+      kBitrateStateUpdateInterval.ms());
+}
+
+void BandwidthQualityScaler::ReportEncodeInfo(int frame_size_bytes,
+                                              int64_t time_sent_in_ms,
+                                              uint32_t encoded_width,
+                                              uint32_t encoded_height) {
+  RTC_DCHECK_RUN_ON(&task_checker_);
+  last_time_sent_in_ms_ = time_sent_in_ms;
+  last_frame_size_pixels_ = encoded_width * encoded_height;
+  encoded_bitrate_.Update(frame_size_bytes, time_sent_in_ms);
+}
+
+void BandwidthQualityScaler::SetResolutionBitrateLimits(
+    const std::vector<VideoEncoder::ResolutionBitrateLimits>&
+        resolution_bitrate_limits) {
+  if (resolution_bitrate_limits.empty()) {
+    resolution_bitrate_limits_ = EncoderInfoSettings::
+        GetDefaultSinglecastBitrateLimitsWhenQpIsUntrusted();
+  } else {
+    resolution_bitrate_limits_ = resolution_bitrate_limits;
+  }
+}
+
+BandwidthQualityScaler::CheckBitrateResult
+BandwidthQualityScaler::CheckBitrate() {
+  RTC_DCHECK_RUN_ON(&task_checker_);
+  if (!last_frame_size_pixels_.has_value() ||
+      !last_time_sent_in_ms_.has_value()) {
+    return BandwidthQualityScaler::CheckBitrateResult::kInsufficientSamples;
+  }
+
+  absl::optional<int64_t> current_bitrate_bps =
+      encoded_bitrate_.Rate(last_time_sent_in_ms_.value());
+  if (!current_bitrate_bps.has_value()) {
+    // We can't get a valid bitrate due to not enough data points.
+    return BandwidthQualityScaler::CheckBitrateResult::kInsufficientSamples;
+  }
+  absl::optional<VideoEncoder::ResolutionBitrateLimits> suitable_bitrate_limit =
+      EncoderInfoSettings::
+          GetSinglecastBitrateLimitForResolutionWhenQpIsUntrusted(
+              last_frame_size_pixels_, resolution_bitrate_limits_);
+
+  if (!suitable_bitrate_limit.has_value()) {
+    return BandwidthQualityScaler::CheckBitrateResult::kInsufficientSamples;
+  }
+
+  // Multiply by toleration factor to solve the frequent adaptation due to
+  // critical value.
+  if (current_bitrate_bps > suitable_bitrate_limit->max_bitrate_bps *
+                                kHigherMaxBitrateTolerationFactor) {
+    return BandwidthQualityScaler::CheckBitrateResult::kLowBitRate;
+  } else if (current_bitrate_bps <
+             suitable_bitrate_limit->min_start_bitrate_bps *
+                 kLowerMinBitrateTolerationFactor) {
+    return BandwidthQualityScaler::CheckBitrateResult::kHighBitRate;
+  }
+  return BandwidthQualityScaler::CheckBitrateResult::kNormalBitrate;
+}
+
+BandwidthQualityScalerUsageHandlerInterface::
+    ~BandwidthQualityScalerUsageHandlerInterface() {}
+}  // namespace webrtc
diff --git a/modules/video_coding/utility/bandwidth_quality_scaler.h b/modules/video_coding/utility/bandwidth_quality_scaler.h
index bb356dd..2816e58 100644
--- a/modules/video_coding/utility/bandwidth_quality_scaler.h
+++ b/modules/video_coding/utility/bandwidth_quality_scaler.h
@@ -1,95 +1,95 @@
-/*

- *  Copyright 2021 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 MODULES_VIDEO_CODING_UTILITY_BANDWIDTH_QUALITY_SCALER_H_

-#define MODULES_VIDEO_CODING_UTILITY_BANDWIDTH_QUALITY_SCALER_H_

-

-#include <stddef.h>

-#include <stdint.h>

-

-#include <memory>

-#include <vector>

-

-#include "absl/types/optional.h"

-#include "api/scoped_refptr.h"

-#include "api/sequence_checker.h"

-#include "api/video_codecs/video_encoder.h"

-#include "rtc_base/experiments/encoder_info_settings.h"

-#include "rtc_base/logging.h"

-#include "rtc_base/numerics/exp_filter.h"

-#include "rtc_base/rate_statistics.h"

-#include "rtc_base/ref_count.h"

-#include "rtc_base/ref_counted_object.h"

-#include "rtc_base/system/no_unique_address.h"

-#include "rtc_base/task_queue.h"

-#include "rtc_base/weak_ptr.h"

-

-namespace webrtc {

-

-class BandwidthQualityScalerUsageHandlerInterface {

- public:

-  virtual ~BandwidthQualityScalerUsageHandlerInterface();

-

-  virtual void OnReportUsageBandwidthHigh() = 0;

-  virtual void OnReportUsageBandwidthLow() = 0;

-};

-

-// BandwidthQualityScaler runs asynchronously and monitors bandwidth values of

-// encoded frames. It holds a reference to a

-// BandwidthQualityScalerUsageHandlerInterface implementation to signal an

-// overuse or underuse of bandwidth (which indicate a desire to scale the video

-// stream down or up).

-class BandwidthQualityScaler {

- public:

-  explicit BandwidthQualityScaler(

-      BandwidthQualityScalerUsageHandlerInterface* handler);

-  virtual ~BandwidthQualityScaler();

-

-  void ReportEncodeInfo(int frame_size_bytes,

-                        int64_t time_sent_in_ms,

-                        uint32_t encoded_width,

-                        uint32_t encoded_height);

-

-  // We prioritise to using the |resolution_bitrate_limits| provided by the

-  // current decoder. If not provided, we will use the default data by

-  // GetDefaultResolutionBitrateLimits().

-  void SetResolutionBitrateLimits(

-      const std::vector<VideoEncoder::ResolutionBitrateLimits>&

-          resolution_bitrate_limits);

-

-  const TimeDelta kBitrateStateUpdateInterval;

-

- private:

-  enum class CheckBitrateResult {

-    kInsufficientSamples,

-    kNormalBitrate,

-    kHighBitRate,

-    kLowBitRate,

-  };

-

-  // We will periodically check encode bitrate, this function will make

-  // resolution up or down decisions and report the decision to the adapter.

-  void StartCheckForBitrate();

-  CheckBitrateResult CheckBitrate();

-

-  RTC_NO_UNIQUE_ADDRESS SequenceChecker task_checker_;

-  BandwidthQualityScalerUsageHandlerInterface* const handler_

-      RTC_GUARDED_BY(&task_checker_);

-

-  absl::optional<int64_t> last_time_sent_in_ms_ RTC_GUARDED_BY(&task_checker_);

-  RateStatistics encoded_bitrate_ RTC_GUARDED_BY(&task_checker_);

-  absl::optional<int> last_frame_size_pixels_ RTC_GUARDED_BY(&task_checker_);

-  rtc::WeakPtrFactory<BandwidthQualityScaler> weak_ptr_factory_;

-

-  std::vector<VideoEncoder::ResolutionBitrateLimits> resolution_bitrate_limits_;

-};

-

-}  // namespace webrtc

-#endif  // MODULES_VIDEO_CODING_UTILITY_BANDWIDTH_QUALITY_SCALER_H_

+/*
+ *  Copyright (c) 2021 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 MODULES_VIDEO_CODING_UTILITY_BANDWIDTH_QUALITY_SCALER_H_
+#define MODULES_VIDEO_CODING_UTILITY_BANDWIDTH_QUALITY_SCALER_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+#include "absl/types/optional.h"
+#include "api/scoped_refptr.h"
+#include "api/sequence_checker.h"
+#include "api/video_codecs/video_encoder.h"
+#include "rtc_base/experiments/encoder_info_settings.h"
+#include "rtc_base/logging.h"
+#include "rtc_base/numerics/exp_filter.h"
+#include "rtc_base/rate_statistics.h"
+#include "rtc_base/ref_count.h"
+#include "rtc_base/ref_counted_object.h"
+#include "rtc_base/system/no_unique_address.h"
+#include "rtc_base/task_queue.h"
+#include "rtc_base/weak_ptr.h"
+
+namespace webrtc {
+
+class BandwidthQualityScalerUsageHandlerInterface {
+ public:
+  virtual ~BandwidthQualityScalerUsageHandlerInterface();
+
+  virtual void OnReportUsageBandwidthHigh() = 0;
+  virtual void OnReportUsageBandwidthLow() = 0;
+};
+
+// BandwidthQualityScaler runs asynchronously and monitors bandwidth values of
+// encoded frames. It holds a reference to a
+// BandwidthQualityScalerUsageHandlerInterface implementation to signal an
+// overuse or underuse of bandwidth (which indicate a desire to scale the video
+// stream down or up).
+class BandwidthQualityScaler {
+ public:
+  explicit BandwidthQualityScaler(
+      BandwidthQualityScalerUsageHandlerInterface* handler);
+  virtual ~BandwidthQualityScaler();
+
+  void ReportEncodeInfo(int frame_size_bytes,
+                        int64_t time_sent_in_ms,
+                        uint32_t encoded_width,
+                        uint32_t encoded_height);
+
+  // We prioritise to using the |resolution_bitrate_limits| provided by the
+  // current decoder. If not provided, we will use the default data by
+  // GetDefaultResolutionBitrateLimits().
+  void SetResolutionBitrateLimits(
+      const std::vector<VideoEncoder::ResolutionBitrateLimits>&
+          resolution_bitrate_limits);
+
+  const TimeDelta kBitrateStateUpdateInterval;
+
+ private:
+  enum class CheckBitrateResult {
+    kInsufficientSamples,
+    kNormalBitrate,
+    kHighBitRate,
+    kLowBitRate,
+  };
+
+  // We will periodically check encode bitrate, this function will make
+  // resolution up or down decisions and report the decision to the adapter.
+  void StartCheckForBitrate();
+  CheckBitrateResult CheckBitrate();
+
+  RTC_NO_UNIQUE_ADDRESS SequenceChecker task_checker_;
+  BandwidthQualityScalerUsageHandlerInterface* const handler_
+      RTC_GUARDED_BY(&task_checker_);
+
+  absl::optional<int64_t> last_time_sent_in_ms_ RTC_GUARDED_BY(&task_checker_);
+  RateStatistics encoded_bitrate_ RTC_GUARDED_BY(&task_checker_);
+  absl::optional<int> last_frame_size_pixels_ RTC_GUARDED_BY(&task_checker_);
+  rtc::WeakPtrFactory<BandwidthQualityScaler> weak_ptr_factory_;
+
+  std::vector<VideoEncoder::ResolutionBitrateLimits> resolution_bitrate_limits_;
+};
+
+}  // namespace webrtc
+#endif  // MODULES_VIDEO_CODING_UTILITY_BANDWIDTH_QUALITY_SCALER_H_
diff --git a/modules/video_coding/utility/bandwidth_quality_scaler_unittest.cc b/modules/video_coding/utility/bandwidth_quality_scaler_unittest.cc
index 30af1f9..7f1263ce 100644
--- a/modules/video_coding/utility/bandwidth_quality_scaler_unittest.cc
+++ b/modules/video_coding/utility/bandwidth_quality_scaler_unittest.cc
@@ -1,279 +1,279 @@
-/*

- *  Copyright 2021 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 "modules/video_coding/utility/bandwidth_quality_scaler.h"

-

-#include <memory>

-#include <string>

-

-#include "rtc_base/checks.h"

-#include "rtc_base/event.h"

-#include "rtc_base/experiments/encoder_info_settings.h"

-#include "rtc_base/task_queue_for_test.h"

-#include "rtc_base/time_utils.h"

-#include "test/field_trial.h"

-#include "test/gtest.h"

-

-namespace webrtc {

-

-namespace {

-constexpr int kFramerateFps = 30;

-constexpr int kDefaultBitrateStateUpdateIntervalSeconds = 5;

-constexpr int kDefaultEncodeDeltaTimeMs = 33;  // 1/30(s) => 33(ms)

-

-}  // namespace

-

-class FakeBandwidthQualityScalerHandler

-    : public BandwidthQualityScalerUsageHandlerInterface {

- public:

-  ~FakeBandwidthQualityScalerHandler() override = default;

-  void OnReportUsageBandwidthHigh() override {

-    adapt_down_event_count_++;

-    event_.Set();

-  }

-

-  void OnReportUsageBandwidthLow() override {

-    adapt_up_event_count_++;

-    event_.Set();

-  }

-

-  rtc::Event event_;

-  int adapt_up_event_count_ = 0;

-  int adapt_down_event_count_ = 0;

-};

-

-class BandwidthQualityScalerUnderTest : public BandwidthQualityScaler {

- public:

-  explicit BandwidthQualityScalerUnderTest(

-      BandwidthQualityScalerUsageHandlerInterface* handler)

-      : BandwidthQualityScaler(handler) {}

-

-  int GetBitrateStateUpdateIntervalMs() {

-    return this->kBitrateStateUpdateInterval.ms() + 200;

-  }

-};

-

-class BandwidthQualityScalerTest

-    : public ::testing::Test,

-      public ::testing::WithParamInterface<std::string> {

- protected:

-  enum ScaleDirection {

-    kKeepScaleNormalBandwidth,

-    kKeepScaleAboveMaxBandwidth,

-    kKeepScaleUnderMinBandwidth,

-  };

-

-  enum FrameType {

-    kKeyFrame,

-    kNormalFrame,

-    kNormalFrame_Overuse,

-    kNormalFrame_Underuse,

-  };

-  struct FrameConfig {

-    FrameConfig(int frame_num,

-                FrameType frame_type,

-                int actual_width,

-                int actual_height)

-        : frame_num(frame_num),

-          frame_type(frame_type),

-          actual_width(actual_width),

-          actual_height(actual_height) {}

-

-    int frame_num;

-    FrameType frame_type;

-    int actual_width;

-    int actual_height;

-  };

-

-  BandwidthQualityScalerTest()

-      : scoped_field_trial_(GetParam()),

-        task_queue_("BandwidthQualityScalerTestQueue"),

-        handler_(std::make_unique<FakeBandwidthQualityScalerHandler>()) {

-    task_queue_.SendTask(

-        [this] {

-          bandwidth_quality_scaler_ =

-              std::unique_ptr<BandwidthQualityScalerUnderTest>(

-                  new BandwidthQualityScalerUnderTest(handler_.get()));

-          bandwidth_quality_scaler_->SetResolutionBitrateLimits(

-              EncoderInfoSettings::

-                  GetDefaultSinglecastBitrateLimitsWhenQpIsUntrusted());

-          // Only for testing. Set first_timestamp_ in RateStatistics to 0.

-          bandwidth_quality_scaler_->ReportEncodeInfo(0, 0, 0, 0);

-        },

-        RTC_FROM_HERE);

-  }

-

-  ~BandwidthQualityScalerTest() {

-    task_queue_.SendTask([this] { bandwidth_quality_scaler_ = nullptr; },

-                         RTC_FROM_HERE);

-  }

-

-  int GetFrameSizeBytes(

-      const FrameConfig& config,

-      const VideoEncoder::ResolutionBitrateLimits& bitrate_limits) {

-    int scale = 8 * kFramerateFps;

-    switch (config.frame_type) {

-      case FrameType::kKeyFrame: {

-        // 4 is experimental value. Based on the test, the number of bytes of

-        // the key frame is about four times of the normal frame

-        return bitrate_limits.max_bitrate_bps * 4 / scale;

-      }

-      case FrameType::kNormalFrame_Overuse: {

-        return bitrate_limits.max_bitrate_bps * 3 / 2 / scale;

-      }

-      case FrameType::kNormalFrame_Underuse: {

-        return bitrate_limits.min_start_bitrate_bps * 3 / 4 / scale;

-      }

-      case FrameType::kNormalFrame: {

-        return (bitrate_limits.max_bitrate_bps +

-                bitrate_limits.min_start_bitrate_bps) /

-               2 / scale;

-      }

-    }

-    return -1;

-  }

-

-  absl::optional<VideoEncoder::ResolutionBitrateLimits>

-  GetDefaultSuitableBitrateLimit(int frame_size_pixels) {

-    return EncoderInfoSettings::

-        GetSinglecastBitrateLimitForResolutionWhenQpIsUntrusted(

-            frame_size_pixels,

-            EncoderInfoSettings::

-                GetDefaultSinglecastBitrateLimitsWhenQpIsUntrusted());

-  }

-

-  void TriggerBandwidthQualityScalerTest(

-      const std::vector<FrameConfig>& frame_configs) {

-    task_queue_.SendTask(

-        [frame_configs, this] {

-          RTC_CHECK(!frame_configs.empty());

-

-          int total_frame_nums = 0;

-          for (const FrameConfig& frame_config : frame_configs) {

-            total_frame_nums += frame_config.frame_num;

-          }

-

-          EXPECT_EQ(kFramerateFps * kDefaultBitrateStateUpdateIntervalSeconds,

-                    total_frame_nums);

-

-          uint32_t time_send_to_scaler_ms_ = rtc::TimeMillis();

-          for (size_t i = 0; i < frame_configs.size(); ++i) {

-            const FrameConfig& config = frame_configs[i];

-            absl::optional<VideoEncoder::ResolutionBitrateLimits>

-                suitable_bitrate = GetDefaultSuitableBitrateLimit(

-                    config.actual_width * config.actual_height);

-            EXPECT_TRUE(suitable_bitrate);

-            for (int j = 0; j <= config.frame_num; ++j) {

-              time_send_to_scaler_ms_ += kDefaultEncodeDeltaTimeMs;

-              int frame_size_bytes =

-                  GetFrameSizeBytes(config, suitable_bitrate.value());

-              RTC_CHECK(frame_size_bytes > 0);

-              bandwidth_quality_scaler_->ReportEncodeInfo(

-                  frame_size_bytes, time_send_to_scaler_ms_,

-                  config.actual_width, config.actual_height);

-            }

-          }

-        },

-        RTC_FROM_HERE);

-  }

-

-  test::ScopedFieldTrials scoped_field_trial_;

-  TaskQueueForTest task_queue_;

-  std::unique_ptr<BandwidthQualityScalerUnderTest> bandwidth_quality_scaler_;

-  std::unique_ptr<FakeBandwidthQualityScalerHandler> handler_;

-};

-

-INSTANTIATE_TEST_SUITE_P(

-    FieldTrials,

-    BandwidthQualityScalerTest,

-    ::testing::Values("WebRTC-Video-BandwidthQualityScalerSettings/"

-                      "bitrate_state_update_interval_s_:1/",

-                      "WebRTC-Video-BandwidthQualityScalerSettings/"

-                      "bitrate_state_update_interval_s_:2/"));

-

-TEST_P(BandwidthQualityScalerTest, AllNormalFrame_640x360) {

-  const std::vector<FrameConfig> frame_configs{

-      FrameConfig(150, FrameType::kNormalFrame, 640, 360)};

-  TriggerBandwidthQualityScalerTest(frame_configs);

-

-  // When resolution is 640*360, experimental working bitrate range is

-  // [500000,800000] bps. Encoded bitrate is 654253, so it falls in the range

-  // without any operation(up/down).

-  EXPECT_FALSE(handler_->event_.Wait(

-      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));

-  EXPECT_EQ(0, handler_->adapt_down_event_count_);

-  EXPECT_EQ(0, handler_->adapt_up_event_count_);

-}

-

-TEST_P(BandwidthQualityScalerTest, AllNoramlFrame_AboveMaxBandwidth_640x360) {

-  const std::vector<FrameConfig> frame_configs{

-      FrameConfig(150, FrameType::kNormalFrame_Overuse, 640, 360)};

-  TriggerBandwidthQualityScalerTest(frame_configs);

-

-  // When resolution is 640*360, experimental working bitrate range is

-  // [500000,800000] bps. Encoded bitrate is 1208000 > 800000 * 0.95, so it

-  // triggers adapt_up_event_count_.

-  EXPECT_TRUE(handler_->event_.Wait(

-      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));

-  EXPECT_EQ(0, handler_->adapt_down_event_count_);

-  EXPECT_EQ(1, handler_->adapt_up_event_count_);

-}

-

-TEST_P(BandwidthQualityScalerTest, AllNormalFrame_Underuse_640x360) {

-  const std::vector<FrameConfig> frame_configs{

-      FrameConfig(150, FrameType::kNormalFrame_Underuse, 640, 360)};

-  TriggerBandwidthQualityScalerTest(frame_configs);

-

-  // When resolution is 640*360, experimental working bitrate range is

-  // [500000,800000] bps. Encoded bitrate is 377379 < 500000 * 0.8, so it

-  // triggers adapt_down_event_count_.

-  EXPECT_TRUE(handler_->event_.Wait(

-      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));

-  EXPECT_EQ(1, handler_->adapt_down_event_count_);

-  EXPECT_EQ(0, handler_->adapt_up_event_count_);

-}

-

-TEST_P(BandwidthQualityScalerTest, FixedFrameTypeTest1_640x360) {

-  const std::vector<FrameConfig> frame_configs{

-      FrameConfig(5, FrameType::kNormalFrame_Underuse, 640, 360),

-      FrameConfig(110, FrameType::kNormalFrame, 640, 360),

-      FrameConfig(20, FrameType::kNormalFrame_Overuse, 640, 360),

-      FrameConfig(15, FrameType::kKeyFrame, 640, 360),

-  };

-  TriggerBandwidthQualityScalerTest(frame_configs);

-

-  // When resolution is 640*360, experimental working bitrate range is

-  // [500000,800000] bps. Encoded bitrate is 1059462 > 800000 * 0.95, so it

-  // triggers adapt_up_event_count_.

-  EXPECT_TRUE(handler_->event_.Wait(

-      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));

-  EXPECT_EQ(0, handler_->adapt_down_event_count_);

-  EXPECT_EQ(1, handler_->adapt_up_event_count_);

-}

-

-TEST_P(BandwidthQualityScalerTest, FixedFrameTypeTest2_640x360) {

-  const std::vector<FrameConfig> frame_configs{

-      FrameConfig(10, FrameType::kNormalFrame_Underuse, 640, 360),

-      FrameConfig(50, FrameType::kNormalFrame, 640, 360),

-      FrameConfig(5, FrameType::kKeyFrame, 640, 360),

-      FrameConfig(85, FrameType::kNormalFrame_Overuse, 640, 360),

-  };

-  TriggerBandwidthQualityScalerTest(frame_configs);

-

-  // When resolution is 640*360, experimental working bitrate range is

-  // [500000,800000] bps. Encoded bitrate is 1059462 > 800000 * 0.95, so it

-  // triggers adapt_up_event_count_.

-  EXPECT_TRUE(handler_->event_.Wait(

-      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));

-  EXPECT_EQ(0, handler_->adapt_down_event_count_);

-  EXPECT_EQ(1, handler_->adapt_up_event_count_);

-}

-

-}  // namespace webrtc

+/*
+ *  Copyright (c) 2021 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 "modules/video_coding/utility/bandwidth_quality_scaler.h"
+
+#include <memory>
+#include <string>
+
+#include "rtc_base/checks.h"
+#include "rtc_base/event.h"
+#include "rtc_base/experiments/encoder_info_settings.h"
+#include "rtc_base/task_queue_for_test.h"
+#include "rtc_base/time_utils.h"
+#include "test/field_trial.h"
+#include "test/gtest.h"
+
+namespace webrtc {
+
+namespace {
+constexpr int kFramerateFps = 30;
+constexpr int kDefaultBitrateStateUpdateIntervalSeconds = 5;
+constexpr int kDefaultEncodeDeltaTimeMs = 33;  // 1/30(s) => 33(ms)
+
+}  // namespace
+
+class FakeBandwidthQualityScalerHandler
+    : public BandwidthQualityScalerUsageHandlerInterface {
+ public:
+  ~FakeBandwidthQualityScalerHandler() override = default;
+  void OnReportUsageBandwidthHigh() override {
+    adapt_down_event_count_++;
+    event_.Set();
+  }
+
+  void OnReportUsageBandwidthLow() override {
+    adapt_up_event_count_++;
+    event_.Set();
+  }
+
+  rtc::Event event_;
+  int adapt_up_event_count_ = 0;
+  int adapt_down_event_count_ = 0;
+};
+
+class BandwidthQualityScalerUnderTest : public BandwidthQualityScaler {
+ public:
+  explicit BandwidthQualityScalerUnderTest(
+      BandwidthQualityScalerUsageHandlerInterface* handler)
+      : BandwidthQualityScaler(handler) {}
+
+  int GetBitrateStateUpdateIntervalMs() {
+    return this->kBitrateStateUpdateInterval.ms() + 200;
+  }
+};
+
+class BandwidthQualityScalerTest
+    : public ::testing::Test,
+      public ::testing::WithParamInterface<std::string> {
+ protected:
+  enum ScaleDirection {
+    kKeepScaleNormalBandwidth,
+    kKeepScaleAboveMaxBandwidth,
+    kKeepScaleUnderMinBandwidth,
+  };
+
+  enum FrameType {
+    kKeyFrame,
+    kNormalFrame,
+    kNormalFrame_Overuse,
+    kNormalFrame_Underuse,
+  };
+  struct FrameConfig {
+    FrameConfig(int frame_num,
+                FrameType frame_type,
+                int actual_width,
+                int actual_height)
+        : frame_num(frame_num),
+          frame_type(frame_type),
+          actual_width(actual_width),
+          actual_height(actual_height) {}
+
+    int frame_num;
+    FrameType frame_type;
+    int actual_width;
+    int actual_height;
+  };
+
+  BandwidthQualityScalerTest()
+      : scoped_field_trial_(GetParam()),
+        task_queue_("BandwidthQualityScalerTestQueue"),
+        handler_(std::make_unique<FakeBandwidthQualityScalerHandler>()) {
+    task_queue_.SendTask(
+        [this] {
+          bandwidth_quality_scaler_ =
+              std::unique_ptr<BandwidthQualityScalerUnderTest>(
+                  new BandwidthQualityScalerUnderTest(handler_.get()));
+          bandwidth_quality_scaler_->SetResolutionBitrateLimits(
+              EncoderInfoSettings::
+                  GetDefaultSinglecastBitrateLimitsWhenQpIsUntrusted());
+          // Only for testing. Set first_timestamp_ in RateStatistics to 0.
+          bandwidth_quality_scaler_->ReportEncodeInfo(0, 0, 0, 0);
+        },
+        RTC_FROM_HERE);
+  }
+
+  ~BandwidthQualityScalerTest() {
+    task_queue_.SendTask([this] { bandwidth_quality_scaler_ = nullptr; },
+                         RTC_FROM_HERE);
+  }
+
+  int GetFrameSizeBytes(
+      const FrameConfig& config,
+      const VideoEncoder::ResolutionBitrateLimits& bitrate_limits) {
+    int scale = 8 * kFramerateFps;
+    switch (config.frame_type) {
+      case FrameType::kKeyFrame: {
+        // 4 is experimental value. Based on the test, the number of bytes of
+        // the key frame is about four times of the normal frame
+        return bitrate_limits.max_bitrate_bps * 4 / scale;
+      }
+      case FrameType::kNormalFrame_Overuse: {
+        return bitrate_limits.max_bitrate_bps * 3 / 2 / scale;
+      }
+      case FrameType::kNormalFrame_Underuse: {
+        return bitrate_limits.min_start_bitrate_bps * 3 / 4 / scale;
+      }
+      case FrameType::kNormalFrame: {
+        return (bitrate_limits.max_bitrate_bps +
+                bitrate_limits.min_start_bitrate_bps) /
+               2 / scale;
+      }
+    }
+    return -1;
+  }
+
+  absl::optional<VideoEncoder::ResolutionBitrateLimits>
+  GetDefaultSuitableBitrateLimit(int frame_size_pixels) {
+    return EncoderInfoSettings::
+        GetSinglecastBitrateLimitForResolutionWhenQpIsUntrusted(
+            frame_size_pixels,
+            EncoderInfoSettings::
+                GetDefaultSinglecastBitrateLimitsWhenQpIsUntrusted());
+  }
+
+  void TriggerBandwidthQualityScalerTest(
+      const std::vector<FrameConfig>& frame_configs) {
+    task_queue_.SendTask(
+        [frame_configs, this] {
+          RTC_CHECK(!frame_configs.empty());
+
+          int total_frame_nums = 0;
+          for (const FrameConfig& frame_config : frame_configs) {
+            total_frame_nums += frame_config.frame_num;
+          }
+
+          EXPECT_EQ(kFramerateFps * kDefaultBitrateStateUpdateIntervalSeconds,
+                    total_frame_nums);
+
+          uint32_t time_send_to_scaler_ms_ = rtc::TimeMillis();
+          for (size_t i = 0; i < frame_configs.size(); ++i) {
+            const FrameConfig& config = frame_configs[i];
+            absl::optional<VideoEncoder::ResolutionBitrateLimits>
+                suitable_bitrate = GetDefaultSuitableBitrateLimit(
+                    config.actual_width * config.actual_height);
+            EXPECT_TRUE(suitable_bitrate);
+            for (int j = 0; j <= config.frame_num; ++j) {
+              time_send_to_scaler_ms_ += kDefaultEncodeDeltaTimeMs;
+              int frame_size_bytes =
+                  GetFrameSizeBytes(config, suitable_bitrate.value());
+              RTC_CHECK(frame_size_bytes > 0);
+              bandwidth_quality_scaler_->ReportEncodeInfo(
+                  frame_size_bytes, time_send_to_scaler_ms_,
+                  config.actual_width, config.actual_height);
+            }
+          }
+        },
+        RTC_FROM_HERE);
+  }
+
+  test::ScopedFieldTrials scoped_field_trial_;
+  TaskQueueForTest task_queue_;
+  std::unique_ptr<BandwidthQualityScalerUnderTest> bandwidth_quality_scaler_;
+  std::unique_ptr<FakeBandwidthQualityScalerHandler> handler_;
+};
+
+INSTANTIATE_TEST_SUITE_P(
+    FieldTrials,
+    BandwidthQualityScalerTest,
+    ::testing::Values("WebRTC-Video-BandwidthQualityScalerSettings/"
+                      "bitrate_state_update_interval_s_:1/",
+                      "WebRTC-Video-BandwidthQualityScalerSettings/"
+                      "bitrate_state_update_interval_s_:2/"));
+
+TEST_P(BandwidthQualityScalerTest, AllNormalFrame_640x360) {
+  const std::vector<FrameConfig> frame_configs{
+      FrameConfig(150, FrameType::kNormalFrame, 640, 360)};
+  TriggerBandwidthQualityScalerTest(frame_configs);
+
+  // When resolution is 640*360, experimental working bitrate range is
+  // [500000,800000] bps. Encoded bitrate is 654253, so it falls in the range
+  // without any operation(up/down).
+  EXPECT_FALSE(handler_->event_.Wait(
+      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));
+  EXPECT_EQ(0, handler_->adapt_down_event_count_);
+  EXPECT_EQ(0, handler_->adapt_up_event_count_);
+}
+
+TEST_P(BandwidthQualityScalerTest, AllNoramlFrame_AboveMaxBandwidth_640x360) {
+  const std::vector<FrameConfig> frame_configs{
+      FrameConfig(150, FrameType::kNormalFrame_Overuse, 640, 360)};
+  TriggerBandwidthQualityScalerTest(frame_configs);
+
+  // When resolution is 640*360, experimental working bitrate range is
+  // [500000,800000] bps. Encoded bitrate is 1208000 > 800000 * 0.95, so it
+  // triggers adapt_up_event_count_.
+  EXPECT_TRUE(handler_->event_.Wait(
+      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));
+  EXPECT_EQ(0, handler_->adapt_down_event_count_);
+  EXPECT_EQ(1, handler_->adapt_up_event_count_);
+}
+
+TEST_P(BandwidthQualityScalerTest, AllNormalFrame_Underuse_640x360) {
+  const std::vector<FrameConfig> frame_configs{
+      FrameConfig(150, FrameType::kNormalFrame_Underuse, 640, 360)};
+  TriggerBandwidthQualityScalerTest(frame_configs);
+
+  // When resolution is 640*360, experimental working bitrate range is
+  // [500000,800000] bps. Encoded bitrate is 377379 < 500000 * 0.8, so it
+  // triggers adapt_down_event_count_.
+  EXPECT_TRUE(handler_->event_.Wait(
+      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));
+  EXPECT_EQ(1, handler_->adapt_down_event_count_);
+  EXPECT_EQ(0, handler_->adapt_up_event_count_);
+}
+
+TEST_P(BandwidthQualityScalerTest, FixedFrameTypeTest1_640x360) {
+  const std::vector<FrameConfig> frame_configs{
+      FrameConfig(5, FrameType::kNormalFrame_Underuse, 640, 360),
+      FrameConfig(110, FrameType::kNormalFrame, 640, 360),
+      FrameConfig(20, FrameType::kNormalFrame_Overuse, 640, 360),
+      FrameConfig(15, FrameType::kKeyFrame, 640, 360),
+  };
+  TriggerBandwidthQualityScalerTest(frame_configs);
+
+  // When resolution is 640*360, experimental working bitrate range is
+  // [500000,800000] bps. Encoded bitrate is 1059462 > 800000 * 0.95, so it
+  // triggers adapt_up_event_count_.
+  EXPECT_TRUE(handler_->event_.Wait(
+      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));
+  EXPECT_EQ(0, handler_->adapt_down_event_count_);
+  EXPECT_EQ(1, handler_->adapt_up_event_count_);
+}
+
+TEST_P(BandwidthQualityScalerTest, FixedFrameTypeTest2_640x360) {
+  const std::vector<FrameConfig> frame_configs{
+      FrameConfig(10, FrameType::kNormalFrame_Underuse, 640, 360),
+      FrameConfig(50, FrameType::kNormalFrame, 640, 360),
+      FrameConfig(5, FrameType::kKeyFrame, 640, 360),
+      FrameConfig(85, FrameType::kNormalFrame_Overuse, 640, 360),
+  };
+  TriggerBandwidthQualityScalerTest(frame_configs);
+
+  // When resolution is 640*360, experimental working bitrate range is
+  // [500000,800000] bps. Encoded bitrate is 1059462 > 800000 * 0.95, so it
+  // triggers adapt_up_event_count_.
+  EXPECT_TRUE(handler_->event_.Wait(
+      bandwidth_quality_scaler_->GetBitrateStateUpdateIntervalMs()));
+  EXPECT_EQ(0, handler_->adapt_down_event_count_);
+  EXPECT_EQ(1, handler_->adapt_up_event_count_);
+}
+
+}  // namespace webrtc
diff --git a/video/adaptation/bandwidth_quality_scaler_resource.cc b/video/adaptation/bandwidth_quality_scaler_resource.cc
index 6f49135..283f3f0 100644
--- a/video/adaptation/bandwidth_quality_scaler_resource.cc
+++ b/video/adaptation/bandwidth_quality_scaler_resource.cc
@@ -1,85 +1,85 @@
-/*

- *  Copyright 2021 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 "video/adaptation/bandwidth_quality_scaler_resource.h"

-

-#include <utility>

-

-#include "rtc_base/checks.h"

-#include "rtc_base/experiments/balanced_degradation_settings.h"

-#include "rtc_base/logging.h"

-#include "rtc_base/ref_counted_object.h"

-#include "rtc_base/task_utils/to_queued_task.h"

-#include "rtc_base/time_utils.h"

-

-namespace webrtc {

-

-// static

-rtc::scoped_refptr<BandwidthQualityScalerResource>

-BandwidthQualityScalerResource::Create() {

-  return rtc::make_ref_counted<BandwidthQualityScalerResource>();

-}

-

-BandwidthQualityScalerResource::BandwidthQualityScalerResource()

-    : VideoStreamEncoderResource("BandwidthQualityScalerResource"),

-      bandwidth_quality_scaler_(nullptr) {}

-

-BandwidthQualityScalerResource::~BandwidthQualityScalerResource() {

-  RTC_DCHECK(!bandwidth_quality_scaler_);

-}

-

-bool BandwidthQualityScalerResource::is_started() const {

-  RTC_DCHECK_RUN_ON(encoder_queue());

-  return bandwidth_quality_scaler_.get();

-}

-

-void BandwidthQualityScalerResource::StartCheckForOveruse(

-    const std::vector<VideoEncoder::ResolutionBitrateLimits>&

-        resolution_bitrate_limits) {

-  RTC_DCHECK_RUN_ON(encoder_queue());

-  RTC_DCHECK(!is_started());

-  bandwidth_quality_scaler_ = std::make_unique<BandwidthQualityScaler>(this);

-

-  // If the configuration parameters more than one, we should define and

-  // declare the function BandwidthQualityScaler::Initialize() and call it.

-  bandwidth_quality_scaler_->SetResolutionBitrateLimits(

-      resolution_bitrate_limits);

-}

-

-void BandwidthQualityScalerResource::StopCheckForOveruse() {

-  RTC_DCHECK_RUN_ON(encoder_queue());

-  RTC_DCHECK(is_started());

-  // Ensure we have no pending callbacks. This makes it safe to destroy the

-  // BandwidthQualityScaler and even task queues with tasks in-flight.

-  bandwidth_quality_scaler_.reset();

-}

-

-void BandwidthQualityScalerResource::OnReportUsageBandwidthHigh() {

-  OnResourceUsageStateMeasured(ResourceUsageState::kOveruse);

-}

-

-void BandwidthQualityScalerResource::OnReportUsageBandwidthLow() {

-  OnResourceUsageStateMeasured(ResourceUsageState::kUnderuse);

-}

-

-void BandwidthQualityScalerResource::OnEncodeCompleted(

-    const EncodedImage& encoded_image,

-    int64_t time_sent_in_us,

-    int64_t encoded_image_size_bytes) {

-  RTC_DCHECK_RUN_ON(encoder_queue());

-

-  if (bandwidth_quality_scaler_) {

-    bandwidth_quality_scaler_->ReportEncodeInfo(

-        encoded_image_size_bytes, time_sent_in_us / 1000,

-        encoded_image._encodedWidth, encoded_image._encodedHeight);

-  }

-}

-

-}  // namespace webrtc

+/*
+ *  Copyright (c) 2021 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 "video/adaptation/bandwidth_quality_scaler_resource.h"
+
+#include <utility>
+
+#include "rtc_base/checks.h"
+#include "rtc_base/experiments/balanced_degradation_settings.h"
+#include "rtc_base/logging.h"
+#include "rtc_base/ref_counted_object.h"
+#include "rtc_base/task_utils/to_queued_task.h"
+#include "rtc_base/time_utils.h"
+
+namespace webrtc {
+
+// static
+rtc::scoped_refptr<BandwidthQualityScalerResource>
+BandwidthQualityScalerResource::Create() {
+  return rtc::make_ref_counted<BandwidthQualityScalerResource>();
+}
+
+BandwidthQualityScalerResource::BandwidthQualityScalerResource()
+    : VideoStreamEncoderResource("BandwidthQualityScalerResource"),
+      bandwidth_quality_scaler_(nullptr) {}
+
+BandwidthQualityScalerResource::~BandwidthQualityScalerResource() {
+  RTC_DCHECK(!bandwidth_quality_scaler_);
+}
+
+bool BandwidthQualityScalerResource::is_started() const {
+  RTC_DCHECK_RUN_ON(encoder_queue());
+  return bandwidth_quality_scaler_.get();
+}
+
+void BandwidthQualityScalerResource::StartCheckForOveruse(
+    const std::vector<VideoEncoder::ResolutionBitrateLimits>&
+        resolution_bitrate_limits) {
+  RTC_DCHECK_RUN_ON(encoder_queue());
+  RTC_DCHECK(!is_started());
+  bandwidth_quality_scaler_ = std::make_unique<BandwidthQualityScaler>(this);
+
+  // If the configuration parameters more than one, we should define and
+  // declare the function BandwidthQualityScaler::Initialize() and call it.
+  bandwidth_quality_scaler_->SetResolutionBitrateLimits(
+      resolution_bitrate_limits);
+}
+
+void BandwidthQualityScalerResource::StopCheckForOveruse() {
+  RTC_DCHECK_RUN_ON(encoder_queue());
+  RTC_DCHECK(is_started());
+  // Ensure we have no pending callbacks. This makes it safe to destroy the
+  // BandwidthQualityScaler and even task queues with tasks in-flight.
+  bandwidth_quality_scaler_.reset();
+}
+
+void BandwidthQualityScalerResource::OnReportUsageBandwidthHigh() {
+  OnResourceUsageStateMeasured(ResourceUsageState::kOveruse);
+}
+
+void BandwidthQualityScalerResource::OnReportUsageBandwidthLow() {
+  OnResourceUsageStateMeasured(ResourceUsageState::kUnderuse);
+}
+
+void BandwidthQualityScalerResource::OnEncodeCompleted(
+    const EncodedImage& encoded_image,
+    int64_t time_sent_in_us,
+    int64_t encoded_image_size_bytes) {
+  RTC_DCHECK_RUN_ON(encoder_queue());
+
+  if (bandwidth_quality_scaler_) {
+    bandwidth_quality_scaler_->ReportEncodeInfo(
+        encoded_image_size_bytes, time_sent_in_us / 1000,
+        encoded_image._encodedWidth, encoded_image._encodedHeight);
+  }
+}
+
+}  // namespace webrtc
diff --git a/video/adaptation/bandwidth_quality_scaler_resource.h b/video/adaptation/bandwidth_quality_scaler_resource.h
index f33ce97..9dfa97d 100644
--- a/video/adaptation/bandwidth_quality_scaler_resource.h
+++ b/video/adaptation/bandwidth_quality_scaler_resource.h
@@ -1,64 +1,64 @@
-/*

- *  Copyright 2021 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 VIDEO_ADAPTATION_BANDWIDTH_QUALITY_SCALER_RESOURCE_H_

-#define VIDEO_ADAPTATION_BANDWIDTH_QUALITY_SCALER_RESOURCE_H_

-

-#include <memory>

-#include <queue>

-#include <string>

-#include <vector>

-

-#include "absl/types/optional.h"

-#include "api/scoped_refptr.h"

-#include "api/video/video_adaptation_reason.h"

-#include "api/video_codecs/video_encoder.h"

-#include "call/adaptation/degradation_preference_provider.h"

-#include "call/adaptation/resource_adaptation_processor_interface.h"

-#include "modules/video_coding/utility/bandwidth_quality_scaler.h"

-#include "rtc_base/ref_counted_object.h"

-#include "rtc_base/task_queue.h"

-#include "video/adaptation/video_stream_encoder_resource.h"

-

-namespace webrtc {

-

-// Handles interaction with the BandwidthQualityScaler.

-class BandwidthQualityScalerResource

-    : public VideoStreamEncoderResource,

-      public BandwidthQualityScalerUsageHandlerInterface {

- public:

-  static rtc::scoped_refptr<BandwidthQualityScalerResource> Create();

-

-  BandwidthQualityScalerResource();

-  ~BandwidthQualityScalerResource() override;

-

-  bool is_started() const;

-

-  void OnEncodeCompleted(const EncodedImage& encoded_image,

-                         int64_t time_sent_in_us,

-                         int64_t encoded_image_size_bytes);

-

-  void StartCheckForOveruse(

-      const std::vector<VideoEncoder::ResolutionBitrateLimits>&

-          resolution_bitrate_limits);

-  void StopCheckForOveruse();

-

-  // BandwidthScalerQpUsageHandlerInterface implementation.

-  void OnReportUsageBandwidthHigh() override;

-  void OnReportUsageBandwidthLow() override;

-

- private:

-  std::unique_ptr<BandwidthQualityScaler> bandwidth_quality_scaler_

-      RTC_GUARDED_BY(encoder_queue());

-};

-

-}  // namespace webrtc

-

-#endif  // VIDEO_ADAPTATION_BANDWIDTH_QUALITY_SCALER_RESOURCE_H_

+/*
+ *  Copyright (c) 2021 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 VIDEO_ADAPTATION_BANDWIDTH_QUALITY_SCALER_RESOURCE_H_
+#define VIDEO_ADAPTATION_BANDWIDTH_QUALITY_SCALER_RESOURCE_H_
+
+#include <memory>
+#include <queue>
+#include <string>
+#include <vector>
+
+#include "absl/types/optional.h"
+#include "api/scoped_refptr.h"
+#include "api/video/video_adaptation_reason.h"
+#include "api/video_codecs/video_encoder.h"
+#include "call/adaptation/degradation_preference_provider.h"
+#include "call/adaptation/resource_adaptation_processor_interface.h"
+#include "modules/video_coding/utility/bandwidth_quality_scaler.h"
+#include "rtc_base/ref_counted_object.h"
+#include "rtc_base/task_queue.h"
+#include "video/adaptation/video_stream_encoder_resource.h"
+
+namespace webrtc {
+
+// Handles interaction with the BandwidthQualityScaler.
+class BandwidthQualityScalerResource
+    : public VideoStreamEncoderResource,
+      public BandwidthQualityScalerUsageHandlerInterface {
+ public:
+  static rtc::scoped_refptr<BandwidthQualityScalerResource> Create();
+
+  BandwidthQualityScalerResource();
+  ~BandwidthQualityScalerResource() override;
+
+  bool is_started() const;
+
+  void OnEncodeCompleted(const EncodedImage& encoded_image,
+                         int64_t time_sent_in_us,
+                         int64_t encoded_image_size_bytes);
+
+  void StartCheckForOveruse(
+      const std::vector<VideoEncoder::ResolutionBitrateLimits>&
+          resolution_bitrate_limits);
+  void StopCheckForOveruse();
+
+  // BandwidthScalerQpUsageHandlerInterface implementation.
+  void OnReportUsageBandwidthHigh() override;
+  void OnReportUsageBandwidthLow() override;
+
+ private:
+  std::unique_ptr<BandwidthQualityScaler> bandwidth_quality_scaler_
+      RTC_GUARDED_BY(encoder_queue());
+};
+
+}  // namespace webrtc
+
+#endif  // VIDEO_ADAPTATION_BANDWIDTH_QUALITY_SCALER_RESOURCE_H_