Revert "Refactor handling of configuration overrides from Vp8FrameBufferController"
This reverts commit 4d6795f828bc4f2b050405b0ff73d4020b2a2963. Reason for revert: chromium:961253 Original change's description: > Refactor handling of configuration overrides from Vp8FrameBufferController > > Make Vp8FrameBufferController::UpdateConfiguration return a set > of desired overrides. These overrides are cumulative with > previously returned override sets. > > Bug: webrtc:10382 > Change-Id: I1aa9544ae0cf6c57115e80963b3bbcdc3101db5e > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/134649 > Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> > Reviewed-by: Erik Språng <sprang@webrtc.org> > Commit-Queue: Elad Alon <eladalon@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#27835} TBR=brandtr@webrtc.org,eladalon@webrtc.org,sprang@webrtc.org Bug: chromium:961253 Change-Id: I06f0eafd4f38c441ddbdfeebae8055b02465eb9b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/135940 Commit-Queue: Elad Alon <eladalon@webrtc.org> Reviewed-by: Elad Alon <eladalon@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27900}
This commit is contained in:
@ -30,6 +30,7 @@
|
||||
using ::testing::_;
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::NiceMock;
|
||||
using ::testing::Return;
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
@ -92,19 +93,7 @@ class ScreenshareLayerTest : public ::testing::Test {
|
||||
if (tl_config_.drop_frame) {
|
||||
return -1;
|
||||
}
|
||||
const uint32_t prev_rc_target_bitrate = cfg_.rc_target_bitrate.value_or(-1);
|
||||
const uint32_t prev_rc_max_quantizer = cfg_.rc_max_quantizer.value_or(-1);
|
||||
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
|
||||
config_updated_ =
|
||||
cfg_.temporal_layer_config.has_value() ||
|
||||
(cfg_.rc_target_bitrate.has_value() &&
|
||||
cfg_.rc_target_bitrate.value() != prev_rc_target_bitrate) ||
|
||||
(cfg_.rc_max_quantizer.has_value() &&
|
||||
cfg_.rc_max_quantizer.value() != prev_rc_max_quantizer) ||
|
||||
cfg_.g_error_resilient.has_value();
|
||||
|
||||
config_updated_ = layers_->UpdateConfiguration(0, &cfg_);
|
||||
int flags = LibvpxVp8Encoder::EncodeFlags(tl_config_);
|
||||
EXPECT_NE(-1, frame_size_);
|
||||
return flags;
|
||||
@ -121,11 +110,13 @@ class ScreenshareLayerTest : public ::testing::Test {
|
||||
}
|
||||
|
||||
Vp8EncoderConfig ConfigureBitrates() {
|
||||
layers_->SetQpLimits(0, min_qp_, max_qp_);
|
||||
Vp8EncoderConfig vp8_cfg;
|
||||
memset(&vp8_cfg, 0, sizeof(Vp8EncoderConfig));
|
||||
vp8_cfg.rc_min_quantizer = min_qp_;
|
||||
vp8_cfg.rc_max_quantizer = max_qp_;
|
||||
layers_->OnRatesUpdated(0, kDefault2TlBitratesBps, kFrameRate);
|
||||
const Vp8EncoderConfig vp8_cfg = layers_->UpdateConfiguration(0);
|
||||
EXPECT_TRUE(vp8_cfg.rc_target_bitrate.has_value());
|
||||
frame_size_ = FrameSizeForBitrate(vp8_cfg.rc_target_bitrate.value());
|
||||
EXPECT_TRUE(layers_->UpdateConfiguration(0, &vp8_cfg));
|
||||
frame_size_ = FrameSizeForBitrate(vp8_cfg.rc_target_bitrate);
|
||||
return vp8_cfg;
|
||||
}
|
||||
|
||||
@ -255,7 +246,7 @@ TEST_F(ScreenshareLayerTest, 2LayersSyncAfterTimeout) {
|
||||
CodecSpecificInfo info;
|
||||
|
||||
tl_config_ = NextFrameConfig(0, timestamp_);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
config_updated_ = layers_->UpdateConfiguration(0, &cfg_);
|
||||
|
||||
// Simulate TL1 being at least 8 qp steps better.
|
||||
if (tl_config_.packetizer_temporal_idx == 0) {
|
||||
@ -403,7 +394,7 @@ TEST_F(ScreenshareLayerTest, TargetBitrateCappedByTL0) {
|
||||
const std::vector<uint32_t> layer_rates = {kTl0_kbps * 1000,
|
||||
(kTl1_kbps - kTl0_kbps) * 1000};
|
||||
layers_->OnRatesUpdated(0, layer_rates, kFrameRate);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
EXPECT_TRUE(layers_->UpdateConfiguration(0, &cfg_));
|
||||
|
||||
EXPECT_EQ(static_cast<unsigned int>(
|
||||
ScreenshareLayers::kMaxTL0FpsReduction * kTl0_kbps + 0.5),
|
||||
@ -416,7 +407,7 @@ TEST_F(ScreenshareLayerTest, TargetBitrateCappedByTL1) {
|
||||
const std::vector<uint32_t> layer_rates = {kTl0_kbps * 1000,
|
||||
(kTl1_kbps - kTl0_kbps) * 1000};
|
||||
layers_->OnRatesUpdated(0, layer_rates, kFrameRate);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
EXPECT_TRUE(layers_->UpdateConfiguration(0, &cfg_));
|
||||
|
||||
EXPECT_EQ(static_cast<unsigned int>(
|
||||
kTl1_kbps / ScreenshareLayers::kAcceptableTargetOvershoot),
|
||||
@ -427,7 +418,7 @@ TEST_F(ScreenshareLayerTest, TargetBitrateBelowTL0) {
|
||||
const int kTl0_kbps = 100;
|
||||
const std::vector<uint32_t> layer_rates = {kTl0_kbps * 1000};
|
||||
layers_->OnRatesUpdated(0, layer_rates, kFrameRate);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
EXPECT_TRUE(layers_->UpdateConfiguration(0, &cfg_));
|
||||
|
||||
EXPECT_EQ(static_cast<uint32_t>(kTl0_kbps), cfg_.rc_target_bitrate);
|
||||
}
|
||||
@ -493,7 +484,7 @@ TEST_F(ScreenshareLayerTest, RespectsMaxIntervalBetweenFrames) {
|
||||
|
||||
const std::vector<uint32_t> layer_rates = {kLowBitrateKbps * 1000};
|
||||
layers_->OnRatesUpdated(0, layer_rates, kFrameRate);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
layers_->UpdateConfiguration(0, &cfg_);
|
||||
|
||||
EXPECT_EQ(kTl0Flags,
|
||||
LibvpxVp8Encoder::EncodeFlags(NextFrameConfig(0, kStartTimestamp)));
|
||||
@ -536,7 +527,7 @@ TEST_F(ScreenshareLayerTest, UpdatesHistograms) {
|
||||
}
|
||||
int flags = LibvpxVp8Encoder::EncodeFlags(tl_config_);
|
||||
if (flags != -1)
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
layers_->UpdateConfiguration(0, &cfg_);
|
||||
|
||||
if (timestamp >= kTimestampDelta5Fps * 5 && !overshoot && flags != -1) {
|
||||
// Simulate one overshoot.
|
||||
@ -601,6 +592,13 @@ TEST_F(ScreenshareLayerTest, UpdatesHistograms) {
|
||||
kDefaultTl1BitrateKbps));
|
||||
}
|
||||
|
||||
TEST_F(ScreenshareLayerTest, AllowsUpdateConfigBeforeSetRates) {
|
||||
layers_.reset(new ScreenshareLayers(2));
|
||||
// New layer instance, OnRatesUpdated() never called.
|
||||
// UpdateConfiguration() call should not cause crash.
|
||||
layers_->UpdateConfiguration(0, &cfg_);
|
||||
}
|
||||
|
||||
TEST_F(ScreenshareLayerTest, RespectsConfiguredFramerate) {
|
||||
int64_t kTestSpanMs = 2000;
|
||||
int64_t kFrameIntervalsMs = 1000 / kFrameRate;
|
||||
@ -656,7 +654,7 @@ TEST_F(ScreenshareLayerTest, 2LayersSyncAtOvershootDrop) {
|
||||
// Simulate overshoot of this frame.
|
||||
layers_->OnEncodeDone(0, timestamp_, 0, false, 0, nullptr);
|
||||
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
config_updated_ = layers_->UpdateConfiguration(0, &cfg_);
|
||||
EXPECT_EQ(kTl1SyncFlags, LibvpxVp8Encoder::EncodeFlags(tl_config_));
|
||||
|
||||
CodecSpecificInfo new_info;
|
||||
@ -689,8 +687,7 @@ TEST_F(ScreenshareLayerTest, DropOnTooShortFrameInterval) {
|
||||
TEST_F(ScreenshareLayerTest, AdjustsBitrateWhenDroppingFrames) {
|
||||
const uint32_t kTimestampDelta10Fps = kTimestampDelta5Fps / 2;
|
||||
const int kNumFrames = 30;
|
||||
ASSERT_TRUE(cfg_.rc_target_bitrate.has_value());
|
||||
const uint32_t default_bitrate = cfg_.rc_target_bitrate.value();
|
||||
uint32_t default_bitrate = cfg_.rc_target_bitrate;
|
||||
layers_->OnRatesUpdated(0, kDefault2TlBitratesBps, 10);
|
||||
|
||||
int num_dropped_frames = 0;
|
||||
@ -699,7 +696,7 @@ TEST_F(ScreenshareLayerTest, AdjustsBitrateWhenDroppingFrames) {
|
||||
++num_dropped_frames;
|
||||
timestamp_ += kTimestampDelta10Fps;
|
||||
}
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
layers_->UpdateConfiguration(0, &cfg_);
|
||||
|
||||
EXPECT_EQ(num_dropped_frames, kNumFrames / 2);
|
||||
EXPECT_EQ(cfg_.rc_target_bitrate, default_bitrate * 2);
|
||||
@ -708,20 +705,20 @@ TEST_F(ScreenshareLayerTest, AdjustsBitrateWhenDroppingFrames) {
|
||||
TEST_F(ScreenshareLayerTest, UpdatesConfigurationAfterRateChange) {
|
||||
// Set inital rate again, no need to update configuration.
|
||||
layers_->OnRatesUpdated(0, kDefault2TlBitratesBps, kFrameRate);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
EXPECT_FALSE(layers_->UpdateConfiguration(0, &cfg_));
|
||||
|
||||
// Rate changed, now update config.
|
||||
std::vector<uint32_t> bitrates = kDefault2TlBitratesBps;
|
||||
bitrates[1] -= 100000;
|
||||
layers_->OnRatesUpdated(0, bitrates, 5);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
EXPECT_TRUE(layers_->UpdateConfiguration(0, &cfg_));
|
||||
|
||||
// Changed rate, but then set changed rate again before trying to update
|
||||
// configuration, update should still apply.
|
||||
bitrates[1] -= 100000;
|
||||
layers_->OnRatesUpdated(0, bitrates, 5);
|
||||
layers_->OnRatesUpdated(0, bitrates, 5);
|
||||
cfg_ = layers_->UpdateConfiguration(0);
|
||||
EXPECT_TRUE(layers_->UpdateConfiguration(0, &cfg_));
|
||||
}
|
||||
|
||||
TEST_F(ScreenshareLayerTest, MaxQpRestoredAfterDoubleDrop) {
|
||||
@ -747,8 +744,7 @@ TEST_F(ScreenshareLayerTest, MaxQpRestoredAfterDoubleDrop) {
|
||||
EXPECT_EQ(kTl1Flags, SkipUntilTlAndSync(1, false));
|
||||
EXPECT_TRUE(config_updated_);
|
||||
EXPECT_LT(cfg_.rc_max_quantizer, max_qp_);
|
||||
ASSERT_TRUE(cfg_.rc_max_quantizer.has_value());
|
||||
const uint32_t adjusted_qp = cfg_.rc_max_quantizer.value();
|
||||
uint32_t adjusted_qp = cfg_.rc_max_quantizer;
|
||||
|
||||
// Simulate overshoot of this frame.
|
||||
layers_->OnEncodeDone(0, timestamp_, 0, false, -1, nullptr);
|
||||
|
||||
Reference in New Issue
Block a user