Index: webrtc/media/engine/webrtcvideoengine_unittest.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine_unittest.cc b/webrtc/media/engine/webrtcvideoengine_unittest.cc |
index 1306082abf8715b2733109ce4c3f2ad4c1f884cd..683ccd5747f3c34676596434c61c55be5eabbbf6 100644 |
--- a/webrtc/media/engine/webrtcvideoengine_unittest.cc |
+++ b/webrtc/media/engine/webrtcvideoengine_unittest.cc |
@@ -147,7 +147,7 @@ class WebRtcVideoEngineTest : public ::testing::Test { |
explicit WebRtcVideoEngineTest(const char* field_trials) |
: override_field_trials_(field_trials), |
call_(webrtc::Call::Create(webrtc::Call::Config(&event_log_))), |
- engine_() { |
+ engine_(&encoder_factory_, &decoder_factory_) { |
std::vector<VideoCodec> engine_codecs = engine_.codecs(); |
RTC_DCHECK(!engine_codecs.empty()); |
bool codec_set = false; |
@@ -172,11 +172,9 @@ class WebRtcVideoEngineTest : public ::testing::Test { |
// present. |
cricket::VideoCodec GetEngineCodec(const std::string& name); |
- VideoMediaChannel* SetUpForExternalEncoderFactory( |
- cricket::WebRtcVideoEncoderFactory* encoder_factory); |
+ VideoMediaChannel* SetUpForExternalEncoderFactory(); |
VideoMediaChannel* SetUpForExternalDecoderFactory( |
- cricket::WebRtcVideoDecoderFactory* decoder_factory, |
const std::vector<VideoCodec>& codecs); |
void TestExtendedEncoderOveruse(bool use_external_encoder); |
@@ -186,6 +184,8 @@ class WebRtcVideoEngineTest : public ::testing::Test { |
// Used in WebRtcVideoEngineVoiceTest, but defined here so it's properly |
// initialized when the constructor is called. |
std::unique_ptr<webrtc::Call> call_; |
+ cricket::FakeWebRtcVideoEncoderFactory encoder_factory_; |
+ cricket::FakeWebRtcVideoDecoderFactory decoder_factory_; |
WebRtcVideoEngine engine_; |
VideoCodec default_codec_; |
std::map<int, int> default_apt_rtx_types_; |
@@ -273,11 +273,9 @@ TEST_F(WebRtcVideoEngineTest, CVOSetHeaderExtensionBeforeCapturer) { |
// dtor is called. |
cricket::FakeVideoCapturer capturer; |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
// Add CVO extension. |
@@ -305,11 +303,9 @@ TEST_F(WebRtcVideoEngineTest, CVOSetHeaderExtensionBeforeAddSendStream) { |
// dtor is called. |
cricket::FakeVideoCapturer capturer; |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
// Add CVO extension. |
const int id = 1; |
cricket::VideoSendParameters parameters; |
@@ -329,12 +325,10 @@ TEST_F(WebRtcVideoEngineTest, CVOSetHeaderExtensionBeforeAddSendStream) { |
TEST_F(WebRtcVideoEngineTest, CVOSetHeaderExtensionAfterCapturer) { |
cricket::FakeVideoCapturer capturer; |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
- encoder_factory.AddSupportedVideoCodecType("VP9"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP9"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
// Set capturer. |
@@ -364,7 +358,6 @@ TEST_F(WebRtcVideoEngineTest, CVOSetHeaderExtensionAfterCapturer) { |
} |
TEST_F(WebRtcVideoEngineTest, SetSendFailsBeforeSettingCodecs) { |
- engine_.Init(); |
std::unique_ptr<VideoMediaChannel> channel( |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions())); |
@@ -377,7 +370,6 @@ TEST_F(WebRtcVideoEngineTest, SetSendFailsBeforeSettingCodecs) { |
} |
TEST_F(WebRtcVideoEngineTest, GetStatsWithoutSendCodecsSetDoesNotCrash) { |
- engine_.Init(); |
std::unique_ptr<VideoMediaChannel> channel( |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions())); |
EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); |
@@ -386,16 +378,14 @@ TEST_F(WebRtcVideoEngineTest, GetStatsWithoutSendCodecsSetDoesNotCrash) { |
} |
TEST_F(WebRtcVideoEngineTest, UseExternalFactoryForVp8WhenSupported) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
channel->OnReadyToSend(true); |
EXPECT_TRUE( |
channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
- EXPECT_EQ(0, encoder_factory.GetNumCreatedEncoders()); |
+ EXPECT_EQ(0, encoder_factory_.GetNumCreatedEncoders()); |
EXPECT_TRUE(channel->SetSend(true)); |
cricket::FakeVideoCapturer capturer; |
EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); |
@@ -403,11 +393,11 @@ TEST_F(WebRtcVideoEngineTest, UseExternalFactoryForVp8WhenSupported) { |
capturer.Start(capturer.GetSupportedFormats()->front())); |
EXPECT_TRUE(capturer.CaptureFrame()); |
// Sending one frame will have allocate the encoder. |
- ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(1)); |
- EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, |
+ ASSERT_TRUE(encoder_factory_.WaitForCreatedVideoEncoders(1)); |
+ EXPECT_TRUE_WAIT(encoder_factory_.encoders()[0]->GetNumEncodedFrames() > 0, |
kTimeout); |
- int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); |
+ int num_created_encoders = encoder_factory_.GetNumCreatedEncoders(); |
EXPECT_EQ(num_created_encoders, 1); |
// Setting codecs of the same type should not reallocate any encoders |
@@ -415,11 +405,11 @@ TEST_F(WebRtcVideoEngineTest, UseExternalFactoryForVp8WhenSupported) { |
cricket::VideoSendParameters parameters; |
parameters.codecs.push_back(GetEngineCodec("VP8")); |
EXPECT_TRUE(channel->SetSendParameters(parameters)); |
- EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders()); |
+ EXPECT_EQ(num_created_encoders, encoder_factory_.GetNumCreatedEncoders()); |
// Remove stream previously added to free the external encoder instance. |
EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); |
- EXPECT_EQ(0u, encoder_factory.encoders().size()); |
+ EXPECT_EQ(0u, encoder_factory_.encoders().size()); |
} |
// Test that when an external encoder factory supports a codec we don't |
@@ -443,12 +433,9 @@ TEST_F(WebRtcVideoEngineTest, RtxCodecAddedForExternalCodec) { |
h264_high.params[kH264FmtpProfileLevelId] = *ProfileLevelIdToString( |
ProfileLevelId(webrtc::H264::kProfileHigh, kLevel1)); |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodec(h264_constrained_baseline); |
- encoder_factory.AddSupportedVideoCodec(h264_constrained_high); |
- encoder_factory.AddSupportedVideoCodec(h264_high); |
- engine_.SetExternalEncoderFactory(&encoder_factory); |
- engine_.Init(); |
+ encoder_factory_.AddSupportedVideoCodec(h264_constrained_baseline); |
+ encoder_factory_.AddSupportedVideoCodec(h264_constrained_high); |
+ encoder_factory_.AddSupportedVideoCodec(h264_high); |
// First figure out what payload types the test codecs got assigned. |
const std::vector<cricket::VideoCodec> codecs = engine_.codecs(); |
@@ -464,15 +451,13 @@ TEST_F(WebRtcVideoEngineTest, RtxCodecAddedForExternalCodec) { |
void WebRtcVideoEngineTest::TestExtendedEncoderOveruse( |
bool use_external_encoder) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
std::unique_ptr<VideoMediaChannel> channel; |
FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); |
call_.reset(fake_call); |
if (use_external_encoder) { |
- channel.reset(SetUpForExternalEncoderFactory(&encoder_factory)); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
+ channel.reset(SetUpForExternalEncoderFactory()); |
} else { |
- engine_.Init(); |
channel.reset( |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions())); |
} |
@@ -500,11 +485,9 @@ TEST_F(WebRtcVideoEngineTest, DisablesFullEncoderTimeForNonExternalEncoders) { |
#if !defined(RTC_DISABLE_VP9) |
TEST_F(WebRtcVideoEngineTest, CanConstructDecoderForVp9EncoderFactory) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP9"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP9"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
EXPECT_TRUE( |
channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
@@ -512,12 +495,10 @@ TEST_F(WebRtcVideoEngineTest, CanConstructDecoderForVp9EncoderFactory) { |
#endif // !defined(RTC_DISABLE_VP9) |
TEST_F(WebRtcVideoEngineTest, PropagatesInputFrameTimestamp) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); |
call_.reset(fake_call); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
EXPECT_TRUE( |
channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
@@ -578,16 +559,12 @@ cricket::VideoCodec WebRtcVideoEngineTest::GetEngineCodec( |
return cricket::VideoCodec(); |
} |
-VideoMediaChannel* WebRtcVideoEngineTest::SetUpForExternalEncoderFactory( |
- cricket::WebRtcVideoEncoderFactory* encoder_factory) { |
- engine_.SetExternalEncoderFactory(encoder_factory); |
- engine_.Init(); |
- |
+VideoMediaChannel* WebRtcVideoEngineTest::SetUpForExternalEncoderFactory() { |
VideoMediaChannel* channel = |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions()); |
cricket::VideoSendParameters parameters; |
// We need to look up the codec in the engine to get the correct payload type. |
- for (const VideoCodec& codec : encoder_factory->supported_codecs()) |
+ for (const VideoCodec& codec : encoder_factory_.supported_codecs()) |
parameters.codecs.push_back(GetEngineCodec(codec.name)); |
EXPECT_TRUE(channel->SetSendParameters(parameters)); |
@@ -596,11 +573,7 @@ VideoMediaChannel* WebRtcVideoEngineTest::SetUpForExternalEncoderFactory( |
} |
VideoMediaChannel* WebRtcVideoEngineTest::SetUpForExternalDecoderFactory( |
- cricket::WebRtcVideoDecoderFactory* decoder_factory, |
const std::vector<VideoCodec>& codecs) { |
- engine_.SetExternalDecoderFactory(decoder_factory); |
- engine_.Init(); |
- |
VideoMediaChannel* channel = |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions()); |
cricket::VideoRecvParameters parameters; |
@@ -611,11 +584,9 @@ VideoMediaChannel* WebRtcVideoEngineTest::SetUpForExternalDecoderFactory( |
} |
TEST_F(WebRtcVideoEngineTest, UsesSimulcastAdapterForVp8Factories) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
@@ -629,15 +600,15 @@ TEST_F(WebRtcVideoEngineTest, UsesSimulcastAdapterForVp8Factories) { |
capturer.Start(capturer.GetSupportedFormats()->front())); |
EXPECT_TRUE(capturer.CaptureFrame()); |
- ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2)); |
+ ASSERT_TRUE(encoder_factory_.WaitForCreatedVideoEncoders(2)); |
// Verify that encoders are configured for simulcast through adapter |
// (increasing resolution and only configured to send one stream each). |
int prev_width = -1; |
- for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) { |
- ASSERT_TRUE(encoder_factory.encoders()[i]->WaitForInitEncode()); |
+ for (size_t i = 0; i < encoder_factory_.encoders().size(); ++i) { |
+ ASSERT_TRUE(encoder_factory_.encoders()[i]->WaitForInitEncode()); |
webrtc::VideoCodec codec_settings = |
- encoder_factory.encoders()[i]->GetCodecSettings(); |
+ encoder_factory_.encoders()[i]->GetCodecSettings(); |
EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams); |
EXPECT_GT(codec_settings.width, prev_width); |
prev_width = codec_settings.width; |
@@ -646,33 +617,27 @@ TEST_F(WebRtcVideoEngineTest, UsesSimulcastAdapterForVp8Factories) { |
EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), true, nullptr, nullptr)); |
channel.reset(); |
- ASSERT_EQ(0u, encoder_factory.encoders().size()); |
+ ASSERT_EQ(0u, encoder_factory_.encoders().size()); |
} |
TEST_F(WebRtcVideoEngineTest, ChannelWithExternalH264CanChangeToInternalVp8) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("H264"); |
+ encoder_factory_.AddSupportedVideoCodecType("H264"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
EXPECT_TRUE( |
channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
- ASSERT_EQ(1u, encoder_factory.encoders().size()); |
+ ASSERT_EQ(1u, encoder_factory_.encoders().size()); |
cricket::VideoSendParameters parameters; |
parameters.codecs.push_back(GetEngineCodec("VP8")); |
EXPECT_TRUE(channel->SetSendParameters(parameters)); |
- ASSERT_EQ(0u, encoder_factory.encoders().size()); |
+ ASSERT_EQ(0u, encoder_factory_.encoders().size()); |
} |
TEST_F(WebRtcVideoEngineTest, |
DontUseExternalEncoderFactoryForUnsupportedCodecs) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("H264"); |
- |
- engine_.SetExternalEncoderFactory(&encoder_factory); |
- engine_.Init(); |
+ encoder_factory_.AddSupportedVideoCodecType("H264"); |
std::unique_ptr<VideoMediaChannel> channel( |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions())); |
@@ -683,17 +648,13 @@ TEST_F(WebRtcVideoEngineTest, |
EXPECT_TRUE( |
channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
// Make sure DestroyVideoEncoder was called on the factory. |
- ASSERT_EQ(0u, encoder_factory.encoders().size()); |
+ ASSERT_EQ(0u, encoder_factory_.encoders().size()); |
} |
TEST_F(WebRtcVideoEngineTest, |
UsesSimulcastAdapterForVp8WithCombinedVP8AndH264Factory) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
- encoder_factory.AddSupportedVideoCodecType("H264"); |
- |
- engine_.SetExternalEncoderFactory(&encoder_factory); |
- engine_.Init(); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("H264"); |
std::unique_ptr<VideoMediaChannel> channel( |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions())); |
@@ -716,24 +677,20 @@ TEST_F(WebRtcVideoEngineTest, |
capturer.Start(capturer.GetSupportedFormats()->front())); |
EXPECT_TRUE(capturer.CaptureFrame()); |
- ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2)); |
- ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); |
+ ASSERT_TRUE(encoder_factory_.WaitForCreatedVideoEncoders(2)); |
+ ASSERT_TRUE(encoder_factory_.encoders()[0]->WaitForInitEncode()); |
EXPECT_EQ(webrtc::kVideoCodecVP8, |
- encoder_factory.encoders()[0]->GetCodecSettings().codecType); |
+ encoder_factory_.encoders()[0]->GetCodecSettings().codecType); |
channel.reset(); |
// Make sure DestroyVideoEncoder was called on the factory. |
- EXPECT_EQ(0u, encoder_factory.encoders().size()); |
+ EXPECT_EQ(0u, encoder_factory_.encoders().size()); |
} |
TEST_F(WebRtcVideoEngineTest, |
DestroysNonSimulcastEncoderFromCombinedVP8AndH264Factory) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
- encoder_factory.AddSupportedVideoCodecType("H264"); |
- |
- engine_.SetExternalEncoderFactory(&encoder_factory); |
- engine_.Init(); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("H264"); |
std::unique_ptr<VideoMediaChannel> channel( |
engine_.CreateChannel(call_.get(), GetMediaConfig(), VideoOptions())); |
@@ -743,7 +700,7 @@ TEST_F(WebRtcVideoEngineTest, |
EXPECT_TRUE( |
channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
- ASSERT_EQ(1u, encoder_factory.encoders().size()); |
+ ASSERT_EQ(1u, encoder_factory_.encoders().size()); |
// Send a frame of 720p. This should trigger a "real" encoder initialization. |
cricket::VideoFormat format( |
@@ -752,21 +709,19 @@ TEST_F(WebRtcVideoEngineTest, |
EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); |
EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format)); |
EXPECT_TRUE(capturer.CaptureFrame()); |
- ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); |
+ ASSERT_TRUE(encoder_factory_.encoders()[0]->WaitForInitEncode()); |
EXPECT_EQ(webrtc::kVideoCodecH264, |
- encoder_factory.encoders()[0]->GetCodecSettings().codecType); |
+ encoder_factory_.encoders()[0]->GetCodecSettings().codecType); |
channel.reset(); |
// Make sure DestroyVideoEncoder was called on the factory. |
- ASSERT_EQ(0u, encoder_factory.encoders().size()); |
+ ASSERT_EQ(0u, encoder_factory_.encoders().size()); |
} |
TEST_F(WebRtcVideoEngineTest, SimulcastDisabledForH264) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("H264"); |
+ encoder_factory_.AddSupportedVideoCodecType("H264"); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
EXPECT_TRUE( |
@@ -780,9 +735,9 @@ TEST_F(WebRtcVideoEngineTest, SimulcastDisabledForH264) { |
EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format)); |
EXPECT_TRUE(capturer.CaptureFrame()); |
- ASSERT_EQ(1u, encoder_factory.encoders().size()); |
- FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; |
- ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); |
+ ASSERT_EQ(1u, encoder_factory_.encoders().size()); |
+ FakeWebRtcVideoEncoder* encoder = encoder_factory_.encoders()[0]; |
+ ASSERT_TRUE(encoder_factory_.encoders()[0]->WaitForInitEncode()); |
EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); |
EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); |
EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, nullptr)); |
@@ -801,7 +756,6 @@ TEST_F(WebRtcVideoEngineTest, |
}; |
// FlexFEC is not active without field trial. |
- engine_.Init(); |
const std::vector<VideoCodec> codecs_before = engine_.codecs(); |
EXPECT_EQ(codecs_before.end(), std::find_if(codecs_before.begin(), |
codecs_before.end(), is_flexfec)); |
@@ -816,10 +770,7 @@ TEST_F(WebRtcVideoEngineTest, |
// Test that external codecs are added to the end of the supported codec list. |
TEST_F(WebRtcVideoEngineTest, ReportSupportedExternalCodecs) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec"); |
- engine_.SetExternalEncoderFactory(&encoder_factory); |
- engine_.Init(); |
+ encoder_factory_.AddSupportedVideoCodecType("FakeExternalCodec"); |
std::vector<cricket::VideoCodec> codecs(engine_.codecs()); |
ASSERT_GE(codecs.size(), 2u); |
@@ -835,42 +786,38 @@ TEST_F(WebRtcVideoEngineTest, ReportSupportedExternalCodecs) { |
// does show up in the codec list after it was added. |
TEST_F(WebRtcVideoEngineTest, ReportSupportedExternalCodecsWithAddedCodec) { |
// Set up external encoder factory with first codec, and initialize engine. |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec1"); |
- engine_.SetExternalEncoderFactory(&encoder_factory); |
- engine_.Init(); |
+ encoder_factory_.AddSupportedVideoCodecType("FakeExternalCodec1"); |
// The first external codec will appear last in the vector. |
std::vector<cricket::VideoCodec> codecs_before(engine_.codecs()); |
EXPECT_EQ("FakeExternalCodec1", codecs_before.back().name); |
// Add second codec. |
- encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec2"); |
+ encoder_factory_.AddSupportedVideoCodecType("FakeExternalCodec2"); |
std::vector<cricket::VideoCodec> codecs_after(engine_.codecs()); |
EXPECT_EQ(codecs_before.size() + 1, codecs_after.size()); |
EXPECT_EQ("FakeExternalCodec2", codecs_after.back().name); |
} |
TEST_F(WebRtcVideoEngineTest, RegisterExternalDecodersIfSupported) { |
- cricket::FakeWebRtcVideoDecoderFactory decoder_factory; |
- decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); |
+ decoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); |
cricket::VideoRecvParameters parameters; |
parameters.codecs.push_back(GetEngineCodec("VP8")); |
std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalDecoderFactory(&decoder_factory, parameters.codecs)); |
+ SetUpForExternalDecoderFactory(parameters.codecs)); |
EXPECT_TRUE( |
channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
- ASSERT_EQ(1u, decoder_factory.decoders().size()); |
+ ASSERT_EQ(1u, decoder_factory_.decoders().size()); |
// Setting codecs of the same type should not reallocate the decoder. |
EXPECT_TRUE(channel->SetRecvParameters(parameters)); |
- EXPECT_EQ(1, decoder_factory.GetNumCreatedDecoders()); |
+ EXPECT_EQ(1, decoder_factory_.GetNumCreatedDecoders()); |
// Remove stream previously added to free the external decoder instance. |
EXPECT_TRUE(channel->RemoveRecvStream(kSsrc)); |
- EXPECT_EQ(0u, decoder_factory.decoders().size()); |
+ EXPECT_EQ(0u, decoder_factory_.decoders().size()); |
} |
// Verifies that we can set up decoders that are not internally supported. |
@@ -879,20 +826,17 @@ TEST_F(WebRtcVideoEngineTest, RegisterExternalH264DecoderIfSupported) { |
// can't even query the WebRtcVideoDecoderFactory for supported codecs. |
// For now we add a FakeWebRtcVideoEncoderFactory to add H264 to supported |
// codecs. |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("H264"); |
- engine_.SetExternalEncoderFactory(&encoder_factory); |
- cricket::FakeWebRtcVideoDecoderFactory decoder_factory; |
- decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264); |
+ encoder_factory_.AddSupportedVideoCodecType("H264"); |
+ decoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecH264); |
std::vector<cricket::VideoCodec> codecs; |
codecs.push_back(GetEngineCodec("H264")); |
std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalDecoderFactory(&decoder_factory, codecs)); |
+ SetUpForExternalDecoderFactory(codecs)); |
EXPECT_TRUE( |
channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
- ASSERT_EQ(1u, decoder_factory.decoders().size()); |
+ ASSERT_EQ(1u, decoder_factory_.decoders().size()); |
} |
class WebRtcVideoChannelBaseTest |
@@ -915,31 +859,28 @@ class WebRtcVideoChannelBaseTest |
// Verifies that id given in stream params is passed to the decoder factory. |
TEST_F(WebRtcVideoEngineTest, StreamParamsIdPassedToDecoderFactory) { |
- cricket::FakeWebRtcVideoDecoderFactory decoder_factory; |
- decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); |
+ decoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); |
cricket::VideoRecvParameters parameters; |
parameters.codecs.push_back(GetEngineCodec("VP8")); |
std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalDecoderFactory(&decoder_factory, parameters.codecs)); |
+ SetUpForExternalDecoderFactory(parameters.codecs)); |
StreamParams sp = cricket::StreamParams::CreateLegacy(kSsrc); |
sp.id = "FakeStreamParamsId"; |
EXPECT_TRUE(channel->AddRecvStream(sp)); |
- EXPECT_EQ(1u, decoder_factory.decoders().size()); |
+ EXPECT_EQ(1u, decoder_factory_.decoders().size()); |
- std::vector<cricket::VideoDecoderParams> params = decoder_factory.params(); |
+ std::vector<cricket::VideoDecoderParams> params = decoder_factory_.params(); |
ASSERT_EQ(1u, params.size()); |
EXPECT_EQ(sp.id, params[0].receive_stream_id); |
} |
TEST_F(WebRtcVideoEngineTest, DISABLED_RecreatesEncoderOnContentTypeChange) { |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
- encoder_factory.AddSupportedVideoCodecType("VP8"); |
+ encoder_factory_.AddSupportedVideoCodecType("VP8"); |
std::unique_ptr<FakeCall> fake_call( |
new FakeCall(webrtc::Call::Config(&event_log_))); |
- std::unique_ptr<VideoMediaChannel> channel( |
- SetUpForExternalEncoderFactory(&encoder_factory)); |
+ std::unique_ptr<VideoMediaChannel> channel(SetUpForExternalEncoderFactory()); |
ASSERT_TRUE( |
channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
cricket::VideoCodec codec = GetEngineCodec("VP8"); |
@@ -956,14 +897,14 @@ TEST_F(WebRtcVideoEngineTest, DISABLED_RecreatesEncoderOnContentTypeChange) { |
EXPECT_EQ(cricket::CS_RUNNING, |
capturer.Start(capturer.GetSupportedFormats()->front())); |
EXPECT_TRUE(capturer.CaptureFrame()); |
- ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(1)); |
+ ASSERT_TRUE(encoder_factory_.WaitForCreatedVideoEncoders(1)); |
EXPECT_EQ(webrtc::kRealtimeVideo, |
- encoder_factory.encoders().back()->GetCodecSettings().mode); |
+ encoder_factory_.encoders().back()->GetCodecSettings().mode); |
EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, &options, &capturer)); |
EXPECT_TRUE(capturer.CaptureFrame()); |
// No change in content type, keep current encoder. |
- EXPECT_EQ(1, encoder_factory.GetNumCreatedEncoders()); |
+ EXPECT_EQ(1, encoder_factory_.GetNumCreatedEncoders()); |
options.is_screencast.emplace(true); |
EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, &options, &capturer)); |
@@ -971,14 +912,14 @@ TEST_F(WebRtcVideoEngineTest, DISABLED_RecreatesEncoderOnContentTypeChange) { |
// Change to screen content, recreate encoder. For the simulcast encoder |
// adapter case, this will result in two calls since InitEncode triggers a |
// a new instance. |
- ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2)); |
+ ASSERT_TRUE(encoder_factory_.WaitForCreatedVideoEncoders(2)); |
EXPECT_EQ(webrtc::kScreensharing, |
- encoder_factory.encoders().back()->GetCodecSettings().mode); |
+ encoder_factory_.encoders().back()->GetCodecSettings().mode); |
EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, &options, &capturer)); |
EXPECT_TRUE(capturer.CaptureFrame()); |
// Still screen content, no need to update encoder. |
- EXPECT_EQ(2, encoder_factory.GetNumCreatedEncoders()); |
+ EXPECT_EQ(2, encoder_factory_.GetNumCreatedEncoders()); |
options.is_screencast.emplace(false); |
options.video_noise_reduction.emplace(false); |
@@ -986,13 +927,13 @@ TEST_F(WebRtcVideoEngineTest, DISABLED_RecreatesEncoderOnContentTypeChange) { |
// Change back to regular video content, update encoder. Also change |
// a non |is_screencast| option just to verify it doesn't affect recreation. |
EXPECT_TRUE(capturer.CaptureFrame()); |
- ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(3)); |
+ ASSERT_TRUE(encoder_factory_.WaitForCreatedVideoEncoders(3)); |
EXPECT_EQ(webrtc::kRealtimeVideo, |
- encoder_factory.encoders().back()->GetCodecSettings().mode); |
+ encoder_factory_.encoders().back()->GetCodecSettings().mode); |
// Remove stream previously added to free the external encoder instance. |
EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); |
- EXPECT_EQ(0u, encoder_factory.encoders().size()); |
+ EXPECT_EQ(0u, encoder_factory_.encoders().size()); |
} |
#define WEBRTC_BASE_TEST(test) \ |
@@ -1060,7 +1001,6 @@ class WebRtcVideoChannelTest : public WebRtcVideoEngineTest { |
: WebRtcVideoEngineTest(field_trials), last_ssrc_(0) {} |
void SetUp() override { |
fake_call_.reset(new FakeCall(webrtc::Call::Config(&event_log_))); |
- engine_.Init(); |
channel_.reset(engine_.CreateChannel(fake_call_.get(), GetMediaConfig(), |
VideoOptions())); |
channel_->OnReadyToSend(true); |
@@ -1979,19 +1919,11 @@ class Vp9SettingsTest : public WebRtcVideoChannelTest { |
virtual ~Vp9SettingsTest() {} |
protected: |
- void SetUp() override { |
- engine_.SetExternalEncoderFactory(&encoder_factory_); |
- |
- WebRtcVideoChannelTest::SetUp(); |
- } |
- |
void TearDown() override { |
// Remove references to encoder_factory_ since this will be destroyed |
// before channel_ and engine_. |
ASSERT_TRUE(channel_->SetSendParameters(send_parameters_)); |
} |
- |
- cricket::FakeWebRtcVideoEncoderFactory encoder_factory_; |
}; |
TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { |
@@ -4498,10 +4430,11 @@ TEST_F(WebRtcVideoChannelTest, ConfiguresLocalSsrcOnExistingReceivers) { |
class WebRtcVideoChannelSimulcastTest : public testing::Test { |
public: |
WebRtcVideoChannelSimulcastTest() |
- : fake_call_(webrtc::Call::Config(&event_log_)), last_ssrc_(0) {} |
+ : fake_call_(webrtc::Call::Config(&event_log_)), |
+ engine_(&encoder_factory_, &decoder_factory_), |
+ last_ssrc_(0) {} |
void SetUp() override { |
- engine_.Init(); |
channel_.reset( |
engine_.CreateChannel(&fake_call_, GetMediaConfig(), VideoOptions())); |
channel_->OnReadyToSend(true); |
@@ -4657,6 +4590,8 @@ class WebRtcVideoChannelSimulcastTest : public testing::Test { |
webrtc::RtcEventLogNullImpl event_log_; |
FakeCall fake_call_; |
+ cricket::FakeWebRtcVideoEncoderFactory encoder_factory_; |
+ cricket::FakeWebRtcVideoDecoderFactory decoder_factory_; |
WebRtcVideoEngine engine_; |
std::unique_ptr<VideoMediaChannel> channel_; |
uint32_t last_ssrc_; |