Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
index f72d7ae86c49403eb7f73cc6b23c43b5a44639a2..a93d2d98c29599df279446b1abb5d90b4fda8a17 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
@@ -21,6 +21,7 @@ |
#include "webrtc/media/base/mediaconstants.h" |
#include "webrtc/media/base/testutils.h" |
#include "webrtc/media/base/videoengine_unittest.h" |
+#include "webrtc/media/engine/constants.h" |
#include "webrtc/media/engine/fakewebrtccall.h" |
#include "webrtc/media/engine/fakewebrtcvideoengine.h" |
#include "webrtc/media/engine/simulcast.h" |
@@ -3960,7 +3961,7 @@ TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrcOnExistingReceivers) { |
class WebRtcVideoChannel2SimulcastTest : public testing::Test { |
public: |
WebRtcVideoChannel2SimulcastTest() |
- : fake_call_(webrtc::Call::Config(&event_log_)) {} |
+ : fake_call_(webrtc::Call::Config(&event_log_)), last_ssrc_(0) {} |
void SetUp() override { |
engine_.Init(); |
@@ -3975,9 +3976,16 @@ class WebRtcVideoChannel2SimulcastTest : public testing::Test { |
int capture_width, |
int capture_height, |
size_t num_configured_streams, |
- size_t expected_num_streams) { |
+ size_t expected_num_streams, |
+ bool screenshare, |
+ bool conference_mode) { |
cricket::VideoSendParameters parameters; |
+ VideoOptions options; |
parameters.codecs.push_back(codec); |
+ parameters.conference_mode = conference_mode; |
+ if (screenshare) { |
+ options.is_screencast = rtc::Optional<bool>(screenshare); |
+ } |
ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
@@ -3990,7 +3998,7 @@ class WebRtcVideoChannel2SimulcastTest : public testing::Test { |
// expected simulcast layers. |
cricket::FakeVideoCapturer capturer; |
EXPECT_TRUE( |
- channel_->SetVideoSend(ssrcs.front(), true, nullptr, &capturer)); |
+ channel_->SetVideoSend(ssrcs.front(), true, &options, &capturer)); |
EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat( |
capture_width, capture_height, |
cricket::VideoFormat::FpsToInterval(30), |
@@ -4001,9 +4009,32 @@ class WebRtcVideoChannel2SimulcastTest : public testing::Test { |
std::vector<webrtc::VideoStream> video_streams = stream->GetVideoStreams(); |
ASSERT_EQ(expected_num_streams, video_streams.size()); |
- std::vector<webrtc::VideoStream> expected_streams = GetSimulcastConfig( |
- num_configured_streams, capture_width, capture_height, 0, kDefaultQpMax, |
- kDefaultVideoMaxFramerate); |
+ std::vector<webrtc::VideoStream> expected_streams; |
+ if (conference_mode) { |
+ expected_streams = GetSimulcastConfig( |
+ num_configured_streams, capture_width, capture_height, 0, |
+ kDefaultQpMax, kDefaultVideoMaxFramerate, screenshare); |
+ } else { |
+ webrtc::VideoStream stream; |
+ stream.width = capture_width; |
+ stream.height = capture_height; |
+ stream.max_framerate = kDefaultVideoMaxFramerate; |
+ stream.min_bitrate_bps = cricket::kMinVideoBitrateKbps * 1000; |
+ int max_bitrate_kbps; |
+ if (capture_width * capture_height <= 320 * 240) { |
+ max_bitrate_kbps = 600; |
+ } else if (capture_width * capture_height <= 640 * 480) { |
+ max_bitrate_kbps = 1700; |
+ } else if (capture_width * capture_height <= 960 * 540) { |
+ max_bitrate_kbps = 2000; |
+ } else { |
+ max_bitrate_kbps = 2500; |
+ } |
+ stream.target_bitrate_bps = stream.max_bitrate_bps = |
+ max_bitrate_kbps * 1000; |
+ stream.max_qp = kDefaultQpMax; |
+ expected_streams.push_back(stream); |
+ } |
ASSERT_EQ(expected_streams.size(), video_streams.size()); |
@@ -4032,7 +4063,8 @@ class WebRtcVideoChannel2SimulcastTest : public testing::Test { |
EXPECT_GT(video_streams[i].max_qp, 0); |
EXPECT_EQ(expected_streams[i].max_qp, video_streams[i].max_qp); |
- EXPECT_FALSE(expected_streams[i].temporal_layer_thresholds_bps.empty()); |
+ EXPECT_EQ(!conference_mode, |
+ expected_streams[i].temporal_layer_thresholds_bps.empty()); |
EXPECT_EQ(expected_streams[i].temporal_layer_thresholds_bps, |
video_streams[i].temporal_layer_thresholds_bps); |
@@ -4086,15 +4118,37 @@ class WebRtcVideoChannel2SimulcastTest : public testing::Test { |
}; |
TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith2SimulcastStreams) { |
- VerifySimulcastSettings(cricket::VideoCodec("VP8"), 640, 360, 2, 2); |
+ VerifySimulcastSettings(cricket::VideoCodec("VP8"), 640, 360, 2, 2, false, |
+ true); |
} |
TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { |
- VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3); |
+ VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3, false, |
+ true); |
} |
// Test that we normalize send codec format size in simulcast. |
TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
- VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2); |
+ VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2, false, |
+ true); |
+} |
+ |
+TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsForScreenshare) { |
+ VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 1, true, |
+ false); |
} |
+ |
+TEST_F(WebRtcVideoChannel2SimulcastTest, |
+ SetSendCodecsForConferenceModeScreenshare) { |
+ VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 1, true, |
+ true); |
+} |
+ |
+TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsForSimulcastScreenshare) { |
+ webrtc::test::ScopedFieldTrials override_field_trials_( |
+ "WebRTC-SimulcastScreenshare/Enabled/"); |
+ VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 2, true, |
+ true); |
+} |
+ |
} // namespace cricket |