OLD | NEW |
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 |
11 #include <algorithm> | 11 #include <algorithm> |
12 #include <map> | 12 #include <map> |
13 #include <memory> | 13 #include <memory> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "webrtc/base/arraysize.h" | 16 #include "webrtc/base/arraysize.h" |
17 #include "webrtc/base/gunit.h" | 17 #include "webrtc/base/gunit.h" |
18 #include "webrtc/base/stringutils.h" | 18 #include "webrtc/base/stringutils.h" |
| 19 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" |
19 #include "webrtc/media/base/testutils.h" | 20 #include "webrtc/media/base/testutils.h" |
20 #include "webrtc/media/base/videoengine_unittest.h" | 21 #include "webrtc/media/base/videoengine_unittest.h" |
21 #include "webrtc/media/engine/fakewebrtccall.h" | 22 #include "webrtc/media/engine/fakewebrtccall.h" |
22 #include "webrtc/media/engine/fakewebrtcvideoengine.h" | 23 #include "webrtc/media/engine/fakewebrtcvideoengine.h" |
23 #include "webrtc/media/engine/simulcast.h" | 24 #include "webrtc/media/engine/simulcast.h" |
24 #include "webrtc/media/engine/webrtcvideochannelfactory.h" | 25 #include "webrtc/media/engine/webrtcvideochannelfactory.h" |
25 #include "webrtc/media/engine/webrtcvideoengine2.h" | 26 #include "webrtc/media/engine/webrtcvideoengine2.h" |
26 #include "webrtc/media/engine/webrtcvoiceengine.h" | 27 #include "webrtc/media/engine/webrtcvoiceengine.h" |
27 #include "webrtc/test/field_trial.h" | 28 #include "webrtc/test/field_trial.h" |
28 #include "webrtc/video_encoder.h" | 29 #include "webrtc/video_encoder.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 } | 90 } |
90 } | 91 } |
91 } // namespace | 92 } // namespace |
92 | 93 |
93 namespace cricket { | 94 namespace cricket { |
94 class WebRtcVideoEngine2Test : public ::testing::Test { | 95 class WebRtcVideoEngine2Test : public ::testing::Test { |
95 public: | 96 public: |
96 WebRtcVideoEngine2Test() : WebRtcVideoEngine2Test("") {} | 97 WebRtcVideoEngine2Test() : WebRtcVideoEngine2Test("") {} |
97 explicit WebRtcVideoEngine2Test(const char* field_trials) | 98 explicit WebRtcVideoEngine2Test(const char* field_trials) |
98 : override_field_trials_(field_trials), | 99 : override_field_trials_(field_trials), |
99 call_(webrtc::Call::Create(webrtc::Call::Config())), | 100 call_(webrtc::Call::Create(webrtc::Call::Config(&event_log_))), |
100 engine_() { | 101 engine_() { |
101 std::vector<VideoCodec> engine_codecs = engine_.codecs(); | 102 std::vector<VideoCodec> engine_codecs = engine_.codecs(); |
102 RTC_DCHECK(!engine_codecs.empty()); | 103 RTC_DCHECK(!engine_codecs.empty()); |
103 bool codec_set = false; | 104 bool codec_set = false; |
104 for (size_t i = 0; i < engine_codecs.size(); ++i) { | 105 for (size_t i = 0; i < engine_codecs.size(); ++i) { |
105 if (engine_codecs[i].name == "red") { | 106 if (engine_codecs[i].name == "red") { |
106 default_red_codec_ = engine_codecs[i]; | 107 default_red_codec_ = engine_codecs[i]; |
107 } else if (engine_codecs[i].name == "ulpfec") { | 108 } else if (engine_codecs[i].name == "ulpfec") { |
108 default_ulpfec_codec_ = engine_codecs[i]; | 109 default_ulpfec_codec_ = engine_codecs[i]; |
109 } else if (engine_codecs[i].name == "rtx") { | 110 } else if (engine_codecs[i].name == "rtx") { |
(...skipping 16 matching lines...) Expand all Loading... |
126 cricket::WebRtcVideoEncoderFactory* encoder_factory, | 127 cricket::WebRtcVideoEncoderFactory* encoder_factory, |
127 const std::vector<VideoCodec>& codecs); | 128 const std::vector<VideoCodec>& codecs); |
128 | 129 |
129 VideoMediaChannel* SetUpForExternalDecoderFactory( | 130 VideoMediaChannel* SetUpForExternalDecoderFactory( |
130 cricket::WebRtcVideoDecoderFactory* decoder_factory, | 131 cricket::WebRtcVideoDecoderFactory* decoder_factory, |
131 const std::vector<VideoCodec>& codecs); | 132 const std::vector<VideoCodec>& codecs); |
132 | 133 |
133 void TestExtendedEncoderOveruse(bool use_external_encoder); | 134 void TestExtendedEncoderOveruse(bool use_external_encoder); |
134 | 135 |
135 webrtc::test::ScopedFieldTrials override_field_trials_; | 136 webrtc::test::ScopedFieldTrials override_field_trials_; |
| 137 webrtc::RtcEventLogNullImpl event_log_; |
136 // Used in WebRtcVideoEngine2VoiceTest, but defined here so it's properly | 138 // Used in WebRtcVideoEngine2VoiceTest, but defined here so it's properly |
137 // initialized when the constructor is called. | 139 // initialized when the constructor is called. |
138 std::unique_ptr<webrtc::Call> call_; | 140 std::unique_ptr<webrtc::Call> call_; |
139 WebRtcVideoEngine2 engine_; | 141 WebRtcVideoEngine2 engine_; |
140 VideoCodec default_codec_; | 142 VideoCodec default_codec_; |
141 VideoCodec default_red_codec_; | 143 VideoCodec default_red_codec_; |
142 VideoCodec default_ulpfec_codec_; | 144 VideoCodec default_ulpfec_codec_; |
143 std::map<int, int> default_apt_rtx_types_; | 145 std::map<int, int> default_apt_rtx_types_; |
144 }; | 146 }; |
145 | 147 |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 })); | 407 })); |
406 } | 408 } |
407 | 409 |
408 void WebRtcVideoEngine2Test::TestExtendedEncoderOveruse( | 410 void WebRtcVideoEngine2Test::TestExtendedEncoderOveruse( |
409 bool use_external_encoder) { | 411 bool use_external_encoder) { |
410 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 412 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
411 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 413 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
412 cricket::VideoSendParameters parameters; | 414 cricket::VideoSendParameters parameters; |
413 parameters.codecs.push_back(kVp8Codec); | 415 parameters.codecs.push_back(kVp8Codec); |
414 std::unique_ptr<VideoMediaChannel> channel; | 416 std::unique_ptr<VideoMediaChannel> channel; |
415 FakeCall* fake_call = new FakeCall(webrtc::Call::Config()); | 417 FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); |
416 call_.reset(fake_call); | 418 call_.reset(fake_call); |
417 if (use_external_encoder) { | 419 if (use_external_encoder) { |
418 channel.reset( | 420 channel.reset( |
419 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 421 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
420 } else { | 422 } else { |
421 engine_.Init(); | 423 engine_.Init(); |
422 channel.reset( | 424 channel.reset( |
423 engine_.CreateChannel(call_.get(), MediaConfig(), VideoOptions())); | 425 engine_.CreateChannel(call_.get(), MediaConfig(), VideoOptions())); |
424 } | 426 } |
425 ASSERT_TRUE( | 427 ASSERT_TRUE( |
(...skipping 29 matching lines...) Expand all Loading... |
455 EXPECT_TRUE( | 457 EXPECT_TRUE( |
456 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 458 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
457 } | 459 } |
458 #endif // !defined(RTC_DISABLE_VP9) | 460 #endif // !defined(RTC_DISABLE_VP9) |
459 | 461 |
460 TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) { | 462 TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) { |
461 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 463 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
462 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 464 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
463 std::vector<cricket::VideoCodec> codecs; | 465 std::vector<cricket::VideoCodec> codecs; |
464 codecs.push_back(kVp8Codec); | 466 codecs.push_back(kVp8Codec); |
465 | 467 FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); |
466 FakeCall* fake_call = new FakeCall(webrtc::Call::Config()); | |
467 call_.reset(fake_call); | 468 call_.reset(fake_call); |
468 std::unique_ptr<VideoMediaChannel> channel( | 469 std::unique_ptr<VideoMediaChannel> channel( |
469 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 470 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
470 | 471 |
471 EXPECT_TRUE( | 472 EXPECT_TRUE( |
472 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 473 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
473 | 474 |
474 FakeVideoCapturer capturer; | 475 FakeVideoCapturer capturer; |
475 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); | 476 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); |
476 capturer.Start(cricket::VideoFormat(1280, 720, | 477 capturer.Start(cricket::VideoFormat(1280, 720, |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
873 codec.params[kCodecParamStartBitrate] = "1000000"; | 874 codec.params[kCodecParamStartBitrate] = "1000000"; |
874 Base::TwoStreamsSendAndReceive(codec); | 875 Base::TwoStreamsSendAndReceive(codec); |
875 } | 876 } |
876 | 877 |
877 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test { | 878 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test { |
878 public: | 879 public: |
879 WebRtcVideoChannel2Test() : WebRtcVideoChannel2Test("") {} | 880 WebRtcVideoChannel2Test() : WebRtcVideoChannel2Test("") {} |
880 explicit WebRtcVideoChannel2Test(const char* field_trials) | 881 explicit WebRtcVideoChannel2Test(const char* field_trials) |
881 : WebRtcVideoEngine2Test(field_trials), last_ssrc_(0) {} | 882 : WebRtcVideoEngine2Test(field_trials), last_ssrc_(0) {} |
882 void SetUp() override { | 883 void SetUp() override { |
883 fake_call_.reset(new FakeCall(webrtc::Call::Config())); | 884 fake_call_.reset(new FakeCall(webrtc::Call::Config(&event_log_))); |
884 engine_.Init(); | 885 engine_.Init(); |
885 channel_.reset( | 886 channel_.reset( |
886 engine_.CreateChannel(fake_call_.get(), MediaConfig(), VideoOptions())); | 887 engine_.CreateChannel(fake_call_.get(), MediaConfig(), VideoOptions())); |
887 last_ssrc_ = 123; | 888 last_ssrc_ = 123; |
888 send_parameters_.codecs = engine_.codecs(); | 889 send_parameters_.codecs = engine_.codecs(); |
889 recv_parameters_.codecs = engine_.codecs(); | 890 recv_parameters_.codecs = engine_.codecs(); |
890 ASSERT_TRUE(channel_->SetSendParameters(send_parameters_)); | 891 ASSERT_TRUE(channel_->SetSendParameters(send_parameters_)); |
891 } | 892 } |
892 | 893 |
893 protected: | 894 protected: |
(...skipping 2823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3717 TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrc) { | 3718 TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrc) { |
3718 TestReceiverLocalSsrcConfiguration(false); | 3719 TestReceiverLocalSsrcConfiguration(false); |
3719 } | 3720 } |
3720 | 3721 |
3721 TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrcOnExistingReceivers) { | 3722 TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrcOnExistingReceivers) { |
3722 TestReceiverLocalSsrcConfiguration(true); | 3723 TestReceiverLocalSsrcConfiguration(true); |
3723 } | 3724 } |
3724 | 3725 |
3725 class WebRtcVideoChannel2SimulcastTest : public testing::Test { | 3726 class WebRtcVideoChannel2SimulcastTest : public testing::Test { |
3726 public: | 3727 public: |
3727 WebRtcVideoChannel2SimulcastTest() : fake_call_(webrtc::Call::Config()) {} | 3728 WebRtcVideoChannel2SimulcastTest() |
| 3729 : fake_call_(webrtc::Call::Config(&event_log_)) {} |
3728 | 3730 |
3729 void SetUp() override { | 3731 void SetUp() override { |
3730 engine_.Init(); | 3732 engine_.Init(); |
3731 channel_.reset( | 3733 channel_.reset( |
3732 engine_.CreateChannel(&fake_call_, MediaConfig(), VideoOptions())); | 3734 engine_.CreateChannel(&fake_call_, MediaConfig(), VideoOptions())); |
3733 last_ssrc_ = 123; | 3735 last_ssrc_ = 123; |
3734 } | 3736 } |
3735 | 3737 |
3736 protected: | 3738 protected: |
3737 void VerifySimulcastSettings(const VideoCodec& codec, | 3739 void VerifySimulcastSettings(const VideoCodec& codec, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3832 FakeVideoReceiveStream* AddRecvStream(const StreamParams& sp) { | 3834 FakeVideoReceiveStream* AddRecvStream(const StreamParams& sp) { |
3833 size_t num_streams = | 3835 size_t num_streams = |
3834 fake_call_.GetVideoReceiveStreams().size(); | 3836 fake_call_.GetVideoReceiveStreams().size(); |
3835 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 3837 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
3836 std::vector<FakeVideoReceiveStream*> streams = | 3838 std::vector<FakeVideoReceiveStream*> streams = |
3837 fake_call_.GetVideoReceiveStreams(); | 3839 fake_call_.GetVideoReceiveStreams(); |
3838 EXPECT_EQ(num_streams + 1, streams.size()); | 3840 EXPECT_EQ(num_streams + 1, streams.size()); |
3839 return streams[streams.size() - 1]; | 3841 return streams[streams.size() - 1]; |
3840 } | 3842 } |
3841 | 3843 |
| 3844 webrtc::RtcEventLogNullImpl event_log_; |
3842 FakeCall fake_call_; | 3845 FakeCall fake_call_; |
3843 WebRtcVideoEngine2 engine_; | 3846 WebRtcVideoEngine2 engine_; |
3844 std::unique_ptr<VideoMediaChannel> channel_; | 3847 std::unique_ptr<VideoMediaChannel> channel_; |
3845 uint32_t last_ssrc_; | 3848 uint32_t last_ssrc_; |
3846 }; | 3849 }; |
3847 | 3850 |
3848 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith2SimulcastStreams) { | 3851 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith2SimulcastStreams) { |
3849 VerifySimulcastSettings(kVp8Codec, 2, 2); | 3852 VerifySimulcastSettings(kVp8Codec, 2, 2); |
3850 } | 3853 } |
3851 | 3854 |
3852 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { | 3855 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { |
3853 VerifySimulcastSettings(kVp8Codec720p, 3, 3); | 3856 VerifySimulcastSettings(kVp8Codec720p, 3, 3); |
3854 } | 3857 } |
3855 | 3858 |
3856 // Test that we normalize send codec format size in simulcast. | 3859 // Test that we normalize send codec format size in simulcast. |
3857 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { | 3860 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
3858 cricket::VideoCodec codec(kVp8Codec270p); | 3861 cricket::VideoCodec codec(kVp8Codec270p); |
3859 codec.width += 1; | 3862 codec.width += 1; |
3860 codec.height += 1; | 3863 codec.height += 1; |
3861 VerifySimulcastSettings(codec, 2, 2); | 3864 VerifySimulcastSettings(codec, 2, 2); |
3862 } | 3865 } |
3863 } // namespace cricket | 3866 } // namespace cricket |
OLD | NEW |