Do not request encoder switch when the video is suspended.
Bug: None Change-Id: I0ecd4db4ee53e1eb6682a2a98b684fcdf5c2e93b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168924 Commit-Queue: Mirta Dvornicic <mirtad@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30585}
This commit is contained in:

committed by
Commit Bot

parent
9526c557be
commit
5ed40cfa2e
@ -1560,7 +1560,10 @@ void VideoStreamEncoder::OnBitrateUpdated(DataRate target_bitrate,
|
||||
}
|
||||
RTC_DCHECK_RUN_ON(&encoder_queue_);
|
||||
|
||||
if (settings_.encoder_switch_request_callback) {
|
||||
const bool video_is_suspended = target_bitrate == DataRate::Zero();
|
||||
const bool video_suspension_changed = video_is_suspended != EncoderPaused();
|
||||
|
||||
if (!video_is_suspended && settings_.encoder_switch_request_callback) {
|
||||
if (encoder_selector_) {
|
||||
if (auto encoder = encoder_selector_->OnEncodingBitrate(target_bitrate)) {
|
||||
settings_.encoder_switch_request_callback->RequestEncoderSwitch(
|
||||
@ -1594,8 +1597,6 @@ void VideoStreamEncoder::OnBitrateUpdated(DataRate target_bitrate,
|
||||
|
||||
uint32_t framerate_fps = GetInputFramerateFps();
|
||||
frame_dropper_.SetRates((target_bitrate.bps() + 500) / 1000, framerate_fps);
|
||||
const bool video_is_suspended = target_bitrate == DataRate::Zero();
|
||||
const bool video_suspension_changed = video_is_suspended != EncoderPaused();
|
||||
|
||||
EncoderRateSettings new_rate_settings{
|
||||
VideoBitrateAllocation(), static_cast<double>(framerate_fps),
|
||||
|
@ -5258,6 +5258,41 @@ TEST_F(VideoStreamEncoderTest, BitrateEncoderSwitch) {
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest, VideoSuspendedNoEncoderSwitch) {
|
||||
constexpr int kDontCare = 100;
|
||||
|
||||
StrictMock<MockEncoderSwitchRequestCallback> switch_callback;
|
||||
video_send_config_.encoder_settings.encoder_switch_request_callback =
|
||||
&switch_callback;
|
||||
VideoEncoderConfig encoder_config = video_encoder_config_.Copy();
|
||||
encoder_config.codec_type = kVideoCodecVP8;
|
||||
webrtc::test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-NetworkCondition-EncoderSwitch/"
|
||||
"codec_thresholds:VP8;100;-1|H264;-1;30000,"
|
||||
"to_codec:AV1,to_param:ping,to_value:pong,window:2.0/");
|
||||
|
||||
// Reset encoder for new configuration to take effect.
|
||||
ConfigureEncoder(std::move(encoder_config));
|
||||
|
||||
// Send one frame to trigger ReconfigureEncoder.
|
||||
video_source_.IncomingCapturedFrame(
|
||||
CreateFrame(kDontCare, kDontCare, kDontCare));
|
||||
|
||||
using Config = EncoderSwitchRequestCallback::Config;
|
||||
EXPECT_CALL(switch_callback, RequestEncoderSwitch(Matcher<const Config&>(_)))
|
||||
.Times(0);
|
||||
|
||||
video_stream_encoder_->OnBitrateUpdated(
|
||||
/*target_bitrate=*/DataRate::KilobitsPerSec(0),
|
||||
/*stable_target_bitrate=*/DataRate::KilobitsPerSec(0),
|
||||
/*link_allocation=*/DataRate::KilobitsPerSec(kDontCare),
|
||||
/*fraction_lost=*/0,
|
||||
/*rtt_ms=*/0,
|
||||
/*cwnd_reduce_ratio=*/0);
|
||||
|
||||
video_stream_encoder_->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoStreamEncoderTest, ResolutionEncoderSwitch) {
|
||||
constexpr int kSufficientBitrateToNotDrop = 1000;
|
||||
constexpr int kHighRes = 500;
|
||||
|
Reference in New Issue
Block a user