Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2_unittest.cc

Issue 2636443002: Add experimental simulcast screen content mode (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 3909 matching lines...) Expand 10 before | Expand all | Expand 10 after
3920 TestReceiverLocalSsrcConfiguration(false); 3920 TestReceiverLocalSsrcConfiguration(false);
3921 } 3921 }
3922 3922
3923 TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrcOnExistingReceivers) { 3923 TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrcOnExistingReceivers) {
3924 TestReceiverLocalSsrcConfiguration(true); 3924 TestReceiverLocalSsrcConfiguration(true);
3925 } 3925 }
3926 3926
3927 class WebRtcVideoChannel2SimulcastTest : public testing::Test { 3927 class WebRtcVideoChannel2SimulcastTest : public testing::Test {
3928 public: 3928 public:
3929 WebRtcVideoChannel2SimulcastTest() 3929 WebRtcVideoChannel2SimulcastTest()
3930 : fake_call_(webrtc::Call::Config(&event_log_)) {} 3930 : fake_call_(webrtc::Call::Config(&event_log_)), last_ssrc_(0) {}
3931 3931
3932 void SetUp() override { 3932 void SetUp() override {
3933 engine_.Init(); 3933 engine_.Init();
3934 channel_.reset( 3934 channel_.reset(
3935 engine_.CreateChannel(&fake_call_, MediaConfig(), VideoOptions())); 3935 engine_.CreateChannel(&fake_call_, MediaConfig(), VideoOptions()));
3936 channel_->OnReadyToSend(true); 3936 channel_->OnReadyToSend(true);
3937 last_ssrc_ = 123; 3937 last_ssrc_ = 123;
3938 } 3938 }
3939 3939
3940 protected: 3940 protected:
3941 void VerifySimulcastSettings(const VideoCodec& codec, 3941 void VerifySimulcastSettings(const VideoCodec& codec,
3942 int capture_width, 3942 int capture_width,
3943 int capture_height, 3943 int capture_height,
3944 size_t num_configured_streams, 3944 size_t num_configured_streams,
3945 size_t expected_num_streams) { 3945 size_t expected_num_streams,
3946 bool screenshare) {
3946 cricket::VideoSendParameters parameters; 3947 cricket::VideoSendParameters parameters;
3948 VideoOptions options;
3947 parameters.codecs.push_back(codec); 3949 parameters.codecs.push_back(codec);
3950 if (screenshare) {
3951 parameters.conference_mode = true;
3952 options.is_screencast = rtc::Optional<bool>(screenshare);
3953 }
3948 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 3954 ASSERT_TRUE(channel_->SetSendParameters(parameters));
3949 3955
3950 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 3956 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
3951 RTC_DCHECK(num_configured_streams <= ssrcs.size()); 3957 RTC_DCHECK(num_configured_streams <= ssrcs.size());
3952 ssrcs.resize(num_configured_streams); 3958 ssrcs.resize(num_configured_streams);
3953 3959
3954 FakeVideoSendStream* stream = 3960 FakeVideoSendStream* stream =
3955 AddSendStream(CreateSimStreamParams("cname", ssrcs)); 3961 AddSendStream(CreateSimStreamParams("cname", ssrcs));
3956 // Send a full-size frame to trigger a stream reconfiguration to use all 3962 // Send a full-size frame to trigger a stream reconfiguration to use all
3957 // expected simulcast layers. 3963 // expected simulcast layers.
3958 cricket::FakeVideoCapturer capturer; 3964 cricket::FakeVideoCapturer capturer;
3959 EXPECT_TRUE( 3965 EXPECT_TRUE(
3960 channel_->SetVideoSend(ssrcs.front(), true, nullptr, &capturer)); 3966 channel_->SetVideoSend(ssrcs.front(), true, &options, &capturer));
3961 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat( 3967 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat(
3962 capture_width, capture_height, 3968 capture_width, capture_height,
3963 cricket::VideoFormat::FpsToInterval(30), 3969 cricket::VideoFormat::FpsToInterval(30),
3964 cricket::FOURCC_I420))); 3970 cricket::FOURCC_I420)));
3965 channel_->SetSend(true); 3971 channel_->SetSend(true);
3966 EXPECT_TRUE(capturer.CaptureFrame()); 3972 EXPECT_TRUE(capturer.CaptureFrame());
3967 3973
3968 std::vector<webrtc::VideoStream> video_streams = stream->GetVideoStreams(); 3974 std::vector<webrtc::VideoStream> video_streams = stream->GetVideoStreams();
3969 ASSERT_EQ(expected_num_streams, video_streams.size()); 3975 ASSERT_EQ(expected_num_streams, video_streams.size());
3970 3976
3971 std::vector<webrtc::VideoStream> expected_streams = GetSimulcastConfig( 3977 std::vector<webrtc::VideoStream> expected_streams = GetSimulcastConfig(
3972 num_configured_streams, capture_width, capture_height, 0, kDefaultQpMax, 3978 num_configured_streams, capture_width, capture_height, 0, kDefaultQpMax,
3973 kDefaultVideoMaxFramerate); 3979 kDefaultVideoMaxFramerate, screenshare);
3974 3980
3975 ASSERT_EQ(expected_streams.size(), video_streams.size()); 3981 ASSERT_EQ(expected_streams.size(), video_streams.size());
3976 3982
3977 size_t num_streams = video_streams.size(); 3983 size_t num_streams = video_streams.size();
3978 int total_max_bitrate_bps = 0; 3984 int total_max_bitrate_bps = 0;
3979 for (size_t i = 0; i < num_streams; ++i) { 3985 for (size_t i = 0; i < num_streams; ++i) {
3980 EXPECT_EQ(expected_streams[i].width, video_streams[i].width); 3986 EXPECT_EQ(expected_streams[i].width, video_streams[i].width);
3981 EXPECT_EQ(expected_streams[i].height, video_streams[i].height); 3987 EXPECT_EQ(expected_streams[i].height, video_streams[i].height);
3982 3988
3983 EXPECT_GT(video_streams[i].max_framerate, 0); 3989 EXPECT_GT(video_streams[i].max_framerate, 0);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
4046 } 4052 }
4047 4053
4048 webrtc::RtcEventLogNullImpl event_log_; 4054 webrtc::RtcEventLogNullImpl event_log_;
4049 FakeCall fake_call_; 4055 FakeCall fake_call_;
4050 WebRtcVideoEngine2 engine_; 4056 WebRtcVideoEngine2 engine_;
4051 std::unique_ptr<VideoMediaChannel> channel_; 4057 std::unique_ptr<VideoMediaChannel> channel_;
4052 uint32_t last_ssrc_; 4058 uint32_t last_ssrc_;
4053 }; 4059 };
4054 4060
4055 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith2SimulcastStreams) { 4061 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith2SimulcastStreams) {
4056 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 640, 360, 2, 2); 4062 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 640, 360, 2, 2, false);
4057 } 4063 }
4058 4064
4059 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { 4065 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) {
4060 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3); 4066 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3, false);
4061 } 4067 }
4062 4068
4063 // Test that we normalize send codec format size in simulcast. 4069 // Test that we normalize send codec format size in simulcast.
4064 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 4070 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
4065 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2); 4071 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2, false);
4066 } 4072 }
4073
4074 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsForScreenshare) {
4075 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 1, true);
4076 }
4077
4078 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsForSimulcastScreenshare) {
4079 webrtc::test::ScopedFieldTrials override_field_trials_(
4080 "WebRTC-SimulcastScreenshare/Enabled/");
4081 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 2, true);
4082 }
4083
4067 } // namespace cricket 4084 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698