RateControlSettings: add option to set min pixels per frame for libvpx vp8.

Bug: none
Change-Id: I09aa1bcea2f4a9cd65ffeef1df1d9656e4604def
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144029
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28412}
This commit is contained in:
Åsa Persson 2019-06-27 13:44:30 +02:00 committed by Commit Bot
parent 60bfb3d4e3
commit a09484940b
4 changed files with 35 additions and 4 deletions

View File

@ -1198,6 +1198,10 @@ VideoEncoder::EncoderInfo LibvpxVp8Encoder::GetEncoderInfo() const {
? VideoEncoder::ScalingSettings( ? VideoEncoder::ScalingSettings(
kLowVp8QpThreshold, kHighVp8QpThreshold) kLowVp8QpThreshold, kHighVp8QpThreshold)
: VideoEncoder::ScalingSettings::kOff; : VideoEncoder::ScalingSettings::kOff;
if (rate_control_settings_.LibvpxVp8MinPixels()) {
info.scaling_settings.min_pixels_per_frame =
rate_control_settings_.LibvpxVp8MinPixels().value();
}
// |encoder_idx| is libvpx index where 0 is highest resolution. // |encoder_idx| is libvpx index where 0 is highest resolution.
// |si| is simulcast index, where 0 is lowest resolution. // |si| is simulcast index, where 0 is lowest resolution.
for (size_t si = 0, encoder_idx = encoders_.size() - 1; si < encoders_.size(); for (size_t si = 0, encoder_idx = encoders_.size() - 1; si < encoders_.size();

View File

@ -67,6 +67,7 @@ RateControlSettings::RateControlSettings(
pacing_factor_("pacing_factor"), pacing_factor_("pacing_factor"),
alr_probing_("alr_probing", false), alr_probing_("alr_probing", false),
vp8_qp_max_("vp8_qp_max"), vp8_qp_max_("vp8_qp_max"),
vp8_min_pixels_("vp8_min_pixels"),
trust_vp8_( trust_vp8_(
"trust_vp8", "trust_vp8",
IsEnabled(key_value_config, kVp8TrustedRateControllerFieldTrialName)), IsEnabled(key_value_config, kVp8TrustedRateControllerFieldTrialName)),
@ -91,10 +92,10 @@ RateControlSettings::RateControlSettings(
ParseFieldTrial({&congestion_window_, &congestion_window_pushback_}, ParseFieldTrial({&congestion_window_, &congestion_window_pushback_},
key_value_config->Lookup("WebRTC-CongestionWindow")); key_value_config->Lookup("WebRTC-CongestionWindow"));
ParseFieldTrial( ParseFieldTrial(
{&pacing_factor_, &alr_probing_, &vp8_qp_max_, &trust_vp8_, &trust_vp9_, {&pacing_factor_, &alr_probing_, &vp8_qp_max_, &vp8_min_pixels_,
&video_hysteresis_, &screenshare_hysteresis_, &probe_max_allocation_, &trust_vp8_, &trust_vp9_, &video_hysteresis_, &screenshare_hysteresis_,
&bitrate_adjuster_, &adjuster_use_headroom_, &vp8_s0_boost_, &probe_max_allocation_, &bitrate_adjuster_, &adjuster_use_headroom_,
&vp8_dynamic_rate_, &vp9_dynamic_rate_}, &vp8_s0_boost_, &vp8_dynamic_rate_, &vp9_dynamic_rate_},
key_value_config->Lookup("WebRTC-VideoRateControl")); key_value_config->Lookup("WebRTC-VideoRateControl"));
} }
@ -147,6 +148,13 @@ absl::optional<int> RateControlSettings::LibvpxVp8QpMax() const {
return vp8_qp_max_.GetOptional(); return vp8_qp_max_.GetOptional();
} }
absl::optional<int> RateControlSettings::LibvpxVp8MinPixels() const {
if (vp8_min_pixels_ && vp8_min_pixels_.Value() < 1) {
return absl::nullopt;
}
return vp8_min_pixels_.GetOptional();
}
bool RateControlSettings::LibvpxVp8TrustedRateController() const { bool RateControlSettings::LibvpxVp8TrustedRateController() const {
return trust_vp8_.Get(); return trust_vp8_.Get();
} }

View File

@ -41,6 +41,7 @@ class RateControlSettings final {
bool UseAlrProbing() const; bool UseAlrProbing() const;
absl::optional<int> LibvpxVp8QpMax() const; absl::optional<int> LibvpxVp8QpMax() const;
absl::optional<int> LibvpxVp8MinPixels() const;
bool LibvpxVp8TrustedRateController() const; bool LibvpxVp8TrustedRateController() const;
bool Vp8BoostBaseLayerQuality() const; bool Vp8BoostBaseLayerQuality() const;
bool Vp8DynamicRateSettings() const; bool Vp8DynamicRateSettings() const;
@ -69,6 +70,7 @@ class RateControlSettings final {
FieldTrialOptional<double> pacing_factor_; FieldTrialOptional<double> pacing_factor_;
FieldTrialParameter<bool> alr_probing_; FieldTrialParameter<bool> alr_probing_;
FieldTrialOptional<int> vp8_qp_max_; FieldTrialOptional<int> vp8_qp_max_;
FieldTrialOptional<int> vp8_min_pixels_;
FieldTrialParameter<bool> trust_vp8_; FieldTrialParameter<bool> trust_vp8_;
FieldTrialParameter<bool> trust_vp9_; FieldTrialParameter<bool> trust_vp9_;
FieldTrialParameter<double> video_hysteresis_; FieldTrialParameter<double> video_hysteresis_;

View File

@ -79,6 +79,23 @@ TEST(RateControlSettingsTest, DoesNotGetTooLargeLibvpxVp8QpMaxValue) {
EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials().LibvpxVp8QpMax()); EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials().LibvpxVp8QpMax());
} }
TEST(RateControlSettingsTest, LibvpxVp8MinPixels) {
EXPECT_FALSE(
RateControlSettings::ParseFromFieldTrials().LibvpxVp8MinPixels());
test::ScopedFieldTrials field_trials(
"WebRTC-VideoRateControl/vp8_min_pixels:50000/");
EXPECT_EQ(RateControlSettings::ParseFromFieldTrials().LibvpxVp8MinPixels(),
50000);
}
TEST(RateControlSettingsTest, DoesNotGetTooSmallLibvpxVp8MinPixelValue) {
test::ScopedFieldTrials field_trials(
"WebRTC-VideoRateControl/vp8_min_pixels:0/");
EXPECT_FALSE(
RateControlSettings::ParseFromFieldTrials().LibvpxVp8MinPixels());
}
TEST(RateControlSettingsTest, LibvpxTrustedRateController) { TEST(RateControlSettingsTest, LibvpxTrustedRateController) {
const RateControlSettings settings_before = const RateControlSettings settings_before =
RateControlSettings::ParseFromFieldTrials(); RateControlSettings::ParseFromFieldTrials();