From 8d2995b865411912dc3d5a0be113cabfe1e63b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Thu, 9 Aug 2018 11:18:17 +0200 Subject: [PATCH] SimulcastEncoderAdapter should not update maxQp for screencast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:9608 Change-Id: I70f10c77df6579a24678842a9d9e7a2a528b0c40 Reviewed-on: https://webrtc-review.googlesource.com/93287 Commit-Queue: Erik Språng Reviewed-by: Sergey Silkin Cr-Commit-Position: refs/heads/master@{#24241} --- media/engine/simulcast_encoder_adapter.cc | 2 +- .../simulcast_encoder_adapter_unittest.cc | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc index dbf55af6ca..d58a7a7d2a 100644 --- a/media/engine/simulcast_encoder_adapter.cc +++ b/media/engine/simulcast_encoder_adapter.cc @@ -463,7 +463,7 @@ void SimulcastEncoderAdapter::PopulateStreamCodec( stream_codec->qpMax = inst.simulcastStream[stream_index].qpMax; // Settings that are based on stream/resolution. const bool lowest_resolution_stream = (stream_index == 0); - if (lowest_resolution_stream) { + if (lowest_resolution_stream && inst.mode != VideoCodecMode::kScreensharing) { // Settings for lowest spatial resolutions. stream_codec->qpMax = kLowestResMaxQp; } diff --git a/media/engine/simulcast_encoder_adapter_unittest.cc b/media/engine/simulcast_encoder_adapter_unittest.cc index a352887321..5f1eebe0d0 100644 --- a/media/engine/simulcast_encoder_adapter_unittest.cc +++ b/media/engine/simulcast_encoder_adapter_unittest.cc @@ -872,5 +872,36 @@ TEST_F(TestSimulcastEncoderAdapterFake, TestInitFailureCleansUpEncoders) { EXPECT_TRUE(helper_->factory()->encoders().empty()); } +TEST_F(TestSimulcastEncoderAdapterFake, DoesNotAlterMaxQpForScreenshare) { + const int kHighMaxQp = 56; + const int kLowMaxQp = 46; + + SimulcastTestFixtureImpl::DefaultSettings( + &codec_, static_cast(kTestTemporalLayerProfile), + kVideoCodecVP8); + codec_.numberOfSimulcastStreams = 3; + codec_.simulcastStream[0].qpMax = kHighMaxQp; + codec_.mode = VideoCodecMode::kScreensharing; + + EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); + EXPECT_EQ(3u, helper_->factory()->encoders().size()); + + // Just check the lowest stream, which is the one that where the adapter + // might alter the max qp setting. + VideoCodec ref_codec; + InitRefCodec(0, &ref_codec); + ref_codec.qpMax = kHighMaxQp; + ref_codec.VP8()->complexity = webrtc::VideoCodecComplexity::kComplexityHigher; + ref_codec.VP8()->denoisingOn = false; + ref_codec.startBitrate = 100; // Should equal to the target bitrate. + VerifyCodec(ref_codec, 0); + + // Change the max qp and try again. + codec_.simulcastStream[0].qpMax = kLowMaxQp; + EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); + EXPECT_EQ(3u, helper_->factory()->encoders().size()); + ref_codec.qpMax = kLowMaxQp; + VerifyCodec(ref_codec, 0); +} } // namespace test } // namespace webrtc