Revert "Enable quality scaling when allowed"
This reverts commit 752cbaba907de077e5f1b24a232e71feb479dccb.
Reason for revert: The test VideoStreamEncoderTest.QualityScalingAllowed_QualityScalingEnabled seems to fail on iOS.
Original change's description:
> Enable quality scaling when allowed
>
> Before this CL quality scaling was conditioned on scaling settings
> provided by encoder. That should not be a requirement since encoder
> may not be aware of quality scaling which is a WebRTC feature. In M90
> chromium HW encoders do not provide scaling settings (chromium:1179020).
> The default scaling settings provided by these encoders are not correct
> (b/181537172).
>
> This CL adds is_quality_scaling_allowed to VideoEncoderConfig. The flag
> is set to true in singlecast with normal video feed (not screen sharing)
> mode. If quality scaling is allowed it is enabled no matter whether
> scaling settings are present in encoder info or not. Setting from
> QualityScalingExperiment are used in case if not provided by encoder.
>
> Bug: chromium:1179020, webrtc:12511
> Change-Id: I83d55319ce4b9f4fb143187ced94a16a778b4de3
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209184
> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
> Reviewed-by: Åsa Persson <asapersson@webrtc.org>
> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#33373}
Bug: chromium:1179020
Bug: webrtc:12511
Change-Id: Icabf2d9a034d359f79491f2c37f1044f17a7445d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209641
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33381}
diff --git a/api/video_codecs/video_encoder_config.cc b/api/video_codecs/video_encoder_config.cc
index 0321da2..5956d60 100644
--- a/api/video_codecs/video_encoder_config.cc
+++ b/api/video_codecs/video_encoder_config.cc
@@ -57,8 +57,7 @@
max_bitrate_bps(0),
bitrate_priority(1.0),
number_of_streams(0),
- legacy_conference_mode(false),
- is_quality_scaling_allowed(false) {}
+ legacy_conference_mode(false) {}
VideoEncoderConfig::VideoEncoderConfig(VideoEncoderConfig&&) = default;
diff --git a/api/video_codecs/video_encoder_config.h b/api/video_codecs/video_encoder_config.h
index 5916374..1a061f52 100644
--- a/api/video_codecs/video_encoder_config.h
+++ b/api/video_codecs/video_encoder_config.h
@@ -181,9 +181,6 @@
// Legacy Google conference mode flag for simulcast screenshare
bool legacy_conference_mode;
- // Indicates whether quality scaling can be used or not.
- bool is_quality_scaling_allowed;
-
private:
// Access to the copy constructor is private to force use of the Copy()
// method for those exceptional cases where we do use it.
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 8ddced7..d5b0f40 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2492,17 +2492,11 @@
encoder_config.legacy_conference_mode = parameters_.conference_mode;
- encoder_config.is_quality_scaling_allowed =
- !disable_automatic_resize_ && !is_screencast &&
- (parameters_.config.rtp.ssrcs.size() == 1 ||
- NumActiveStreams(rtp_parameters_) == 1);
-
int max_qp = kDefaultQpMax;
codec.GetParam(kCodecParamMaxQuantization, &max_qp);
encoder_config.video_stream_factory =
new rtc::RefCountedObject<EncoderStreamFactory>(
codec.name, max_qp, is_screencast, parameters_.conference_mode);
-
return encoder_config;
}
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index cf03490..1f7a0ee 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -8302,48 +8302,6 @@
TestReceiverLocalSsrcConfiguration(true);
}
-TEST_F(WebRtcVideoChannelTest, Simulcast_QualityScalingNotAllowed) {
- FakeVideoSendStream* stream = SetUpSimulcast(true, true);
- EXPECT_FALSE(stream->GetEncoderConfig().is_quality_scaling_allowed);
-}
-
-TEST_F(WebRtcVideoChannelTest, Singlecast_QualityScalingAllowed) {
- FakeVideoSendStream* stream = SetUpSimulcast(false, true);
- EXPECT_TRUE(stream->GetEncoderConfig().is_quality_scaling_allowed);
-}
-
-TEST_F(WebRtcVideoChannelTest,
- SinglecastScreenSharing_QualityScalingNotAllowed) {
- SetUpSimulcast(false, true);
-
- webrtc::test::FrameForwarder frame_forwarder;
- VideoOptions options;
- options.is_screencast = true;
- EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, &options, &frame_forwarder));
- // Fetch the latest stream since SetVideoSend() may recreate it if the
- // screen content setting is changed.
- FakeVideoSendStream* stream = fake_call_->GetVideoSendStreams().front();
-
- EXPECT_FALSE(stream->GetEncoderConfig().is_quality_scaling_allowed);
- EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, nullptr, nullptr));
-}
-
-TEST_F(WebRtcVideoChannelTest,
- SimulcastSingleActiveStream_QualityScalingAllowed) {
- FakeVideoSendStream* stream = SetUpSimulcast(true, false);
-
- webrtc::RtpParameters rtp_parameters =
- channel_->GetRtpSendParameters(last_ssrc_);
- ASSERT_EQ(3u, rtp_parameters.encodings.size());
- ASSERT_TRUE(rtp_parameters.encodings[0].active);
- ASSERT_TRUE(rtp_parameters.encodings[1].active);
- ASSERT_TRUE(rtp_parameters.encodings[2].active);
- rtp_parameters.encodings[0].active = false;
- rtp_parameters.encodings[1].active = false;
- EXPECT_TRUE(channel_->SetRtpSendParameters(last_ssrc_, rtp_parameters).ok());
- EXPECT_TRUE(stream->GetEncoderConfig().is_quality_scaling_allowed);
-}
-
class WebRtcVideoChannelSimulcastTest : public ::testing::Test {
public:
WebRtcVideoChannelSimulcastTest()
diff --git a/video/adaptation/video_stream_encoder_resource_manager.cc b/video/adaptation/video_stream_encoder_resource_manager.cc
index 8caeceb..59b4c8d 100644
--- a/video/adaptation/video_stream_encoder_resource_manager.cc
+++ b/video/adaptation/video_stream_encoder_resource_manager.cc
@@ -521,9 +521,7 @@
const auto scaling_settings = encoder_info.scaling_settings;
const bool quality_scaling_allowed =
IsResolutionScalingEnabled(degradation_preference_) &&
- (scaling_settings.thresholds.has_value() ||
- (encoder_settings_.has_value() &&
- encoder_settings_->encoder_config().is_quality_scaling_allowed));
+ scaling_settings.thresholds;
// TODO(https://crbug.com/webrtc/11222): Should this move to
// QualityScalerResource?
@@ -537,9 +535,9 @@
experimental_thresholds = QualityScalingExperiment::GetQpThresholds(
GetVideoCodecTypeOrGeneric(encoder_settings_));
}
- UpdateQualityScalerSettings(experimental_thresholds.has_value()
- ? experimental_thresholds
- : scaling_settings.thresholds);
+ UpdateQualityScalerSettings(experimental_thresholds
+ ? *experimental_thresholds
+ : *(scaling_settings.thresholds));
}
} else {
UpdateQualityScalerSettings(absl::nullopt);
diff --git a/video/video_stream_encoder_unittest.cc b/video/video_stream_encoder_unittest.cc
index ade58a4..5583ba5 100644
--- a/video/video_stream_encoder_unittest.cc
+++ b/video/video_stream_encoder_unittest.cc
@@ -7923,61 +7923,4 @@
video_stream_encoder_->Stop();
}
-TEST_F(VideoStreamEncoderTest,
- QualityScalingNotAllowed_QualityScalingDisabled) {
- VideoEncoderConfig video_encoder_config = video_encoder_config_.Copy();
-
- // Disable scaling settings in encoder info.
- fake_encoder_.SetQualityScaling(false);
- // Disable quality scaling in encoder config.
- video_encoder_config.is_quality_scaling_allowed = false;
- ConfigureEncoder(std::move(video_encoder_config));
-
- video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
- DataRate::BitsPerSec(kTargetBitrateBps),
- DataRate::BitsPerSec(kTargetBitrateBps),
- DataRate::BitsPerSec(kTargetBitrateBps), 0, 0, 0);
-
- test::FrameForwarder source;
- video_stream_encoder_->SetSource(
- &source, webrtc::DegradationPreference::MAINTAIN_FRAMERATE);
- EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
- EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
-
- source.IncomingCapturedFrame(CreateFrame(1, 1280, 720));
- WaitForEncodedFrame(1);
- video_stream_encoder_->TriggerQualityLow();
- EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
-
- video_stream_encoder_->Stop();
-}
-
-TEST_F(VideoStreamEncoderTest, QualityScalingAllowed_QualityScalingEnabled) {
- VideoEncoderConfig video_encoder_config = video_encoder_config_.Copy();
-
- // Disable scaling settings in encoder info.
- fake_encoder_.SetQualityScaling(false);
- // Enable quality scaling in encoder config.
- video_encoder_config.is_quality_scaling_allowed = true;
- ConfigureEncoder(std::move(video_encoder_config));
-
- video_stream_encoder_->OnBitrateUpdatedAndWaitForManagedResources(
- DataRate::BitsPerSec(kTargetBitrateBps),
- DataRate::BitsPerSec(kTargetBitrateBps),
- DataRate::BitsPerSec(kTargetBitrateBps), 0, 0, 0);
-
- test::FrameForwarder source;
- video_stream_encoder_->SetSource(
- &source, webrtc::DegradationPreference::MAINTAIN_FRAMERATE);
- EXPECT_THAT(source.sink_wants(), UnlimitedSinkWants());
- EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution);
-
- source.IncomingCapturedFrame(CreateFrame(1, 1280, 720));
- WaitForEncodedFrame(1);
- video_stream_encoder_->TriggerQualityLow();
- EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution);
-
- video_stream_encoder_->Stop();
-}
-
} // namespace webrtc