aboutsummaryrefslogtreecommitdiff
path: root/video/quality_scaling_tests.cc
diff options
context:
space:
mode:
Diffstat (limited to 'video/quality_scaling_tests.cc')
-rw-r--r--video/quality_scaling_tests.cc460
1 files changed, 304 insertions, 156 deletions
diff --git a/video/quality_scaling_tests.cc b/video/quality_scaling_tests.cc
index 0da9b69042..9837517b78 100644
--- a/video/quality_scaling_tests.cc
+++ b/video/quality_scaling_tests.cc
@@ -22,11 +22,12 @@
namespace webrtc {
namespace {
-constexpr int kWidth = 1280;
-constexpr int kHeight = 720;
+constexpr int kInitialWidth = 1280;
+constexpr int kInitialHeight = 720;
constexpr int kLowStartBps = 100000;
constexpr int kHighStartBps = 1000000;
-constexpr size_t kTimeoutMs = 10000; // Some tests are expected to time out.
+constexpr int kDefaultVgaMinStartBps = 500000; // From video_stream_encoder.cc
+constexpr int kTimeoutMs = 10000; // Some tests are expected to time out.
void SetEncoderSpecific(VideoEncoderConfig* encoder_config,
VideoCodecType type,
@@ -35,26 +36,22 @@ void SetEncoderSpecific(VideoEncoderConfig* encoder_config,
if (type == kVideoCodecVP8) {
VideoCodecVP8 vp8 = VideoEncoder::GetDefaultVp8Settings();
vp8.automaticResizeOn = automatic_resize;
- encoder_config->encoder_specific_settings = new rtc::RefCountedObject<
- VideoEncoderConfig::Vp8EncoderSpecificSettings>(vp8);
+ encoder_config->encoder_specific_settings =
+ rtc::make_ref_counted<VideoEncoderConfig::Vp8EncoderSpecificSettings>(
+ vp8);
} else if (type == kVideoCodecVP9) {
VideoCodecVP9 vp9 = VideoEncoder::GetDefaultVp9Settings();
vp9.automaticResizeOn = automatic_resize;
vp9.numberOfSpatialLayers = num_spatial_layers;
- encoder_config->encoder_specific_settings = new rtc::RefCountedObject<
- VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9);
+ encoder_config->encoder_specific_settings =
+ rtc::make_ref_counted<VideoEncoderConfig::Vp9EncoderSpecificSettings>(
+ vp9);
}
}
} // namespace
class QualityScalingTest : public test::CallTest {
protected:
- void RunTest(const std::string& payload_name,
- const std::vector<bool>& streams_active,
- int start_bps,
- bool automatic_resize,
- bool expect_adaptation);
-
const std::string kPrefix = "WebRTC-Video-QualityScaling/Enabled-";
const std::string kEnd = ",0,0,0.9995,0.9999,1/";
const absl::optional<VideoEncoder::ResolutionBitrateLimits>
@@ -69,153 +66,254 @@ class QualityScalingTest : public test::CallTest {
640 * 360);
};
-void QualityScalingTest::RunTest(const std::string& payload_name,
- const std::vector<bool>& streams_active,
- int start_bps,
- bool automatic_resize,
- bool expect_adaptation) {
- class ScalingObserver
- : public test::SendTest,
- public test::FrameGeneratorCapturer::SinkWantsObserver {
- public:
- ScalingObserver(const std::string& payload_name,
- const std::vector<bool>& streams_active,
- int start_bps,
- bool automatic_resize,
- bool expect_adaptation)
- : SendTest(expect_adaptation ? kDefaultTimeoutMs : kTimeoutMs),
- encoder_factory_([](const SdpVideoFormat& format)
- -> std::unique_ptr<VideoEncoder> {
- if (format.name == "VP8")
- return VP8Encoder::Create();
- if (format.name == "VP9")
- return VP9Encoder::Create();
- if (format.name == "H264")
- return H264Encoder::Create(cricket::VideoCodec("H264"));
- RTC_NOTREACHED() << format.name;
- return nullptr;
- }),
- payload_name_(payload_name),
- streams_active_(streams_active),
- start_bps_(start_bps),
- automatic_resize_(automatic_resize),
- expect_adaptation_(expect_adaptation) {}
-
- private:
- void OnFrameGeneratorCapturerCreated(
- test::FrameGeneratorCapturer* frame_generator_capturer) override {
- frame_generator_capturer->SetSinkWantsObserver(this);
- // Set initial resolution.
- frame_generator_capturer->ChangeResolution(kWidth, kHeight);
- }
+class ScalingObserver : public test::SendTest {
+ protected:
+ ScalingObserver(const std::string& payload_name,
+ const std::vector<bool>& streams_active,
+ int start_bps,
+ bool automatic_resize,
+ bool expect_scaling)
+ : SendTest(expect_scaling ? kTimeoutMs * 4 : kTimeoutMs),
+ encoder_factory_(
+ [](const SdpVideoFormat& format) -> std::unique_ptr<VideoEncoder> {
+ if (format.name == "VP8")
+ return VP8Encoder::Create();
+ if (format.name == "VP9")
+ return VP9Encoder::Create();
+ if (format.name == "H264")
+ return H264Encoder::Create(cricket::VideoCodec("H264"));
+ RTC_NOTREACHED() << format.name;
+ return nullptr;
+ }),
+ payload_name_(payload_name),
+ streams_active_(streams_active),
+ start_bps_(start_bps),
+ automatic_resize_(automatic_resize),
+ expect_scaling_(expect_scaling) {}
+
+ DegradationPreference degradation_preference_ =
+ DegradationPreference::MAINTAIN_FRAMERATE;
+
+ private:
+ void ModifySenderBitrateConfig(BitrateConstraints* bitrate_config) override {
+ bitrate_config->start_bitrate_bps = start_bps_;
+ }
- // Called when FrameGeneratorCapturer::AddOrUpdateSink is called.
- void OnSinkWantsChanged(rtc::VideoSinkInterface<VideoFrame>* sink,
- const rtc::VideoSinkWants& wants) override {
- if (wants.max_pixel_count < kWidth * kHeight)
- observation_complete_.Set();
+ void ModifyVideoDegradationPreference(
+ DegradationPreference* degradation_preference) override {
+ *degradation_preference = degradation_preference_;
+ }
+
+ size_t GetNumVideoStreams() const override {
+ return (payload_name_ == "VP9") ? 1 : streams_active_.size();
+ }
+
+ void ModifyVideoConfigs(
+ VideoSendStream::Config* send_config,
+ std::vector<VideoReceiveStream::Config>* receive_configs,
+ VideoEncoderConfig* encoder_config) override {
+ send_config->encoder_settings.encoder_factory = &encoder_factory_;
+ send_config->rtp.payload_name = payload_name_;
+ send_config->rtp.payload_type = test::CallTest::kVideoSendPayloadType;
+ encoder_config->video_format.name = payload_name_;
+ const VideoCodecType codec_type = PayloadStringToCodecType(payload_name_);
+ encoder_config->codec_type = codec_type;
+ encoder_config->max_bitrate_bps =
+ std::max(start_bps_, encoder_config->max_bitrate_bps);
+ if (payload_name_ == "VP9") {
+ // Simulcast layers indicates which spatial layers are active.
+ encoder_config->simulcast_layers.resize(streams_active_.size());
+ encoder_config->simulcast_layers[0].max_bitrate_bps =
+ encoder_config->max_bitrate_bps;
}
- void ModifySenderBitrateConfig(
- BitrateConstraints* bitrate_config) override {
- bitrate_config->start_bitrate_bps = start_bps_;
+ double scale_factor = 1.0;
+ for (int i = streams_active_.size() - 1; i >= 0; --i) {
+ VideoStream& stream = encoder_config->simulcast_layers[i];
+ stream.active = streams_active_[i];
+ stream.scale_resolution_down_by = scale_factor;
+ scale_factor *= (payload_name_ == "VP9") ? 1.0 : 2.0;
}
+ SetEncoderSpecific(encoder_config, codec_type, automatic_resize_,
+ streams_active_.size());
+ }
- size_t GetNumVideoStreams() const override {
- return (payload_name_ == "VP9") ? 1 : streams_active_.size();
- }
+ void PerformTest() override { EXPECT_EQ(expect_scaling_, Wait()); }
- void ModifyVideoConfigs(
- VideoSendStream::Config* send_config,
- std::vector<VideoReceiveStream::Config>* receive_configs,
- VideoEncoderConfig* encoder_config) override {
- send_config->encoder_settings.encoder_factory = &encoder_factory_;
- send_config->rtp.payload_name = payload_name_;
- send_config->rtp.payload_type = kVideoSendPayloadType;
- encoder_config->video_format.name = payload_name_;
- const VideoCodecType codec_type = PayloadStringToCodecType(payload_name_);
- encoder_config->codec_type = codec_type;
- encoder_config->max_bitrate_bps =
- std::max(start_bps_, encoder_config->max_bitrate_bps);
- if (payload_name_ == "VP9") {
- // Simulcast layers indicates which spatial layers are active.
- encoder_config->simulcast_layers.resize(streams_active_.size());
- encoder_config->simulcast_layers[0].max_bitrate_bps =
- encoder_config->max_bitrate_bps;
- }
- double scale_factor = 1.0;
- for (int i = streams_active_.size() - 1; i >= 0; --i) {
- VideoStream& stream = encoder_config->simulcast_layers[i];
- stream.active = streams_active_[i];
- stream.scale_resolution_down_by = scale_factor;
- scale_factor *= (payload_name_ == "VP9") ? 1.0 : 2.0;
- }
- SetEncoderSpecific(encoder_config, codec_type, automatic_resize_,
- streams_active_.size());
- }
+ test::FunctionVideoEncoderFactory encoder_factory_;
+ const std::string payload_name_;
+ const std::vector<bool> streams_active_;
+ const int start_bps_;
+ const bool automatic_resize_;
+ const bool expect_scaling_;
+};
- void PerformTest() override {
- EXPECT_EQ(expect_adaptation_, Wait())
- << "Timed out while waiting for a scale down.";
- }
+class DownscalingObserver
+ : public ScalingObserver,
+ public test::FrameGeneratorCapturer::SinkWantsObserver {
+ public:
+ DownscalingObserver(const std::string& payload_name,
+ const std::vector<bool>& streams_active,
+ int start_bps,
+ bool automatic_resize,
+ bool expect_downscale)
+ : ScalingObserver(payload_name,
+ streams_active,
+ start_bps,
+ automatic_resize,
+ expect_downscale) {}
+
+ private:
+ void OnFrameGeneratorCapturerCreated(
+ test::FrameGeneratorCapturer* frame_generator_capturer) override {
+ frame_generator_capturer->SetSinkWantsObserver(this);
+ frame_generator_capturer->ChangeResolution(kInitialWidth, kInitialHeight);
+ }
- test::FunctionVideoEncoderFactory encoder_factory_;
- const std::string payload_name_;
- const std::vector<bool> streams_active_;
- const int start_bps_;
- const bool automatic_resize_;
- const bool expect_adaptation_;
- } test(payload_name, streams_active, start_bps, automatic_resize,
- expect_adaptation);
+ void OnSinkWantsChanged(rtc::VideoSinkInterface<VideoFrame>* sink,
+ const rtc::VideoSinkWants& wants) override {
+ if (wants.max_pixel_count < kInitialWidth * kInitialHeight)
+ observation_complete_.Set();
+ }
+};
- RunBaseTest(&test);
-}
+class UpscalingObserver
+ : public ScalingObserver,
+ public test::FrameGeneratorCapturer::SinkWantsObserver {
+ public:
+ UpscalingObserver(const std::string& payload_name,
+ const std::vector<bool>& streams_active,
+ int start_bps,
+ bool automatic_resize,
+ bool expect_upscale)
+ : ScalingObserver(payload_name,
+ streams_active,
+ start_bps,
+ automatic_resize,
+ expect_upscale) {}
+
+ void SetDegradationPreference(DegradationPreference preference) {
+ degradation_preference_ = preference;
+ }
+
+ private:
+ void OnFrameGeneratorCapturerCreated(
+ test::FrameGeneratorCapturer* frame_generator_capturer) override {
+ frame_generator_capturer->SetSinkWantsObserver(this);
+ frame_generator_capturer->ChangeResolution(kInitialWidth, kInitialHeight);
+ }
+
+ void OnSinkWantsChanged(rtc::VideoSinkInterface<VideoFrame>* sink,
+ const rtc::VideoSinkWants& wants) override {
+ if (wants.max_pixel_count > last_wants_.max_pixel_count) {
+ if (wants.max_pixel_count == std::numeric_limits<int>::max())
+ observation_complete_.Set();
+ }
+ last_wants_ = wants;
+ }
+
+ rtc::VideoSinkWants last_wants_;
+};
TEST_F(QualityScalingTest, AdaptsDownForHighQp_Vp8) {
// qp_low:1, qp_high:1 -> kHighQp
test::ScopedFieldTrials field_trials(kPrefix + "1,1,0,0,0,0" + kEnd);
- RunTest("VP8", {true}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP8", /*streams_active=*/{true}, kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForHighQpIfScalingOff_Vp8) {
// qp_low:1, qp_high:1 -> kHighQp
test::ScopedFieldTrials field_trials(kPrefix + "1,1,0,0,0,0" + kEnd);
- RunTest("VP8", {true}, kHighStartBps,
- /*automatic_resize=*/false, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{true}, kHighStartBps,
+ /*automatic_resize=*/false,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForNormalQp_Vp8) {
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {true}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{true}, kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, AdaptsDownForLowStartBitrate_Vp8) {
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {true}, kLowStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP8", /*streams_active=*/{true}, kLowStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
+}
+
+TEST_F(QualityScalingTest, AdaptsDownForLowStartBitrateAndThenUp) {
+ // qp_low:127, qp_high:127 -> kLowQp
+ test::ScopedFieldTrials field_trials(
+ kPrefix + "127,127,0,0,0,0" + kEnd +
+ "WebRTC-Video-BalancedDegradationSettings/"
+ "pixels:230400|921600,fps:20|30,kbps:300|500/"); // should not affect
+
+ UpscalingObserver test("VP8", /*streams_active=*/{true},
+ kDefaultVgaMinStartBps - 1,
+ /*automatic_resize=*/true, /*expect_upscale=*/true);
+ RunBaseTest(&test);
+}
+
+TEST_F(QualityScalingTest, AdaptsDownAndThenUpWithBalanced) {
+ // qp_low:127, qp_high:127 -> kLowQp
+ test::ScopedFieldTrials field_trials(
+ kPrefix + "127,127,0,0,0,0" + kEnd +
+ "WebRTC-Video-BalancedDegradationSettings/"
+ "pixels:230400|921600,fps:20|30,kbps:300|499/");
+
+ UpscalingObserver test("VP8", /*streams_active=*/{true},
+ kDefaultVgaMinStartBps - 1,
+ /*automatic_resize=*/true, /*expect_upscale=*/true);
+ test.SetDegradationPreference(DegradationPreference::BALANCED);
+ RunBaseTest(&test);
+}
+
+TEST_F(QualityScalingTest, AdaptsDownButNotUpWithBalancedIfBitrateNotEnough) {
+ // qp_low:127, qp_high:127 -> kLowQp
+ test::ScopedFieldTrials field_trials(
+ kPrefix + "127,127,0,0,0,0" + kEnd +
+ "WebRTC-Video-BalancedDegradationSettings/"
+ "pixels:230400|921600,fps:20|30,kbps:300|500/");
+
+ UpscalingObserver test("VP8", /*streams_active=*/{true},
+ kDefaultVgaMinStartBps - 1,
+ /*automatic_resize=*/true, /*expect_upscale=*/false);
+ test.SetDegradationPreference(DegradationPreference::BALANCED);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForLowStartBitrate_Simulcast) {
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {true, true}, kLowStartBps,
- /*automatic_resize=*/false, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{true, true}, kLowStartBps,
+ /*automatic_resize=*/false,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, AdaptsDownForHighQp_HighestStreamActive_Vp8) {
// qp_low:1, qp_high:1 -> kHighQp
test::ScopedFieldTrials field_trials(kPrefix + "1,1,0,0,0,0" + kEnd);
- RunTest("VP8", {false, false, true}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP8", /*streams_active=*/{false, false, true},
+ kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest,
@@ -223,18 +321,32 @@ TEST_F(QualityScalingTest,
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {false, false, true},
- kSinglecastLimits720pVp8->min_start_bitrate_bps - 1,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP8", /*streams_active=*/{false, false, true},
+ kSinglecastLimits720pVp8->min_start_bitrate_bps - 1,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
+}
+
+TEST_F(QualityScalingTest, AdaptsDownButNotUpWithMinStartBitrateLimit) {
+ // qp_low:127, qp_high:127 -> kLowQp
+ test::ScopedFieldTrials field_trials(kPrefix + "127,127,0,0,0,0" + kEnd);
+
+ UpscalingObserver test("VP8", /*streams_active=*/{false, true},
+ kSinglecastLimits720pVp8->min_start_bitrate_bps - 1,
+ /*automatic_resize=*/true, /*expect_upscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForLowStartBitrateIfBitrateEnough_Vp8) {
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {false, false, true},
- kSinglecastLimits720pVp8->min_start_bitrate_bps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{false, false, true},
+ kSinglecastLimits720pVp8->min_start_bitrate_bps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest,
@@ -244,9 +356,11 @@ TEST_F(QualityScalingTest,
kPrefix + "1,127,0,0,0,0" + kEnd +
"WebRTC-DefaultBitrateLimitsKillSwitch/Enabled/");
- RunTest("VP8", {false, false, true},
- kSinglecastLimits720pVp8->min_start_bitrate_bps - 1,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{false, false, true},
+ kSinglecastLimits720pVp8->min_start_bitrate_bps - 1,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest,
@@ -254,16 +368,22 @@ TEST_F(QualityScalingTest,
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {true}, kSinglecastLimits720pVp8->min_start_bitrate_bps - 1,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{true},
+ kSinglecastLimits720pVp8->min_start_bitrate_bps - 1,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForHighQp_LowestStreamActive_Vp8) {
// qp_low:1, qp_high:1 -> kHighQp
test::ScopedFieldTrials field_trials(kPrefix + "1,1,0,0,0,0" + kEnd);
- RunTest("VP8", {true, false, false}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{true, false, false},
+ kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest,
@@ -271,16 +391,21 @@ TEST_F(QualityScalingTest,
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {true, false, false}, kLowStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{true, false, false},
+ kLowStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForLowStartBitrateIfScalingOff_Vp8) {
// qp_low:1, qp_high:127 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "1,127,0,0,0,0" + kEnd);
- RunTest("VP8", {true}, kLowStartBps,
- /*automatic_resize=*/false, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP8", /*streams_active=*/{true}, kLowStartBps,
+ /*automatic_resize=*/false,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, AdaptsDownForHighQp_Vp9) {
@@ -288,8 +413,10 @@ TEST_F(QualityScalingTest, AdaptsDownForHighQp_Vp9) {
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,1,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Enabled/");
- RunTest("VP9", {true}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP9", /*streams_active=*/{true}, kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForHighQpIfScalingOff_Vp9) {
@@ -297,8 +424,10 @@ TEST_F(QualityScalingTest, NoAdaptDownForHighQpIfScalingOff_Vp9) {
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,1,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Disabled/");
- RunTest("VP9", {true}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP9", /*streams_active=*/{true}, kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, AdaptsDownForLowStartBitrate_Vp9) {
@@ -306,8 +435,10 @@ TEST_F(QualityScalingTest, AdaptsDownForLowStartBitrate_Vp9) {
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,255,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Enabled/");
- RunTest("VP9", {true}, kLowStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP9", /*streams_active=*/{true}, kLowStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForHighQp_LowestStreamActive_Vp9) {
@@ -315,8 +446,11 @@ TEST_F(QualityScalingTest, NoAdaptDownForHighQp_LowestStreamActive_Vp9) {
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,1,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Enabled/");
- RunTest("VP9", {true, false, false}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP9", /*streams_active=*/{true, false, false},
+ kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest,
@@ -325,8 +459,11 @@ TEST_F(QualityScalingTest,
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,255,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Enabled/");
- RunTest("VP9", {true, false, false}, kLowStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP9", /*streams_active=*/{true, false, false},
+ kLowStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, AdaptsDownForHighQp_MiddleStreamActive_Vp9) {
@@ -334,8 +471,11 @@ TEST_F(QualityScalingTest, AdaptsDownForHighQp_MiddleStreamActive_Vp9) {
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,1,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Enabled/");
- RunTest("VP9", {false, true, false}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP9", /*streams_active=*/{false, true, false},
+ kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest,
@@ -344,9 +484,11 @@ TEST_F(QualityScalingTest,
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,255,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Enabled/");
- RunTest("VP9", {false, true, false},
- kSinglecastLimits360pVp9->min_start_bitrate_bps - 1,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("VP9", /*streams_active=*/{false, true, false},
+ kSinglecastLimits360pVp9->min_start_bitrate_bps - 1,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, NoAdaptDownForLowStartBitrateIfBitrateEnough_Vp9) {
@@ -354,9 +496,11 @@ TEST_F(QualityScalingTest, NoAdaptDownForLowStartBitrateIfBitrateEnough_Vp9) {
test::ScopedFieldTrials field_trials(kPrefix + "0,0,1,255,0,0" + kEnd +
"WebRTC-VP9QualityScaler/Enabled/");
- RunTest("VP9", {false, true, false},
- kSinglecastLimits360pVp9->min_start_bitrate_bps,
- /*automatic_resize=*/true, /*expect_adaptation=*/false);
+ DownscalingObserver test("VP9", /*streams_active=*/{false, true, false},
+ kSinglecastLimits360pVp9->min_start_bitrate_bps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/false);
+ RunBaseTest(&test);
}
#if defined(WEBRTC_USE_H264)
@@ -364,16 +508,20 @@ TEST_F(QualityScalingTest, AdaptsDownForHighQp_H264) {
// qp_low:1, qp_high:1 -> kHighQp
test::ScopedFieldTrials field_trials(kPrefix + "0,0,0,0,1,1" + kEnd);
- RunTest("H264", {true}, kHighStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("H264", /*streams_active=*/{true}, kHighStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
TEST_F(QualityScalingTest, AdaptsDownForLowStartBitrate_H264) {
// qp_low:1, qp_high:51 -> kNormalQp
test::ScopedFieldTrials field_trials(kPrefix + "0,0,0,0,1,51" + kEnd);
- RunTest("H264", {true}, kLowStartBps,
- /*automatic_resize=*/true, /*expect_adaptation=*/true);
+ DownscalingObserver test("H264", /*streams_active=*/{true}, kLowStartBps,
+ /*automatic_resize=*/true,
+ /*expect_downscale=*/true);
+ RunBaseTest(&test);
}
#endif // defined(WEBRTC_USE_H264)