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:
parent
60bfb3d4e3
commit
a09484940b
@ -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();
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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_;
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user