Don't override resolution bitrate limits in singlecast mode if they're already set.
Bug: webrtc:13872 Change-Id: I966c744a13cf74336d62d96c72eb37ebf96de71f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/256803 Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Peter Hanspers <peterhanspers@webrtc.org> Cr-Commit-Position: refs/heads/main@{#36342}
This commit is contained in:
parent
56a04c3430
commit
ac2dd12d84
@ -824,7 +824,9 @@ void SimulcastEncoderAdapter::OverrideFromFieldTrial(
|
||||
info->apply_alignment_to_all_simulcast_layers ||
|
||||
encoder_info_override_.apply_alignment_to_all_simulcast_layers();
|
||||
}
|
||||
if (!encoder_info_override_.resolution_bitrate_limits().empty()) {
|
||||
// Override resolution bitrate limits unless they're set already.
|
||||
if (info->resolution_bitrate_limits.empty() &&
|
||||
!encoder_info_override_.resolution_bitrate_limits().empty()) {
|
||||
info->resolution_bitrate_limits =
|
||||
encoder_info_override_.resolution_bitrate_limits();
|
||||
}
|
||||
|
||||
@ -182,6 +182,10 @@ class MockVideoEncoderFactory : public VideoEncoderFactory {
|
||||
void set_supports_simulcast(bool supports_simulcast) {
|
||||
supports_simulcast_ = supports_simulcast;
|
||||
}
|
||||
void set_resolution_bitrate_limits(
|
||||
std::vector<VideoEncoder::ResolutionBitrateLimits> limits) {
|
||||
resolution_bitrate_limits_ = limits;
|
||||
}
|
||||
|
||||
void DestroyVideoEncoder(VideoEncoder* encoder);
|
||||
|
||||
@ -193,6 +197,7 @@ class MockVideoEncoderFactory : public VideoEncoderFactory {
|
||||
// Keep number of entries in sync with `kMaxSimulcastStreams`.
|
||||
std::vector<int> requested_resolution_alignments_ = {1, 1, 1};
|
||||
bool supports_simulcast_ = false;
|
||||
std::vector<VideoEncoder::ResolutionBitrateLimits> resolution_bitrate_limits_;
|
||||
};
|
||||
|
||||
class MockVideoEncoder : public VideoEncoder {
|
||||
@ -245,6 +250,7 @@ class MockVideoEncoder : public VideoEncoder {
|
||||
info.fps_allocation[0] = fps_allocation_;
|
||||
info.supports_simulcast = supports_simulcast_;
|
||||
info.is_qp_trusted = is_qp_trusted_;
|
||||
info.resolution_bitrate_limits = resolution_bitrate_limits;
|
||||
return info;
|
||||
}
|
||||
|
||||
@ -312,6 +318,11 @@ class MockVideoEncoder : public VideoEncoder {
|
||||
is_qp_trusted_ = is_qp_trusted;
|
||||
}
|
||||
|
||||
void set_resolution_bitrate_limits(
|
||||
std::vector<VideoEncoder::ResolutionBitrateLimits> limits) {
|
||||
resolution_bitrate_limits = limits;
|
||||
}
|
||||
|
||||
bool supports_simulcast() const { return supports_simulcast_; }
|
||||
|
||||
SdpVideoFormat video_format() const { return video_format_; }
|
||||
@ -331,6 +342,7 @@ class MockVideoEncoder : public VideoEncoder {
|
||||
bool supports_simulcast_ = false;
|
||||
absl::optional<bool> is_qp_trusted_;
|
||||
SdpVideoFormat video_format_;
|
||||
std::vector<VideoEncoder::ResolutionBitrateLimits> resolution_bitrate_limits;
|
||||
|
||||
VideoCodec codec_;
|
||||
EncodedImageCallback* callback_;
|
||||
@ -359,6 +371,7 @@ std::unique_ptr<VideoEncoder> MockVideoEncoderFactory::CreateVideoEncoder(
|
||||
requested_resolution_alignments_[encoders_.size()]);
|
||||
encoder->set_supports_simulcast(supports_simulcast_);
|
||||
encoder->set_video_format(format);
|
||||
encoder->set_resolution_bitrate_limits(resolution_bitrate_limits_);
|
||||
encoders_.push_back(encoder.get());
|
||||
return encoder;
|
||||
}
|
||||
@ -1329,6 +1342,36 @@ TEST_F(TestSimulcastEncoderAdapterFake,
|
||||
adapter_->GetEncoderInfo().apply_alignment_to_all_simulcast_layers);
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
TestSimulcastEncoderAdapterFake,
|
||||
EncoderInfoFromFieldTrialDoesNotOverrideExistingBitrateLimitsInSinglecast) {
|
||||
test::ScopedFieldTrials field_trials(
|
||||
"WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride/"
|
||||
"frame_size_pixels:123|456|789,"
|
||||
"min_start_bitrate_bps:11000|22000|33000,"
|
||||
"min_bitrate_bps:44000|55000|66000,"
|
||||
"max_bitrate_bps:77000|88000|99000/");
|
||||
|
||||
std::vector<VideoEncoder::ResolutionBitrateLimits> bitrate_limits;
|
||||
bitrate_limits.push_back(
|
||||
VideoEncoder::ResolutionBitrateLimits(111, 11100, 44400, 77700));
|
||||
bitrate_limits.push_back(
|
||||
VideoEncoder::ResolutionBitrateLimits(444, 22200, 55500, 88700));
|
||||
bitrate_limits.push_back(
|
||||
VideoEncoder::ResolutionBitrateLimits(777, 33300, 66600, 99900));
|
||||
SetUp();
|
||||
helper_->factory()->set_resolution_bitrate_limits(bitrate_limits);
|
||||
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile),
|
||||
kVideoCodecVP8);
|
||||
codec_.numberOfSimulcastStreams = 1;
|
||||
EXPECT_EQ(0, adapter_->InitEncode(&codec_, kSettings));
|
||||
ASSERT_EQ(1u, helper_->factory()->encoders().size());
|
||||
EXPECT_EQ(adapter_->GetEncoderInfo().resolution_bitrate_limits,
|
||||
bitrate_limits);
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake, EncoderInfoFromFieldTrial) {
|
||||
test::ScopedFieldTrials field_trials(
|
||||
"WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride/"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user