Reland "Rename `requested_resolution` to `scale_resolution_down_to`."

This is a reland of commit 82617ac51e7825db53451818f4d1ad52b69761fd

The reason for the revert was a downstream use of
`rtc::VideoSinkWants::requested_resolution`, so in this reland we don't
rename this field, it's fine just to rename the one in
RtpEncodingParameters for now.

Original change's description:
> Rename `requested_resolution` to `scale_resolution_down_to`.
>
> This is a pure refactor/rename CL without any changes in behavior.
>
> This field is called scaleResolutionDownTo in the spec and JavaScript.
> Let's make C++ match to avoid confusion.
>
> In order not to break downstream during the transition a variable with
> the old name being a pure reference to the renamed attribute is added.
> This means we have to add custom constructors, but we can change this
> back to "= default" when the transition is completed, which should only
> be a couple of CLs away.
>
> Bug: webrtc:375048799
> Change-Id: If755102ccd79d46020ce5b33acd3dfcc29799e47
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/366560
> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
> Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
> Commit-Queue: Henrik Boström <hbos@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#43300}

NOTRY=True

Bug: webrtc:375048799
Change-Id: Ic4ee156c1d50aa36070a8d84059870791dcbbe5e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/366660
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43304}
diff --git a/api/rtp_parameters.cc b/api/rtp_parameters.cc
index 178aeb8..6b550d0 100644
--- a/api/rtp_parameters.cc
+++ b/api/rtp_parameters.cc
@@ -106,9 +106,27 @@
 RtpRtxParameters::RtpRtxParameters(const RtpRtxParameters& rhs) = default;
 RtpRtxParameters::~RtpRtxParameters() = default;
 
-RtpEncodingParameters::RtpEncodingParameters() = default;
-RtpEncodingParameters::RtpEncodingParameters(const RtpEncodingParameters& rhs) =
-    default;
+// TODO(https://crbug.com/webrtc/375048799): Use "= default" when
+// `requested_resolution` has been deleted
+RtpEncodingParameters::RtpEncodingParameters()
+    : requested_resolution(scale_resolution_down_to) {}
+RtpEncodingParameters::RtpEncodingParameters(const RtpEncodingParameters& rhs)
+    : ssrc(rhs.ssrc),
+      bitrate_priority(rhs.bitrate_priority),
+      network_priority(rhs.network_priority),
+      max_bitrate_bps(rhs.max_bitrate_bps),
+      min_bitrate_bps(rhs.min_bitrate_bps),
+      max_framerate(rhs.max_framerate),
+      num_temporal_layers(rhs.num_temporal_layers),
+      scale_resolution_down_by(rhs.scale_resolution_down_by),
+      scalability_mode(rhs.scalability_mode),
+      scale_resolution_down_to(rhs.scale_resolution_down_to),
+      requested_resolution(scale_resolution_down_to),
+      active(rhs.active),
+      rid(rhs.rid),
+      request_key_frame(rhs.request_key_frame),
+      adaptive_ptime(rhs.adaptive_ptime),
+      codec(rhs.codec) {}
 RtpEncodingParameters::~RtpEncodingParameters() = default;
 
 RtpCodecParameters::RtpCodecParameters() = default;
diff --git a/api/rtp_parameters.h b/api/rtp_parameters.h
index ec2243d..b82e5b6 100644
--- a/api/rtp_parameters.h
+++ b/api/rtp_parameters.h
@@ -497,23 +497,22 @@
   // https://w3c.github.io/webrtc-svc/#rtcrtpencodingparameters
   std::optional<std::string> scalability_mode;
 
-  // Requested encode resolution.
+  // This is an alternative API to `scale_resolution_down_by` but expressed in
+  // absolute terms (max width and max height) as opposed to relative terms (a
+  // scaling factor that is relative to the input frame size).
   //
-  // This field provides an alternative to `scale_resolution_down_by`
-  // that is not dependent on the video source.
+  // If both `scale_resolution_down_by` and `scale_resolution_down_to` are
+  // specified, the "scale by" value is ignored.
   //
-  // When setting requested_resolution it is not necessary to adapt the
-  // video source using OnOutputFormatRequest, since the VideoStreamEncoder
-  // will apply downscaling if necessary. requested_resolution will also be
-  // propagated to the video source, this allows downscaling earlier in the
-  // pipeline which can be beneficial if the source is consumed by multiple
-  // encoders, but is not strictly necessary.
+  // See spec:
+  // https://w3c.github.io/webrtc-extensions/#dom-rtcrtpencodingparameters-scaleresolutiondownto
   //
-  // The `requested_resolution` is subject to resource adaptation.
-  //
-  // It is an error to set both `requested_resolution` and
-  // `scale_resolution_down_by`.
-  std::optional<Resolution> requested_resolution;
+  // This was previously known as "requested_resolution" in C++.
+  std::optional<Resolution> scale_resolution_down_to;
+  // Alternative name for `scale_resolution_down_to`.
+  // TODO(https://crbug.com/webrtc/375048799): Delete when downstream projects
+  // have migrated from `requested_resolution` to `scale_resolution_down_to`.
+  std::optional<Resolution>& requested_resolution;
 
   // For an RtpSender, set to true to cause this encoding to be encoded and
   // sent, and false for it not to be encoded and sent. This allows control
@@ -545,11 +544,31 @@
            scale_resolution_down_by == o.scale_resolution_down_by &&
            active == o.active && rid == o.rid &&
            adaptive_ptime == o.adaptive_ptime &&
-           requested_resolution == o.requested_resolution && codec == o.codec;
+           scale_resolution_down_to == o.scale_resolution_down_to &&
+           codec == o.codec;
   }
   bool operator!=(const RtpEncodingParameters& o) const {
     return !(*this == o);
   }
+  // TODO(https://crbug.com/webrtc/375048799): Delete this operator overload
+  // when `requested_resolution` has been deleted in favor of auto generated op.
+  void operator=(const RtpEncodingParameters& o) {
+    ssrc = o.ssrc;
+    bitrate_priority = o.bitrate_priority;
+    network_priority = o.network_priority;
+    max_bitrate_bps = o.max_bitrate_bps;
+    min_bitrate_bps = o.min_bitrate_bps;
+    max_framerate = o.max_framerate;
+    num_temporal_layers = o.num_temporal_layers;
+    scale_resolution_down_by = o.scale_resolution_down_by;
+    scalability_mode = o.scalability_mode;
+    scale_resolution_down_to = o.scale_resolution_down_to;
+    active = o.active;
+    rid = o.rid;
+    request_key_frame = o.request_key_frame;
+    adaptive_ptime = o.adaptive_ptime;
+    codec = o.codec;
+  }
 };
 
 struct RTC_EXPORT RtpCodecParameters : public RtpCodec {
diff --git a/api/video/video_source_interface.h b/api/video/video_source_interface.h
index d85e56b..f378bff 100644
--- a/api/video/video_source_interface.h
+++ b/api/video/video_source_interface.h
@@ -82,7 +82,8 @@
   // should only be used as a hint when constructing the webrtc::VideoFrame.
   std::vector<FrameSize> resolutions;
 
-  // This is the resolution requested by the user using RtpEncodingParameters.
+  // This is the resolution requested by the user using RtpEncodingParameters,
+  // which is the maximum `scale_resolution_down_by` value of any encoding.
   std::optional<FrameSize> requested_resolution;
 
   // `is_active` : Is this VideoSinkWants from an encoder that is encoding any
@@ -96,7 +97,7 @@
   // that aggregates several VideoSinkWants (and sends them to
   // AdaptedVideoTrackSource).
   struct Aggregates {
-    // `active_without_requested_resolution` is set by VideoBroadcaster
+    // `any_active_without_requested_resolution` is set by VideoBroadcaster
     // when aggregating sink wants if there exists any sink (encoder) that is
     // active but has not set the `requested_resolution`, i.e is relying on
     // OnOutputFormatRequest to handle encode resolution.
diff --git a/media/base/media_engine.cc b/media/base/media_engine.cc
index 0b4b930..0ce26ff 100644
--- a/media/base/media_engine.cc
+++ b/media/base/media_engine.cc
@@ -160,7 +160,7 @@
     const webrtc::FieldTrialsView& field_trials) {
   using webrtc::RTCErrorType;
 
-  bool has_requested_resolution = false;
+  bool has_scale_resolution_down_to = false;
   for (size_t i = 0; i < rtp_parameters.encodings.size(); ++i) {
     if (rtp_parameters.encodings[i].bitrate_priority <= 0) {
       LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_RANGE,
@@ -199,10 +199,10 @@
       }
     }
 
-    if (rtp_parameters.encodings[i].requested_resolution.has_value()) {
-      has_requested_resolution = true;
-      if (rtp_parameters.encodings[i].requested_resolution->width <= 0 ||
-          rtp_parameters.encodings[i].requested_resolution->height <= 0) {
+    if (rtp_parameters.encodings[i].scale_resolution_down_to.has_value()) {
+      has_scale_resolution_down_to = true;
+      if (rtp_parameters.encodings[i].scale_resolution_down_to->width <= 0 ||
+          rtp_parameters.encodings[i].scale_resolution_down_to->height <= 0) {
         LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
                              "The resolution dimensions must be positive.");
       }
@@ -218,11 +218,11 @@
     }
   }
 
-  if (has_requested_resolution &&
+  if (has_scale_resolution_down_to &&
       absl::c_any_of(rtp_parameters.encodings,
                      [](const webrtc::RtpEncodingParameters& encoding) {
                        return encoding.active &&
-                              !encoding.requested_resolution.has_value();
+                              !encoding.scale_resolution_down_to.has_value();
                      })) {
     LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
                          "If a resolution is specified on any encoding then "
diff --git a/media/base/video_adapter.cc b/media/base/video_adapter.cc
index 22ce693..1ba7a08 100644
--- a/media/base/video_adapter.cc
+++ b/media/base/video_adapter.cc
@@ -244,27 +244,30 @@
   RTC_DCHECK_EQ(0, *out_height % resolution_alignment_);
 
   // Lastly, make the output size fit within the resolution restrictions as
-  // specified by `requested_resolution_`. This does not modify aspect ratio or
-  // cropping, only `out_width` and `out_height`.
-  if (requested_resolution_.has_value()) {
-    // Make frame and requested resolution have matching orientation.
-    webrtc::Resolution requested_resolution = requested_resolution_.value();
-    if ((*out_width < *out_height) !=
-        (requested_resolution_->width < requested_resolution_->height)) {
-      requested_resolution = {.width = requested_resolution_->height,
-                              .height = requested_resolution_->width};
+  // specified by `scale_resolution_down_to_`. This does not modify aspect ratio
+  // or cropping, only `out_width` and `out_height`.
+  if (scale_resolution_down_to_.has_value()) {
+    // Make frame and "scale to" have matching orientation.
+    webrtc::Resolution scale_resolution_down_to =
+        scale_resolution_down_to_.value();
+    if ((*out_width < *out_height) != (scale_resolution_down_to_->width <
+                                       scale_resolution_down_to_->height)) {
+      scale_resolution_down_to = {.width = scale_resolution_down_to_->height,
+                                  .height = scale_resolution_down_to_->width};
     }
     // Downscale by smallest scaling factor, if necessary.
     if (*out_width > 0 && *out_height > 0 &&
-        (requested_resolution.width < *out_width ||
-         requested_resolution.height < *out_height)) {
+        (scale_resolution_down_to.width < *out_width ||
+         scale_resolution_down_to.height < *out_height)) {
       double scale_factor = std::min(
-          requested_resolution.width / static_cast<double>(*out_width),
-          requested_resolution.height / static_cast<double>(*out_height));
-      *out_width = roundUp(std::round(*out_width * scale_factor),
-                           resolution_alignment_, requested_resolution.width);
-      *out_height = roundUp(std::round(*out_height * scale_factor),
-                            resolution_alignment_, requested_resolution.height);
+          scale_resolution_down_to.width / static_cast<double>(*out_width),
+          scale_resolution_down_to.height / static_cast<double>(*out_height));
+      *out_width =
+          roundUp(std::round(*out_width * scale_factor), resolution_alignment_,
+                  scale_resolution_down_to.width);
+      *out_height =
+          roundUp(std::round(*out_height * scale_factor), resolution_alignment_,
+                  scale_resolution_down_to.height);
       RTC_DCHECK_EQ(0, *out_width % resolution_alignment_);
       RTC_DCHECK_EQ(0, *out_height % resolution_alignment_);
     }
@@ -346,7 +349,7 @@
   if (stashed_output_format_request_) {
     // Save the output format request for later use in case the encoder making
     // this call would become active, because currently all active encoders use
-    // requested_resolution instead.
+    // scale_resolution_down_to instead.
     stashed_output_format_request_ = request;
     RTC_LOG(LS_INFO) << "Stashing OnOutputFormatRequest: "
                      << stashed_output_format_request_->ToString();
@@ -370,21 +373,22 @@
       source_resolution_alignment_, sink_wants.resolution_alignment);
   // Convert from std::optional<rtc::VideoSinkWants::FrameSize> to
   // std::optional<webrtc::Resolution>. Both are {int,int}.
-  requested_resolution_ = std::nullopt;
+  scale_resolution_down_to_ = std::nullopt;
   if (sink_wants.requested_resolution.has_value()) {
-    requested_resolution_ = {.width = sink_wants.requested_resolution->width,
-                             .height = sink_wants.requested_resolution->height};
+    scale_resolution_down_to_ = {
+        .width = sink_wants.requested_resolution->width,
+        .height = sink_wants.requested_resolution->height};
   }
 
-  // If requested_resolution is used, and there are no active encoders
-  // that are NOT using requested_resolution (aka newapi), then override
-  // calls to OnOutputFormatRequest and use values from requested_resolution
+  // If scale_resolution_down_to is used, and there are no active encoders
+  // that are NOT using scale_resolution_down_to (aka newapi), then override
+  // calls to OnOutputFormatRequest and use values from scale_resolution_down_to
   // instead (combined with qualityscaling based on pixel counts above).
   if (!sink_wants.requested_resolution) {
     if (stashed_output_format_request_) {
       // because current active_output_format_request is based on
-      // requested_resolution logic, while current encoder(s) doesn't want that,
-      // we have to restore the stashed request.
+      // scale_resolution_down_to logic, while current encoder(s) doesn't want
+      // that, we have to restore the stashed request.
       RTC_LOG(LS_INFO) << "Unstashing OnOutputFormatRequest: "
                        << stashed_output_format_request_->ToString();
       output_format_request_ = *stashed_output_format_request_;
@@ -393,9 +397,10 @@
     return;
   }
 
-  // The code below is only needed when `requested_resolution` is signalled back
-  // to the video source which only happens if
-  // `VideoStreamEncoderSettings::use_standard_requested_resolution` is false.
+  // The code below is only needed when `scale_resolution_down_to` is signalled
+  // back to the video source which only happens if
+  // `VideoStreamEncoderSettings::use_standard_scale_resolution_down_to` is
+  // false.
   // TODO(https://crbug.com/webrtc/366284861): Delete the code below as part of
   // deleting this flag and only supporting the standard behavior.
 
@@ -413,8 +418,8 @@
                      << stashed_output_format_request_->ToString();
   }
 
-  // Clear the output format request. Requested resolution will be applied
-  // instead which happens inside AdaptFrameResolution().
+  // Clear the output format request, `scale_resolution_down_to_` will be
+  // applied instead which happens inside AdaptFrameResolution().
   output_format_request_ = {};
 }
 
diff --git a/media/base/video_adapter.h b/media/base/video_adapter.h
index 4cc4a38..8628cd9 100644
--- a/media/base/video_adapter.h
+++ b/media/base/video_adapter.h
@@ -149,14 +149,14 @@
   int resolution_request_target_pixel_count_ RTC_GUARDED_BY(mutex_);
   int resolution_request_max_pixel_count_ RTC_GUARDED_BY(mutex_);
   int max_framerate_request_ RTC_GUARDED_BY(mutex_);
-  std::optional<webrtc::Resolution> requested_resolution_
+  std::optional<webrtc::Resolution> scale_resolution_down_to_
       RTC_GUARDED_BY(mutex_);
 
   // Stashed OutputFormatRequest that is used to save value of
   // OnOutputFormatRequest in case all active encoders are using
-  // requested_resolution. I.e when all active encoders are using
-  // requested_resolution, the call to OnOutputFormatRequest is ignored
-  // and the value from requested_resolution is used instead (to scale/crop
+  // scale_resolution_down_to. I.e when all active encoders are using
+  // scale_resolution_down_to, the call to OnOutputFormatRequest is ignored
+  // and the value from scale_resolution_down_to is used instead (to scale/crop
   // frame). This allows for an application to only use
   // RtpEncodingParameters::request_resolution and get the same behavior as if
   // it had used VideoAdapter::OnOutputFormatRequest.
diff --git a/media/base/video_adapter_unittest.cc b/media/base/video_adapter_unittest.cc
index 98dd5b9..e1a8055 100644
--- a/media/base/video_adapter_unittest.cc
+++ b/media/base/video_adapter_unittest.cc
@@ -52,15 +52,15 @@
 }
 
 rtc::VideoSinkWants BuildSinkWants(
-    std::optional<webrtc::Resolution> requested_resolution,
+    std::optional<webrtc::Resolution> scale_resolution_down_to,
     bool any_active_without_requested_resolution) {
   rtc::VideoSinkWants wants;
   wants.max_framerate_fps = kDefaultFps;
   wants.resolution_alignment = 1;
   wants.is_active = true;
-  if (requested_resolution) {
+  if (scale_resolution_down_to) {
     wants.requested_resolution.emplace(rtc::VideoSinkWants::FrameSize(
-        requested_resolution->width, requested_resolution->height));
+        scale_resolution_down_to->width, scale_resolution_down_to->height));
   }
   wants.aggregates.emplace(rtc::VideoSinkWants::Aggregates());
   wants.aggregates->any_active_without_requested_resolution =
@@ -1202,8 +1202,9 @@
 }
 
 // Verify the cases the OnOutputFormatRequest is ignored and
-// requested_resolution is used instead.
-TEST_P(VideoAdapterTest, UseRequestedResolutionInsteadOfOnOutputFormatRequest) {
+// scale_resolution_down_to is used instead.
+TEST_P(VideoAdapterTest,
+       UseScaleResolutionDownToInsteadOfOnOutputFormatRequest) {
   {
     // Both new and old API active => Use OnOutputFormatRequest
     OnOutputFormatRequest(640, 360, kDefaultFps);
@@ -1218,7 +1219,7 @@
   }
   {
     // New API active, old API inactive, ignore OnOutputFormatRequest and use
-    // requested_resolution.
+    // scale_resolution_down_to.
     OnOutputFormatRequest(640, 360, kDefaultFps);
     adapter_.OnSinkWants(
         BuildSinkWants(Resolution{.width = 960, .height = 540},
@@ -1256,7 +1257,7 @@
         Eq(Resolution{.width = 960, .height = 540}));
 
     // This is ignored since there is not any active NOT using
-    // requested_resolution.
+    // scale_resolution_down_to.
     OnOutputFormatRequest(320, 180, kDefaultFps);
 
     EXPECT_THAT(
@@ -1276,7 +1277,7 @@
   }
 }
 
-TEST_P(VideoAdapterTest, RequestedResolutionIsOrientationAgnostic) {
+TEST_P(VideoAdapterTest, ScaleResolutionDownToIsOrientationAgnostic) {
   // Request 1280x720 when frame is 720x1280.
   {
     adapter_.OnSinkWants(
@@ -1301,7 +1302,7 @@
   }
 }
 
-TEST_P(VideoAdapterTest, RequestedResolutionMaintainsAspectRatio) {
+TEST_P(VideoAdapterTest, ScaleResolutionDownToMaintainsAspectRatio) {
   // Request 720x720.
   adapter_.OnSinkWants(
       BuildSinkWants(Resolution{.width = 720, .height = 720},
@@ -1366,7 +1367,7 @@
 }
 
 TEST_P(VideoAdapterWithSourceAlignmentTest,
-       RequestedResolutionMaintainsAspectRatioWithAlignment) {
+       ScaleResolutionDownToMaintainsAspectRatioWithAlignment) {
   // Request 720x720.
   adapter_.OnSinkWants(
       BuildSinkWants(Resolution{.width = 720, .height = 720},
diff --git a/media/base/video_broadcaster.cc b/media/base/video_broadcaster.cc
index b34b8db..772fc10 100644
--- a/media/base/video_broadcaster.cc
+++ b/media/base/video_broadcaster.cc
@@ -131,7 +131,7 @@
   // "ignore" encoders that are not active. But that would
   // probably require a controlled roll out with a field trials?
   // To play it safe, only ignore inactive encoders is there is an
-  // active encoder using the new api (requested_resolution),
+  // active encoder using the new api (scale_resolution_down_to),
   // this means that there is only a behavioural change when using new
   // api.
   bool ignore_inactive_encoders_old_api = false;
@@ -171,8 +171,8 @@
     wants.resolution_alignment = cricket::LeastCommonMultiple(
         wants.resolution_alignment, sink.wants.resolution_alignment);
 
-    // Pick MAX(requested_resolution) since the actual can be downscaled
-    // in encoder instead.
+    // Pick MAX(requested_resolution) since the actual can be downscaled in
+    // encoder instead.
     if (sink.wants.requested_resolution) {
       if (!wants.requested_resolution) {
         wants.requested_resolution = sink.wants.requested_resolution;
diff --git a/media/base/video_broadcaster_unittest.cc b/media/base/video_broadcaster_unittest.cc
index 7ab122d..b75b42e 100644
--- a/media/base/video_broadcaster_unittest.cc
+++ b/media/base/video_broadcaster_unittest.cc
@@ -332,7 +332,7 @@
   broadcaster.ProcessConstraints(webrtc::VideoTrackSourceConstraints{2, 3});
 }
 
-TEST(VideoBroadcasterTest, AppliesMaxOfSinkWantsRequestedResolution) {
+TEST(VideoBroadcasterTest, AppliesMaxOfSinkWantsScaleResolutionDownTo) {
   VideoBroadcaster broadcaster;
 
   FakeVideoRenderer sink1;
@@ -374,7 +374,7 @@
   EXPECT_EQ(false, broadcaster.wants().is_active);
 }
 
-TEST(VideoBroadcasterTest, AnyActiveWithoutRequestedResolution) {
+TEST(VideoBroadcasterTest, AnyActiveWithoutScaleResolutionDownTo) {
   VideoBroadcaster broadcaster;
 
   FakeVideoRenderer sink1;
@@ -402,8 +402,9 @@
 }
 
 // This verifies that the VideoSinkWants from a Sink that is_active = false
-// is ignored IF there is an active sink using new api (Requested_Resolution).
-// The uses resolution_alignment for verification.
+// is ignored IF there is an active sink using requested_resolution (controlled
+// via new API scale_resolution_down_to). The uses resolution_alignment for
+// verification.
 TEST(VideoBroadcasterTest, IgnoreInactiveSinkIfNewApiUsed) {
   VideoBroadcaster broadcaster;
 
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 27512b9..996f0d7 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2087,8 +2087,8 @@
          rtp_parameters_.encodings[i].scale_resolution_down_by) ||
         (new_parameters.encodings[i].num_temporal_layers !=
          rtp_parameters_.encodings[i].num_temporal_layers) ||
-        (new_parameters.encodings[i].requested_resolution !=
-         rtp_parameters_.encodings[i].requested_resolution) ||
+        (new_parameters.encodings[i].scale_resolution_down_to !=
+         rtp_parameters_.encodings[i].scale_resolution_down_to) ||
         (new_parameters.encodings[i].scalability_mode !=
          rtp_parameters_.encodings[i].scalability_mode) ||
         (new_parameters.encodings[i].codec !=
@@ -2228,7 +2228,7 @@
        rtp_parameters_.encodings) {
     if (encoding.scalability_mode.has_value() &&
         (encoding.scale_resolution_down_by.has_value() ||
-         encoding.requested_resolution.has_value())) {
+         encoding.scale_resolution_down_to.has_value())) {
       legacy_scalability_mode = false;
       break;
     }
@@ -2309,8 +2309,8 @@
       encoder_config.simulcast_layers[i].num_temporal_layers =
           *rtp_parameters_.encodings[i].num_temporal_layers;
     }
-    encoder_config.simulcast_layers[i].requested_resolution =
-        rtp_parameters_.encodings[i].requested_resolution;
+    encoder_config.simulcast_layers[i].scale_resolution_down_to =
+        rtp_parameters_.encodings[i].scale_resolution_down_to;
   }
 
   encoder_config.legacy_conference_mode = parameters_.conference_mode;
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index ea9f703..e2153e8 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -9750,7 +9750,7 @@
   send_channel_->SetEncoderSelector(kSsrc, nullptr);
 }
 
-TEST_F(WebRtcVideoChannelTest, RequestedResolutionSinglecast) {
+TEST_F(WebRtcVideoChannelTest, ScaleResolutionDownToSinglecast) {
   cricket::VideoSenderParameters parameters;
   parameters.codecs.push_back(GetEngineCodec("VP8"));
   ASSERT_TRUE(send_channel_->SetSenderParameters(parameters));
@@ -9762,12 +9762,12 @@
   EXPECT_TRUE(
       send_channel_->SetVideoSend(last_ssrc_, nullptr, &frame_forwarder));
 
-  {  // TEST requested_resolution < frame size
+  {  // TEST scale_resolution_down_to < frame size
     webrtc::RtpParameters rtp_parameters =
         send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 640,
-                                                        .height = 360};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 640,
+                                                            .height = 360};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
@@ -9778,11 +9778,11 @@
     EXPECT_EQ(rtc::checked_cast<size_t>(360), streams[0].height);
   }
 
-  {  // TEST requested_resolution == frame size
+  {  // TEST scale_resolution_down_to == frame size
     auto rtp_parameters = send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 1280,
-                                                        .height = 720};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 1280,
+                                                            .height = 720};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
@@ -9792,11 +9792,11 @@
     EXPECT_EQ(rtc::checked_cast<size_t>(720), streams[0].height);
   }
 
-  {  // TEST requested_resolution > frame size
+  {  // TEST scale_resolution_down_to > frame size
     auto rtp_parameters = send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 2 * 1280,
-                                                        .height = 2 * 720};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 2 * 1280,
+                                                            .height = 2 * 720};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
@@ -9809,7 +9809,7 @@
   EXPECT_TRUE(send_channel_->SetVideoSend(last_ssrc_, nullptr, nullptr));
 }
 
-TEST_F(WebRtcVideoChannelTest, RequestedResolutionSinglecastScaling) {
+TEST_F(WebRtcVideoChannelTest, ScaleResolutionDownToSinglecastScaling) {
   cricket::VideoSenderParameters parameters;
   parameters.codecs.push_back(GetEngineCodec("VP8"));
   ASSERT_TRUE(send_channel_->SetSenderParameters(parameters));
@@ -9824,8 +9824,8 @@
   {
     auto rtp_parameters = send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 720,
-                                                        .height = 720};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 720,
+                                                            .height = 720};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
@@ -9841,8 +9841,8 @@
   {
     auto rtp_parameters = send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 1280,
-                                                        .height = 1280};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 1280,
+                                                            .height = 1280};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
@@ -9857,8 +9857,8 @@
   {
     auto rtp_parameters = send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 650,
-                                                        .height = 650};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 650,
+                                                            .height = 650};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     auto streams = stream->GetVideoStreams();
@@ -9872,8 +9872,8 @@
   {
     auto rtp_parameters = send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 2560,
-                                                        .height = 1440};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 2560,
+                                                            .height = 1440};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     auto streams = stream->GetVideoStreams();
@@ -9886,7 +9886,7 @@
   EXPECT_TRUE(send_channel_->SetVideoSend(last_ssrc_, nullptr, nullptr));
 }
 
-TEST_F(WebRtcVideoChannelTest, RequestedResolutionSimulcast) {
+TEST_F(WebRtcVideoChannelTest, ScaleResolutionDownToSimulcast) {
   cricket::VideoSenderParameters parameters;
   parameters.codecs.push_back(GetEngineCodec("VP8"));
   ASSERT_TRUE(send_channel_->SetSenderParameters(parameters));
@@ -9902,12 +9902,12 @@
     webrtc::RtpParameters rtp_parameters =
         send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(3UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 320,
-                                                        .height = 180};
-    rtp_parameters.encodings[1].requested_resolution = {.width = 640,
-                                                        .height = 360};
-    rtp_parameters.encodings[2].requested_resolution = {.width = 1280,
-                                                        .height = 720};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 320,
+                                                            .height = 180};
+    rtp_parameters.encodings[1].scale_resolution_down_to = {.width = 640,
+                                                            .height = 360};
+    rtp_parameters.encodings[2].scale_resolution_down_to = {.width = 1280,
+                                                            .height = 720};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
@@ -9924,12 +9924,12 @@
     webrtc::RtpParameters rtp_parameters =
         send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(3UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 320,
-                                                        .height = 180};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 320,
+                                                            .height = 180};
     rtp_parameters.encodings[1].active = false;
 
-    rtp_parameters.encodings[2].requested_resolution = {.width = 1280,
-                                                        .height = 720};
+    rtp_parameters.encodings[2].scale_resolution_down_to = {.width = 1280,
+                                                            .height = 720};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
@@ -9945,13 +9945,13 @@
     webrtc::RtpParameters rtp_parameters =
         send_channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(3UL, rtp_parameters.encodings.size());
-    rtp_parameters.encodings[0].requested_resolution = {.width = 320,
-                                                        .height = 180};
+    rtp_parameters.encodings[0].scale_resolution_down_to = {.width = 320,
+                                                            .height = 180};
     rtp_parameters.encodings[1].active = true;
-    rtp_parameters.encodings[1].requested_resolution = {.width = 640,
-                                                        .height = 360};
-    rtp_parameters.encodings[2].requested_resolution = {.width = 960,
-                                                        .height = 540};
+    rtp_parameters.encodings[1].scale_resolution_down_to = {.width = 640,
+                                                            .height = 360};
+    rtp_parameters.encodings[2].scale_resolution_down_to = {.width = 960,
+                                                            .height = 540};
     send_channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters);
 
     frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
diff --git a/pc/peer_connection_encodings_integrationtest.cc b/pc/peer_connection_encodings_integrationtest.cc
index 079dbbe..fd86173 100644
--- a/pc/peer_connection_encodings_integrationtest.cc
+++ b/pc/peer_connection_encodings_integrationtest.cc
@@ -2115,17 +2115,16 @@
   ASSERT_TRUE(transceiver_or_error.ok());
 }
 
-TEST_F(PeerConnectionEncodingsIntegrationTest,
-       RequestedResolutionParameterChecking) {
+TEST_F(PeerConnectionEncodingsIntegrationTest, ScaleToParameterChecking) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> pc_wrapper = CreatePc();
 
-  // AddTransceiver: If `requested_resolution` is specified on any encoding it
-  // must be specified on all encodings.
+  // AddTransceiver: If `scale_resolution_down_to` is specified on any encoding
+  // it must be specified on all encodings.
   RtpTransceiverInit init;
   RtpEncodingParameters encoding;
-  encoding.requested_resolution = std::nullopt;
+  encoding.scale_resolution_down_to = std::nullopt;
   init.send_encodings.push_back(encoding);
-  encoding.requested_resolution = {.width = 1280, .height = 720};
+  encoding.scale_resolution_down_to = {.width = 1280, .height = 720};
   init.send_encodings.push_back(encoding);
   auto transceiver_or_error =
       pc_wrapper->pc()->AddTransceiver(cricket::MEDIA_TYPE_VIDEO, init);
@@ -2134,64 +2133,74 @@
             RTCErrorType::UNSUPPORTED_OPERATION);
 
   // AddTransceiver: Width and height must not be zero.
-  init.send_encodings[0].requested_resolution = {.width = 1280, .height = 0};
-  init.send_encodings[1].requested_resolution = {.width = 0, .height = 720};
+  init.send_encodings[0].scale_resolution_down_to = {.width = 1280,
+                                                     .height = 0};
+  init.send_encodings[1].scale_resolution_down_to = {.width = 0, .height = 720};
   transceiver_or_error =
       pc_wrapper->pc()->AddTransceiver(cricket::MEDIA_TYPE_VIDEO, init);
   EXPECT_FALSE(transceiver_or_error.ok());
   EXPECT_EQ(transceiver_or_error.error().type(),
             RTCErrorType::UNSUPPORTED_OPERATION);
 
-  // AddTransceiver: Specifying both `requested_resolution` and
+  // AddTransceiver: Specifying both `scale_resolution_down_to` and
   // `scale_resolution_down_by` is allowed (the latter is ignored).
-  init.send_encodings[0].requested_resolution = {.width = 640, .height = 480};
+  init.send_encodings[0].scale_resolution_down_to = {.width = 640,
+                                                     .height = 480};
   init.send_encodings[0].scale_resolution_down_by = 1.0;
-  init.send_encodings[1].requested_resolution = {.width = 1280, .height = 720};
+  init.send_encodings[1].scale_resolution_down_to = {.width = 1280,
+                                                     .height = 720};
   init.send_encodings[1].scale_resolution_down_by = 2.0;
   transceiver_or_error =
       pc_wrapper->pc()->AddTransceiver(cricket::MEDIA_TYPE_VIDEO, init);
   ASSERT_TRUE(transceiver_or_error.ok());
 
-  // SetParameters: If `requested_resolution` is specified on any active
+  // SetParameters: If `scale_resolution_down_to` is specified on any active
   // encoding it must be specified on all active encodings.
   auto sender = transceiver_or_error.value()->sender();
   auto parameters = sender->GetParameters();
-  parameters.encodings[0].requested_resolution = {.width = 640, .height = 480};
-  parameters.encodings[1].requested_resolution = std::nullopt;
+  parameters.encodings[0].scale_resolution_down_to = {.width = 640,
+                                                      .height = 480};
+  parameters.encodings[1].scale_resolution_down_to = std::nullopt;
   auto error = sender->SetParameters(parameters);
   EXPECT_FALSE(error.ok());
   EXPECT_EQ(error.type(), RTCErrorType::INVALID_MODIFICATION);
-  // But it's OK not to specify `requested_resolution` on an inactive encoding.
+  // But it's OK not to specify `scale_resolution_down_to` on an inactive
+  // encoding.
   parameters = sender->GetParameters();
-  parameters.encodings[0].requested_resolution = {.width = 640, .height = 480};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 640,
+                                                      .height = 480};
   parameters.encodings[1].active = false;
-  parameters.encodings[1].requested_resolution = std::nullopt;
+  parameters.encodings[1].scale_resolution_down_to = std::nullopt;
   error = sender->SetParameters(parameters);
   EXPECT_TRUE(error.ok());
 
   // SetParameters: Width and height must not be zero.
   sender = transceiver_or_error.value()->sender();
   parameters = sender->GetParameters();
-  parameters.encodings[0].requested_resolution = {.width = 1280, .height = 0};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 1280,
+                                                      .height = 0};
   parameters.encodings[1].active = true;
-  parameters.encodings[1].requested_resolution = {.width = 0, .height = 720};
+  parameters.encodings[1].scale_resolution_down_to = {.width = 0,
+                                                      .height = 720};
   error = sender->SetParameters(parameters);
   EXPECT_FALSE(error.ok());
   EXPECT_EQ(error.type(), RTCErrorType::INVALID_MODIFICATION);
 
-  // SetParameters: Specifying both `requested_resolution` and
+  // SetParameters: Specifying both `scale_resolution_down_to` and
   // `scale_resolution_down_by` is allowed (the latter is ignored).
   parameters = sender->GetParameters();
-  parameters.encodings[0].requested_resolution = {.width = 640, .height = 480};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 640,
+                                                      .height = 480};
   parameters.encodings[0].scale_resolution_down_by = 2.0;
-  parameters.encodings[1].requested_resolution = {.width = 1280, .height = 720};
+  parameters.encodings[1].scale_resolution_down_to = {.width = 1280,
+                                                      .height = 720};
   parameters.encodings[1].scale_resolution_down_by = 1.0;
   error = sender->SetParameters(parameters);
   EXPECT_TRUE(error.ok());
 }
 
 TEST_F(PeerConnectionEncodingsIntegrationTest,
-       ScaleResolutionDownByIsIgnoredWhenRequestedResolutionIsSpecified) {
+       ScaleResolutionDownByIsIgnoredWhenScaleToIsSpecified) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
   rtc::scoped_refptr<PeerConnectionTestWrapper> remote_pc_wrapper = CreatePc();
 
@@ -2204,7 +2213,7 @@
   RtpTransceiverInit init;
   RtpEncodingParameters encoding;
   encoding.scale_resolution_down_by = 2.0;
-  encoding.requested_resolution = {.width = 640, .height = 360};
+  encoding.scale_resolution_down_to = {.width = 640, .height = 360};
   init.send_encodings.push_back(encoding);
   auto transceiver_or_error =
       local_pc_wrapper->pc()->AddTransceiver(track, init);
@@ -2222,7 +2231,7 @@
 }
 
 // Tests that use the standard path (specifying both `scalability_mode` and
-// `scale_resolution_down_by` or `requested_resolution`) should pass for all
+// `scale_resolution_down_by` or `scale_resolution_down_to`) should pass for all
 // codecs.
 class PeerConnectionEncodingsIntegrationParameterizedTest
     : public PeerConnectionEncodingsIntegrationTest,
@@ -2358,9 +2367,9 @@
   EXPECT_THAT(*outbound_rtps[2]->scalability_mode, StrEq("L1T3"));
 }
 
-// Configure 4:2:1 using `requested_resolution`.
+// Configure 4:2:1 using `scale_resolution_down_to`.
 TEST_P(PeerConnectionEncodingsIntegrationParameterizedTest,
-       SimulcastWithRequestedResolution) {
+       SimulcastWithScaleTo) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
   if (SkipTestDueToAv1Missing(local_pc_wrapper)) {
     return;
@@ -2381,11 +2390,14 @@
   RtpParameters parameters = sender->GetParameters();
   ASSERT_THAT(parameters.encodings, SizeIs(3));
   parameters.encodings[0].scalability_mode = "L1T3";
-  parameters.encodings[0].requested_resolution = {.width = 320, .height = 180};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 320,
+                                                      .height = 180};
   parameters.encodings[1].scalability_mode = "L1T3";
-  parameters.encodings[1].requested_resolution = {.width = 640, .height = 360};
+  parameters.encodings[1].scale_resolution_down_to = {.width = 640,
+                                                      .height = 360};
   parameters.encodings[2].scalability_mode = "L1T3";
-  parameters.encodings[2].requested_resolution = {.width = 1280, .height = 720};
+  parameters.encodings[2].scale_resolution_down_to = {.width = 1280,
+                                                      .height = 720};
   sender->SetParameters(parameters);
 
   NegotiateWithSimulcastTweaks(local_pc_wrapper, remote_pc_wrapper);
@@ -2501,9 +2513,9 @@
 }
 
 // Simulcast starting in 720p 4:2:1 then changing to {180p, 360p, 540p} using
-// the `requested_resolution` API.
+// the `scale_resolution_down_to` API.
 TEST_P(PeerConnectionEncodingsIntegrationParameterizedTest,
-       SimulcastRequestedResolutionNoLongerPowerOfTwo) {
+       SimulcastScaleToNoLongerPowerOfTwo) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
   if (SkipTestDueToAv1Missing(local_pc_wrapper)) {
     return;
@@ -2525,11 +2537,14 @@
   RtpParameters parameters = sender->GetParameters();
   ASSERT_THAT(parameters.encodings, SizeIs(3));
   parameters.encodings[0].scalability_mode = "L1T1";
-  parameters.encodings[0].requested_resolution = {.width = 320, .height = 180};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 320,
+                                                      .height = 180};
   parameters.encodings[1].scalability_mode = "L1T1";
-  parameters.encodings[1].requested_resolution = {.width = 640, .height = 360};
+  parameters.encodings[1].scale_resolution_down_to = {.width = 640,
+                                                      .height = 360};
   parameters.encodings[2].scalability_mode = "L1T1";
-  parameters.encodings[2].requested_resolution = {.width = 1280, .height = 720};
+  parameters.encodings[2].scale_resolution_down_to = {.width = 1280,
+                                                      .height = 720};
   sender->SetParameters(parameters);
 
   NegotiateWithSimulcastTweaks(local_pc_wrapper, remote_pc_wrapper);
@@ -2548,9 +2563,12 @@
 
   // Configure {180p, 360p, 540p}.
   parameters = sender->GetParameters();
-  parameters.encodings[0].requested_resolution = {.width = 320, .height = 180};
-  parameters.encodings[1].requested_resolution = {.width = 640, .height = 360};
-  parameters.encodings[2].requested_resolution = {.width = 960, .height = 540};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 320,
+                                                      .height = 180};
+  parameters.encodings[1].scale_resolution_down_to = {.width = 640,
+                                                      .height = 360};
+  parameters.encodings[2].scale_resolution_down_to = {.width = 960,
+                                                      .height = 540};
   sender->SetParameters(parameters);
 
   // Wait for the new resolutions to be produced.
@@ -2577,11 +2595,11 @@
 }
 
 // The code path that disables layers based on resolution size should NOT run
-// when `requested_resolution` is specified. (It shouldn't run in any case but
-// that is an existing legacy code and non-compliance problem that we don't have
-// to repeat here.)
+// when `scale_resolution_down_to` is specified. (It shouldn't run in any case
+// but that is an existing legacy code and non-compliance problem that we don't
+// have to repeat here.)
 TEST_P(PeerConnectionEncodingsIntegrationParameterizedTest,
-       LowResolutionSimulcastWithRequestedResolution) {
+       LowResolutionSimulcastWithScaleTo) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
   if (SkipTestDueToAv1Missing(local_pc_wrapper)) {
     return;
@@ -2597,13 +2615,13 @@
   RtpEncodingParameters encoding;
   encoding.scalability_mode = "L1T3";
   encoding.rid = "q";
-  encoding.requested_resolution = {.width = 40, .height = 20};
+  encoding.scale_resolution_down_to = {.width = 40, .height = 20};
   init.send_encodings.push_back(encoding);
   encoding.rid = "h";
-  encoding.requested_resolution = {.width = 80, .height = 40};
+  encoding.scale_resolution_down_to = {.width = 80, .height = 40};
   init.send_encodings.push_back(encoding);
   encoding.rid = "f";
-  encoding.requested_resolution = {.width = 160, .height = 80};
+  encoding.scale_resolution_down_to = {.width = 160, .height = 80};
   init.send_encodings.push_back(encoding);
   rtc::scoped_refptr<MediaStreamInterface> stream =
       local_pc_wrapper->GetUserMedia(
@@ -2698,7 +2716,7 @@
 }
 
 TEST_P(PeerConnectionEncodingsIntegrationParameterizedTest,
-       RequestedResolutionDownscaleAndThenUpscale) {
+       ScaleToDownscaleAndThenUpscale) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
   if (SkipTestDueToAv1Missing(local_pc_wrapper)) {
     return;
@@ -2726,7 +2744,8 @@
   RtpParameters parameters = sender->GetParameters();
   ASSERT_THAT(parameters.encodings, SizeIs(1));
   parameters.encodings[0].scalability_mode = "L1T3";
-  parameters.encodings[0].requested_resolution = {.width = 640, .height = 360};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 640,
+                                                      .height = 360};
   sender->SetParameters(parameters);
   // Confirm 640x360 is sent.
   ASSERT_TRUE_WAIT(GetEncodingResolution(local_pc_wrapper) ==
@@ -2744,7 +2763,8 @@
 
   // Request the full 1280x720 resolution.
   parameters = sender->GetParameters();
-  parameters.encodings[0].requested_resolution = {.width = 1280, .height = 720};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 1280,
+                                                      .height = 720};
   sender->SetParameters(parameters);
   // Confirm 1280x720 is sent.
   ASSERT_TRUE_WAIT(GetEncodingResolution(local_pc_wrapper) ==
@@ -2753,7 +2773,7 @@
 }
 
 TEST_P(PeerConnectionEncodingsIntegrationParameterizedTest,
-       RequestedResolutionIsOrientationAgnostic) {
+       ScaleToIsOrientationAgnostic) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
   if (SkipTestDueToAv1Missing(local_pc_wrapper)) {
     return;
@@ -2781,7 +2801,8 @@
   rtc::scoped_refptr<RtpSenderInterface> sender = transceiver->sender();
   RtpParameters parameters = sender->GetParameters();
   ASSERT_THAT(parameters.encodings, SizeIs(1));
-  parameters.encodings[0].requested_resolution = {.width = 360, .height = 640};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 360,
+                                                      .height = 640};
   sender->SetParameters(parameters);
   // Confirm 640x360 is sent.
   ASSERT_TRUE_WAIT(GetEncodingResolution(local_pc_wrapper) ==
@@ -2790,7 +2811,7 @@
 }
 
 TEST_P(PeerConnectionEncodingsIntegrationParameterizedTest,
-       RequestedResolutionMaintainsAspectRatio) {
+       ScaleToMaintainsAspectRatio) {
   rtc::scoped_refptr<PeerConnectionTestWrapper> local_pc_wrapper = CreatePc();
   if (SkipTestDueToAv1Missing(local_pc_wrapper)) {
     return;
@@ -2818,7 +2839,8 @@
   rtc::scoped_refptr<RtpSenderInterface> sender = transceiver->sender();
   RtpParameters parameters = sender->GetParameters();
   ASSERT_THAT(parameters.encodings, SizeIs(1));
-  parameters.encodings[0].requested_resolution = {.width = 1280, .height = 360};
+  parameters.encodings[0].scale_resolution_down_to = {.width = 1280,
+                                                      .height = 360};
   sender->SetParameters(parameters);
   // Confirm 640x360 is sent.
   ASSERT_TRUE_WAIT(GetEncodingResolution(local_pc_wrapper) ==
diff --git a/video/config/encoder_stream_factory.cc b/video/config/encoder_stream_factory.cc
index ad1ee4d..62b00ad 100644
--- a/video/config/encoder_stream_factory.cc
+++ b/video/config/encoder_stream_factory.cc
@@ -150,7 +150,7 @@
     webrtc::VideoStream& layer = layers[i];
     layer.active = overrides.active;
     layer.scalability_mode = overrides.scalability_mode;
-    layer.requested_resolution = overrides.requested_resolution;
+    layer.scale_resolution_down_to = overrides.scale_resolution_down_to;
     // Update with configured num temporal layers if supported by codec.
     if (overrides.num_temporal_layers > 0 && temporal_layers_supported) {
       layer.num_temporal_layers = *overrides.num_temporal_layers;
@@ -352,18 +352,18 @@
   layer.width = width;
   layer.height = height;
   layer.max_framerate = max_framerate;
-  layer.requested_resolution =
-      encoder_config.simulcast_layers[0].requested_resolution;
+  layer.scale_resolution_down_to =
+      encoder_config.simulcast_layers[0].scale_resolution_down_to;
   // Note: VP9 seems to have be sending if any layer is active,
   // (see `UpdateSendState`) and still use parameters only from
   // encoder_config.simulcast_layers[0].
   layer.active = absl::c_any_of(encoder_config.simulcast_layers,
                                 [](const auto& layer) { return layer.active; });
 
-  if (encoder_config.simulcast_layers[0].requested_resolution) {
-    auto res = GetLayerResolutionFromRequestedResolution(
+  if (encoder_config.simulcast_layers[0].scale_resolution_down_to) {
+    auto res = GetLayerResolutionFromScaleResolutionDownTo(
         width, height,
-        *encoder_config.simulcast_layers[0].requested_resolution);
+        *encoder_config.simulcast_layers[0].scale_resolution_down_to);
     layer.width = res.width;
     layer.height = res.height;
   } else if (encoder_config.simulcast_layers[0].scale_resolution_down_by > 1.) {
@@ -468,23 +468,23 @@
 }
 
 webrtc::Resolution
-EncoderStreamFactory::GetLayerResolutionFromRequestedResolution(
+EncoderStreamFactory::GetLayerResolutionFromScaleResolutionDownTo(
     int frame_width,
     int frame_height,
-    webrtc::Resolution requested_resolution) const {
-  // Make frame and requested resolution have matching orientation.
+    webrtc::Resolution scale_resolution_down_to) const {
+  // Make frame and `scale_resolution_down_to` have matching orientation.
   if ((frame_width < frame_height) !=
-      (requested_resolution.width < requested_resolution.height)) {
-    requested_resolution = {.width = requested_resolution.height,
-                            .height = requested_resolution.width};
+      (scale_resolution_down_to.width < scale_resolution_down_to.height)) {
+    scale_resolution_down_to = {.width = scale_resolution_down_to.height,
+                                .height = scale_resolution_down_to.width};
   }
   // Downscale by smallest scaling factor, if necessary.
   if (frame_width > 0 && frame_height > 0 &&
-      (requested_resolution.width < frame_width ||
-       requested_resolution.height < frame_height)) {
+      (scale_resolution_down_to.width < frame_width ||
+       scale_resolution_down_to.height < frame_height)) {
     double scale_factor = std::min(
-        requested_resolution.width / static_cast<double>(frame_width),
-        requested_resolution.height / static_cast<double>(frame_height));
+        scale_resolution_down_to.width / static_cast<double>(frame_width),
+        scale_resolution_down_to.height / static_cast<double>(frame_height));
     frame_width = std::round(frame_width * scale_factor);
     frame_height = std::round(frame_height * scale_factor);
   }
@@ -528,33 +528,34 @@
   } else {
     size_t min_num_layers = FindRequiredActiveLayers(encoder_config);
     size_t max_num_layers =
-        !encoder_config.HasRequestedResolution()
+        !encoder_config.HasScaleResolutionDownTo()
             ? LimitSimulcastLayerCount(
                   min_num_layers, encoder_config.number_of_streams, width,
                   height, trials, encoder_config.codec_type)
             : encoder_config.number_of_streams;
     RTC_DCHECK_LE(max_num_layers, encoder_config.number_of_streams);
 
-    // When the `requested_resolution` API is used, disable upper layers that
-    // are bigger than what adaptation restrictions allow. For example if
+    // When the `scale_resolution_down_to` API is used, disable upper layers
+    // that are bigger than what adaptation restrictions allow. For example if
     // restrictions are 540p, simulcast 180p:360p:720p becomes 180p:360p:- as
     // opposed to 180p:360p:540p. This makes CPU adaptation consistent with BW
     // adaptation (bitrate allocator disabling layers rather than downscaling)
     // and means we don't have to break power of two optimization paths (i.e.
     // S-modes based simulcast). Note that the lowest layer is never disabled.
-    if (encoder_config.HasRequestedResolution() && restrictions_.has_value() &&
+    if (encoder_config.HasScaleResolutionDownTo() &&
+        restrictions_.has_value() &&
         restrictions_->max_pixels_per_frame().has_value()) {
       int max_pixels = rtc::dchecked_cast<int>(
           restrictions_->max_pixels_per_frame().value());
       int prev_pixel_count =
           encoder_config.simulcast_layers[0]
-              .requested_resolution.value_or(webrtc::Resolution())
+              .scale_resolution_down_to.value_or(webrtc::Resolution())
               .PixelCount();
       std::optional<size_t> restricted_num_layers;
       for (size_t i = 1; i < max_num_layers; ++i) {
         int pixel_count =
             encoder_config.simulcast_layers[i]
-                .requested_resolution.value_or(webrtc::Resolution())
+                .scale_resolution_down_to.value_or(webrtc::Resolution())
                 .PixelCount();
         if (!restricted_num_layers.has_value() && max_pixels < pixel_count) {
           // Current layer is the highest layer allowed by restrictions.
@@ -596,10 +597,11 @@
 
     resolutions.resize(max_num_layers);
     for (size_t i = 0; i < max_num_layers; i++) {
-      if (encoder_config.simulcast_layers[i].requested_resolution.has_value()) {
-        resolutions[i] = GetLayerResolutionFromRequestedResolution(
+      if (encoder_config.simulcast_layers[i]
+              .scale_resolution_down_to.has_value()) {
+        resolutions[i] = GetLayerResolutionFromScaleResolutionDownTo(
             normalized_width, normalized_height,
-            *encoder_config.simulcast_layers[i].requested_resolution);
+            *encoder_config.simulcast_layers[i].scale_resolution_down_to);
       } else if (has_scale_resolution_down_by) {
         const double scale_resolution_down_by = std::max(
             encoder_config.simulcast_layers[i].scale_resolution_down_by, 1.0);
diff --git a/video/config/encoder_stream_factory.h b/video/config/encoder_stream_factory.h
index 3d0705e..8fd2013 100644
--- a/video/config/encoder_stream_factory.h
+++ b/video/config/encoder_stream_factory.h
@@ -49,10 +49,10 @@
       const webrtc::VideoEncoderConfig& encoder_config,
       const std::optional<webrtc::DataRate>& experimental_min_bitrate) const;
 
-  webrtc::Resolution GetLayerResolutionFromRequestedResolution(
+  webrtc::Resolution GetLayerResolutionFromScaleResolutionDownTo(
       int in_frame_width,
       int in_frame_height,
-      webrtc::Resolution requested_resolution) const;
+      webrtc::Resolution scale_resolution_down_to) const;
 
   std::vector<webrtc::Resolution> GetStreamResolutions(
       const webrtc::FieldTrialsView& trials,
diff --git a/video/config/encoder_stream_factory_unittest.cc b/video/config/encoder_stream_factory_unittest.cc
index 1cf901d..4638e48 100644
--- a/video/config/encoder_stream_factory_unittest.cc
+++ b/video/config/encoder_stream_factory_unittest.cc
@@ -79,23 +79,23 @@
 
 }  // namespace
 
-TEST(EncoderStreamFactory, SinglecastRequestedResolution) {
+TEST(EncoderStreamFactory, SinglecastScaleResolutionDownTo) {
   ExplicitKeyValueConfig field_trials("");
   VideoEncoderConfig encoder_config;
   encoder_config.number_of_streams = 1;
   encoder_config.simulcast_layers.resize(1);
-  encoder_config.simulcast_layers[0].requested_resolution = {.width = 640,
-                                                             .height = 360};
+  encoder_config.simulcast_layers[0].scale_resolution_down_to = {.width = 640,
+                                                                 .height = 360};
   auto streams = CreateEncoderStreams(
       field_trials, {.width = 1280, .height = 720}, encoder_config);
-  EXPECT_EQ(streams[0].requested_resolution,
+  EXPECT_EQ(streams[0].scale_resolution_down_to,
             (Resolution{.width = 640, .height = 360}));
   EXPECT_EQ(GetStreamResolutions(streams), (std::vector<Resolution>{
                                                {.width = 640, .height = 360},
                                            }));
 }
 
-TEST(EncoderStreamFactory, SinglecastRequestedResolutionWithAdaptation) {
+TEST(EncoderStreamFactory, SinglecastScaleResolutionDownToWithAdaptation) {
   ExplicitKeyValueConfig field_trials("");
   VideoSourceRestrictions restrictions(
       /* max_pixels_per_frame= */ (320 * 320),
@@ -104,29 +104,29 @@
   VideoEncoderConfig encoder_config;
   encoder_config.number_of_streams = 1;
   encoder_config.simulcast_layers.resize(1);
-  encoder_config.simulcast_layers[0].requested_resolution = {.width = 640,
-                                                             .height = 360};
+  encoder_config.simulcast_layers[0].scale_resolution_down_to = {.width = 640,
+                                                                 .height = 360};
   auto streams =
       CreateEncoderStreams(field_trials, {.width = 1280, .height = 720},
                            encoder_config, restrictions);
-  EXPECT_EQ(streams[0].requested_resolution,
+  EXPECT_EQ(streams[0].scale_resolution_down_to,
             (Resolution{.width = 640, .height = 360}));
   EXPECT_EQ(GetStreamResolutions(streams), (std::vector<Resolution>{
                                                {.width = 320, .height = 180},
                                            }));
 }
 
-TEST(EncoderStreamFactory, SimulcastRequestedResolutionUnrestricted) {
+TEST(EncoderStreamFactory, SimulcastScaleResolutionDownToUnrestricted) {
   ExplicitKeyValueConfig field_trials("");
   VideoEncoderConfig encoder_config;
   encoder_config.number_of_streams = 3;
   encoder_config.simulcast_layers.resize(3);
-  encoder_config.simulcast_layers[0].requested_resolution = {.width = 320,
-                                                             .height = 180};
-  encoder_config.simulcast_layers[1].requested_resolution = {.width = 640,
-                                                             .height = 360};
-  encoder_config.simulcast_layers[2].requested_resolution = {.width = 1280,
-                                                             .height = 720};
+  encoder_config.simulcast_layers[0].scale_resolution_down_to = {.width = 320,
+                                                                 .height = 180};
+  encoder_config.simulcast_layers[1].scale_resolution_down_to = {.width = 640,
+                                                                 .height = 360};
+  encoder_config.simulcast_layers[2].scale_resolution_down_to = {.width = 1280,
+                                                                 .height = 720};
   auto streams = CreateEncoderStreams(
       field_trials, {.width = 1280, .height = 720}, encoder_config);
   std::vector<Resolution> stream_resolutions = GetStreamResolutions(streams);
@@ -136,7 +136,7 @@
   EXPECT_EQ(stream_resolutions[2], (Resolution{.width = 1280, .height = 720}));
 }
 
-TEST(EncoderStreamFactory, SimulcastRequestedResolutionWith360pRestriction) {
+TEST(EncoderStreamFactory, SimulcastScaleResolutionDownToWith360pRestriction) {
   ExplicitKeyValueConfig field_trials("");
   VideoSourceRestrictions restrictions(
       /* max_pixels_per_frame= */ (640 * 360),
@@ -145,12 +145,12 @@
   VideoEncoderConfig encoder_config;
   encoder_config.number_of_streams = 3;
   encoder_config.simulcast_layers.resize(3);
-  encoder_config.simulcast_layers[0].requested_resolution = {.width = 320,
-                                                             .height = 180};
-  encoder_config.simulcast_layers[1].requested_resolution = {.width = 640,
-                                                             .height = 360};
-  encoder_config.simulcast_layers[2].requested_resolution = {.width = 1280,
-                                                             .height = 720};
+  encoder_config.simulcast_layers[0].scale_resolution_down_to = {.width = 320,
+                                                                 .height = 180};
+  encoder_config.simulcast_layers[1].scale_resolution_down_to = {.width = 640,
+                                                                 .height = 360};
+  encoder_config.simulcast_layers[2].scale_resolution_down_to = {.width = 1280,
+                                                                 .height = 720};
   auto streams =
       CreateEncoderStreams(field_trials, {.width = 1280, .height = 720},
                            encoder_config, restrictions);
@@ -161,7 +161,7 @@
   EXPECT_EQ(stream_resolutions[1], (Resolution{.width = 640, .height = 360}));
 }
 
-TEST(EncoderStreamFactory, SimulcastRequestedResolutionWith90pRestriction) {
+TEST(EncoderStreamFactory, SimulcastScaleResolutionDownToWith90pRestriction) {
   ExplicitKeyValueConfig field_trials("");
   VideoSourceRestrictions restrictions(
       /* max_pixels_per_frame= */ (160 * 90),
@@ -170,12 +170,12 @@
   VideoEncoderConfig encoder_config;
   encoder_config.number_of_streams = 3;
   encoder_config.simulcast_layers.resize(3);
-  encoder_config.simulcast_layers[0].requested_resolution = {.width = 320,
-                                                             .height = 180};
-  encoder_config.simulcast_layers[1].requested_resolution = {.width = 640,
-                                                             .height = 360};
-  encoder_config.simulcast_layers[2].requested_resolution = {.width = 1280,
-                                                             .height = 720};
+  encoder_config.simulcast_layers[0].scale_resolution_down_to = {.width = 320,
+                                                                 .height = 180};
+  encoder_config.simulcast_layers[1].scale_resolution_down_to = {.width = 640,
+                                                                 .height = 360};
+  encoder_config.simulcast_layers[2].scale_resolution_down_to = {.width = 1280,
+                                                                 .height = 720};
   auto streams =
       CreateEncoderStreams(field_trials, {.width = 1280, .height = 720},
                            encoder_config, restrictions);
@@ -186,7 +186,8 @@
   EXPECT_EQ(stream_resolutions[0], (Resolution{.width = 160, .height = 90}));
 }
 
-TEST(EncoderStreamFactory, ReverseSimulcastRequestedResolutionWithRestriction) {
+TEST(EncoderStreamFactory,
+     ReverseSimulcastScaleResolutionDownToWithRestriction) {
   ExplicitKeyValueConfig field_trials("");
   VideoSourceRestrictions restrictions(
       /* max_pixels_per_frame= */ (640 * 360),
@@ -196,12 +197,12 @@
   encoder_config.number_of_streams = 3;
   encoder_config.simulcast_layers.resize(3);
   // 720p, 360p, 180p (instead of the usual 180p, 360p, 720p).
-  encoder_config.simulcast_layers[0].requested_resolution = {.width = 1280,
-                                                             .height = 720};
-  encoder_config.simulcast_layers[1].requested_resolution = {.width = 640,
-                                                             .height = 360};
-  encoder_config.simulcast_layers[2].requested_resolution = {.width = 320,
-                                                             .height = 180};
+  encoder_config.simulcast_layers[0].scale_resolution_down_to = {.width = 1280,
+                                                                 .height = 720};
+  encoder_config.simulcast_layers[1].scale_resolution_down_to = {.width = 640,
+                                                                 .height = 360};
+  encoder_config.simulcast_layers[2].scale_resolution_down_to = {.width = 320,
+                                                                 .height = 180};
   auto streams =
       CreateEncoderStreams(field_trials, {.width = 1280, .height = 720},
                            encoder_config, restrictions);
diff --git a/video/config/video_encoder_config.cc b/video/config/video_encoder_config.cc
index 24b8f2a..9dc9a52 100644
--- a/video/config/video_encoder_config.cc
+++ b/video/config/video_encoder_config.cc
@@ -88,9 +88,9 @@
   return ss.str();
 }
 
-bool VideoEncoderConfig::HasRequestedResolution() const {
+bool VideoEncoderConfig::HasScaleResolutionDownTo() const {
   for (const VideoStream& simulcast_layer : simulcast_layers) {
-    if (simulcast_layer.requested_resolution.has_value()) {
+    if (simulcast_layer.scale_resolution_down_to.has_value()) {
       return true;
     }
   }
diff --git a/video/config/video_encoder_config.h b/video/config/video_encoder_config.h
index bd05ab0..59ee866 100644
--- a/video/config/video_encoder_config.h
+++ b/video/config/video_encoder_config.h
@@ -36,7 +36,7 @@
 
   // Width/Height in pixels.
   // This is the actual width and height used to configure encoder,
-  // which might be less than `requested_resolution` due to adaptation
+  // which might be less than `scale_resolution_down_to` due to adaptation
   // or due to the source providing smaller frames than requested.
   size_t width;
   size_t height;
@@ -75,14 +75,14 @@
 
   // An optional user supplied max_frame_resolution
   // than can be set independently of (adapted) VideoSource.
-  // This value is set from RtpEncodingParameters::requested_resolution
+  // This value is set from RtpEncodingParameters::scale_resolution_down_to
   // (i.e. used for signaling app-level settings).
   //
   // The actual encode resolution is in `width` and `height`,
-  // which can be lower than requested_resolution,
+  // which can be lower than scale_resolution_down_to,
   // e.g. if source only provides lower resolution or
   // if resource adaptation is active.
-  std::optional<Resolution> requested_resolution;
+  std::optional<Resolution> scale_resolution_down_to;
 };
 
 class VideoEncoderConfig {
@@ -166,7 +166,7 @@
   ~VideoEncoderConfig();
   std::string ToString() const;
 
-  bool HasRequestedResolution() const;
+  bool HasScaleResolutionDownTo() const;
 
   // TODO(bugs.webrtc.org/6883): Consolidate on one of these.
   VideoCodecType codec_type;
diff --git a/video/video_source_sink_controller.cc b/video/video_source_sink_controller.cc
index 3a49044..dcecd3a 100644
--- a/video/video_source_sink_controller.cc
+++ b/video/video_source_sink_controller.cc
@@ -105,9 +105,9 @@
 }
 
 std::optional<rtc::VideoSinkWants::FrameSize>
-VideoSourceSinkController::requested_resolution() const {
+VideoSourceSinkController::scale_resolution_down_to() const {
   RTC_DCHECK_RUN_ON(&sequence_checker_);
-  return requested_resolution_;
+  return scale_resolution_down_to_;
 }
 
 void VideoSourceSinkController::SetRestrictions(
@@ -150,10 +150,10 @@
   active_ = active;
 }
 
-void VideoSourceSinkController::SetRequestedResolution(
-    std::optional<rtc::VideoSinkWants::FrameSize> requested_resolution) {
+void VideoSourceSinkController::SetScaleResolutionDownTo(
+    std::optional<rtc::VideoSinkWants::FrameSize> scale_resolution_down_to) {
   RTC_DCHECK_RUN_ON(&sequence_checker_);
-  requested_resolution_ = std::move(requested_resolution);
+  scale_resolution_down_to_ = std::move(scale_resolution_down_to);
 }
 
 // RTC_EXCLUSIVE_LOCKS_REQUIRED(sequence_checker_)
@@ -186,7 +186,7 @@
                    : std::numeric_limits<int>::max());
   wants.resolutions = resolutions_;
   wants.is_active = active_;
-  wants.requested_resolution = requested_resolution_;
+  wants.requested_resolution = scale_resolution_down_to_;
   return wants;
 }
 
diff --git a/video/video_source_sink_controller.h b/video/video_source_sink_controller.h
index 9ce0fb5..33cb7922 100644
--- a/video/video_source_sink_controller.h
+++ b/video/video_source_sink_controller.h
@@ -52,7 +52,8 @@
   int resolution_alignment() const;
   const std::vector<rtc::VideoSinkWants::FrameSize>& resolutions() const;
   bool active() const;
-  std::optional<rtc::VideoSinkWants::FrameSize> requested_resolution() const;
+  std::optional<rtc::VideoSinkWants::FrameSize> scale_resolution_down_to()
+      const;
 
   // Updates the settings stored internally. In order for these settings to be
   // applied to the sink, PushSourceSinkSettings() must subsequently be called.
@@ -64,8 +65,8 @@
   void SetResolutionAlignment(int resolution_alignment);
   void SetResolutions(std::vector<rtc::VideoSinkWants::FrameSize> resolutions);
   void SetActive(bool active);
-  void SetRequestedResolution(
-      std::optional<rtc::VideoSinkWants::FrameSize> requested_resolution);
+  void SetScaleResolutionDownTo(
+      std::optional<rtc::VideoSinkWants::FrameSize> scale_resolution_down_to);
 
  private:
   rtc::VideoSinkWants CurrentSettingsToSinkWants() const
@@ -93,7 +94,7 @@
   std::vector<rtc::VideoSinkWants::FrameSize> resolutions_
       RTC_GUARDED_BY(&sequence_checker_);
   bool active_ RTC_GUARDED_BY(&sequence_checker_) = true;
-  std::optional<rtc::VideoSinkWants::FrameSize> requested_resolution_
+  std::optional<rtc::VideoSinkWants::FrameSize> scale_resolution_down_to_
       RTC_GUARDED_BY(&sequence_checker_);
 };
 
diff --git a/video/video_source_sink_controller_unittest.cc b/video/video_source_sink_controller_unittest.cc
index bddfc0d..61fd1e6 100644
--- a/video/video_source_sink_controller_unittest.cc
+++ b/video/video_source_sink_controller_unittest.cc
@@ -62,7 +62,7 @@
   EXPECT_FALSE(controller.pixels_per_frame_upper_limit().has_value());
   EXPECT_FALSE(controller.frame_rate_upper_limit().has_value());
   EXPECT_FALSE(controller.rotation_applied());
-  EXPECT_FALSE(controller.requested_resolution().has_value());
+  EXPECT_FALSE(controller.scale_resolution_down_to().has_value());
   EXPECT_EQ(controller.resolution_alignment(), 1);
 
   EXPECT_CALL(source, AddOrUpdateSink(_, _))
@@ -166,12 +166,12 @@
   controller.RequestRefreshFrame();
 }
 
-TEST(VideoSourceSinkControllerTest, RequestedResolutionPropagatesToWants) {
+TEST(VideoSourceSinkControllerTest, ScaleResolutionDownToPropagatesToWants) {
   MockVideoSinkWithVideoFrame sink;
   MockVideoSourceWithVideoFrame source;
   VideoSourceSinkController controller(&sink, &source);
-  controller.SetRequestedResolution(FrameSize(640, 360));
-  EXPECT_TRUE(controller.requested_resolution().has_value());
+  controller.SetScaleResolutionDownTo(FrameSize(640, 360));
+  EXPECT_TRUE(controller.scale_resolution_down_to().has_value());
 
   EXPECT_CALL(source, AddOrUpdateSink(_, _))
       .WillOnce([](rtc::VideoSinkInterface<VideoFrame>* sink,
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index 4fc7771..324c9f9 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -872,38 +872,40 @@
   RTC_DCHECK_RUN_ON(worker_queue_);
 
   // Inform source about max configured framerate,
-  // requested_resolution and which layers are active.
+  // scale_resolution_down_to and which layers are active.
   int max_framerate = -1;
   // Is any layer active.
   bool active = false;
-  // The max requested_resolution.
-  std::optional<rtc::VideoSinkWants::FrameSize> requested_resolution;
+  // The max scale_resolution_down_to.
+  std::optional<rtc::VideoSinkWants::FrameSize> scale_resolution_down_to;
   for (const auto& stream : config.simulcast_layers) {
     active |= stream.active;
     if (stream.active) {
       max_framerate = std::max(stream.max_framerate, max_framerate);
     }
-    // Note: we propagate the highest requested_resolution regardless
+    // Note: we propagate the highest scale_resolution_down_to regardless
     // if layer is active or not.
-    if (stream.requested_resolution) {
-      if (!requested_resolution) {
-        requested_resolution.emplace(stream.requested_resolution->width,
-                                     stream.requested_resolution->height);
+    if (stream.scale_resolution_down_to) {
+      if (!scale_resolution_down_to) {
+        scale_resolution_down_to.emplace(
+            stream.scale_resolution_down_to->width,
+            stream.scale_resolution_down_to->height);
       } else {
-        requested_resolution.emplace(
-            std::max(stream.requested_resolution->width,
-                     requested_resolution->width),
-            std::max(stream.requested_resolution->height,
-                     requested_resolution->height));
+        scale_resolution_down_to.emplace(
+            std::max(stream.scale_resolution_down_to->width,
+                     scale_resolution_down_to->width),
+            std::max(stream.scale_resolution_down_to->height,
+                     scale_resolution_down_to->height));
       }
     }
   }
-  if (requested_resolution !=
-          video_source_sink_controller_.requested_resolution() ||
+  if (scale_resolution_down_to !=
+          video_source_sink_controller_.scale_resolution_down_to() ||
       active != video_source_sink_controller_.active() ||
       max_framerate !=
           video_source_sink_controller_.frame_rate_upper_limit().value_or(-1)) {
-    video_source_sink_controller_.SetRequestedResolution(requested_resolution);
+    video_source_sink_controller_.SetScaleResolutionDownTo(
+        scale_resolution_down_to);
     if (max_framerate >= 0) {
       video_source_sink_controller_.SetFrameRateUpperLimit(max_framerate);
     } else {
@@ -2412,12 +2414,12 @@
   // so that ownership on restrictions/wants is kept on &encoder_queue_
   latest_restrictions_ = restrictions;
 
-  // When the `requested_resolution` API is used, we need to reconfigure any
+  // When the `scale_resolution_down_to` API is used, we need to reconfigure any
   // time the restricted resolution is updated. When that API isn't used, the
   // encoder settings are relative to the frame size and reconfiguration happens
   // automatically on new frame size and we don't need to reconfigure here.
   if (encoder_ && max_pixels_updated &&
-      encoder_config_.HasRequestedResolution()) {
+      encoder_config_.HasScaleResolutionDownTo()) {
     // The encoder will be reconfigured on the next frame.
     pending_encoder_reconfiguration_ = true;
   }
diff --git a/video/video_stream_encoder_unittest.cc b/video/video_stream_encoder_unittest.cc
index b93a125..859c792 100644
--- a/video/video_stream_encoder_unittest.cc
+++ b/video/video_stream_encoder_unittest.cc
@@ -2588,7 +2588,7 @@
 }
 
 TEST_F(VideoStreamEncoderTest, RequestInSinkWantsBeforeFirstFrame) {
-  // Use a real video stream factory or else `requested_resolution` is not
+  // Use a real video stream factory or else `scale_resolution_down_to` is not
   // applied correctly.
   video_encoder_config_.video_stream_factory = nullptr;
   ConfigureEncoder(video_encoder_config_.Copy());
@@ -2596,7 +2596,7 @@
       kTargetBitrate, kTargetBitrate, kTargetBitrate, 0, 0, 0);
 
   ASSERT_THAT(video_encoder_config_.simulcast_layers, SizeIs(1));
-  video_encoder_config_.simulcast_layers[0].requested_resolution.emplace(
+  video_encoder_config_.simulcast_layers[0].scale_resolution_down_to.emplace(
       Resolution({.width = 320, .height = 160}));
 
   video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
@@ -2605,8 +2605,10 @@
   EXPECT_EQ(video_source_.sink_wants().requested_resolution,
             rtc::VideoSinkWants::FrameSize(320, 160));
 
-  video_encoder_config_.simulcast_layers[0].requested_resolution->height = 320;
-  video_encoder_config_.simulcast_layers[0].requested_resolution->width = 640;
+  video_encoder_config_.simulcast_layers[0].scale_resolution_down_to->height =
+      320;
+  video_encoder_config_.simulcast_layers[0].scale_resolution_down_to->width =
+      640;
   video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
                                           kMaxPayloadLength);
 
@@ -2617,7 +2619,7 @@
 }
 
 TEST_F(VideoStreamEncoderTest, RequestInWrongAspectRatioWithAdapter) {
-  // Use a real video stream factory or else `requested_resolution` is not
+  // Use a real video stream factory or else `scale_resolution_down_to` is not
   // applied correctly.
   video_encoder_config_.video_stream_factory = nullptr;
   ConfigureEncoder(video_encoder_config_.Copy());
@@ -2631,7 +2633,7 @@
       &source, webrtc::DegradationPreference::MAINTAIN_FRAMERATE);
 
   ASSERT_THAT(video_encoder_config_.simulcast_layers, SizeIs(1));
-  video_encoder_config_.simulcast_layers[0].requested_resolution = {
+  video_encoder_config_.simulcast_layers[0].scale_resolution_down_to = {
       .width = 30, .height = 30};
   video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
                                           kMaxPayloadLength);
@@ -6314,8 +6316,8 @@
 
 enum class FrameResolutionChangeMethod {
   MODIFY_SOURCE,
-  MODIFY_REQUESTED_RESOLUTION,
-  MODIFY_SCALE_RESOLUTION_BY,
+  MODIFY_SCALE_RESOLUTION_DOWN_TO,
+  MODIFY_SCALE_RESOLUTION_DOWN_BY,
 };
 class VideoStreamEncoderInitialFrameDropperTest
     : public VideoStreamEncoderTest,
@@ -6329,12 +6331,12 @@
     switch (frame_resolution_change_method_) {
       case FrameResolutionChangeMethod::MODIFY_SOURCE:
         break;
-      case FrameResolutionChangeMethod::MODIFY_REQUESTED_RESOLUTION:
+      case FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_DOWN_TO:
         video_encoder_config_.video_stream_factory = nullptr;
         captureWidth = kWidth;
         captureHeight = kHeight;
         break;
-      case FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_BY:
+      case FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_DOWN_BY:
         captureWidth = kWidth;
         captureHeight = kHeight;
         break;
@@ -6347,14 +6349,15 @@
         captureWidth = width;
         captureHeight = height;
         break;
-      case FrameResolutionChangeMethod::MODIFY_REQUESTED_RESOLUTION:
+      case FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_DOWN_TO:
         ASSERT_THAT(video_encoder_config_.simulcast_layers, SizeIs(1));
-        video_encoder_config_.simulcast_layers[0].requested_resolution.emplace(
-            Resolution({.width = width, .height = height}));
+        video_encoder_config_.simulcast_layers[0]
+            .scale_resolution_down_to.emplace(
+                Resolution({.width = width, .height = height}));
         video_stream_encoder_->ConfigureEncoder(video_encoder_config_.Copy(),
                                                 kMaxPayloadLength);
         break;
-      case FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_BY:
+      case FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_DOWN_BY:
         ASSERT_THAT(video_encoder_config_.simulcast_layers, SizeIs(1));
         double scale_height =
             static_cast<double>(kHeight) / static_cast<double>(height);
@@ -6381,9 +6384,10 @@
 INSTANTIATE_TEST_SUITE_P(
     VideoStreamEncoderInitialFrameDropperTest,
     VideoStreamEncoderInitialFrameDropperTest,
-    ::testing::Values(FrameResolutionChangeMethod::MODIFY_SOURCE,
-                      FrameResolutionChangeMethod::MODIFY_REQUESTED_RESOLUTION,
-                      FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_BY));
+    ::testing::Values(
+        FrameResolutionChangeMethod::MODIFY_SOURCE,
+        FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_DOWN_TO,
+        FrameResolutionChangeMethod::MODIFY_SCALE_RESOLUTION_DOWN_BY));
 
 TEST_P(VideoStreamEncoderInitialFrameDropperTest,
        InitialFrameDropActivatesWhenResolutionIncreases) {
@@ -6431,7 +6435,7 @@
 
   int timestamp = 1;
 
-  // By using the `requested_resolution` API, ReconfigureEncoder() gets
+  // By using the `scale_resolution_down_to` API, ReconfigureEncoder() gets
   // triggered from VideoStreamEncoder::OnVideoSourceRestrictionsUpdated().
   SetEncoderFrameSize(kWidth, kHeight);