Chromium Code Reviews| Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc |
| diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
| index c473a4099f98d9838a0a9de28857997253f87141..84beddb38173f5940e660b5f7266ac32628008de 100644 |
| --- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
| +++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
| @@ -12,6 +12,7 @@ |
| #include <list> |
| #include <map> |
| #include <memory> |
| +#include <unordered_set> |
|
perkj_webrtc
2016/11/28 10:56:05
remove
brandtr
2016/11/28 11:47:50
Done.
|
| #include <vector> |
| #include "webrtc/base/arraysize.h" |
| @@ -26,6 +27,8 @@ |
| #include "webrtc/media/engine/simulcast.h" |
| #include "webrtc/media/engine/webrtcvideoengine2.h" |
| #include "webrtc/media/engine/webrtcvoiceengine.h" |
| +#include "webrtc/modules/video_coding/codecs/h264/include/h264.h" |
|
perkj_webrtc
2016/11/28 10:56:05
remove
brandtr
2016/11/28 11:47:50
Done.
|
| +#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" |
|
perkj_webrtc
2016/11/28 10:56:05
remove
brandtr
2016/11/28 11:47:50
Done.
|
| #include "webrtc/test/field_trial.h" |
| #include "webrtc/video_encoder.h" |
| @@ -78,7 +81,7 @@ bool HasRtxCodec(const std::vector<cricket::VideoCodec>& codecs, |
| return false; |
| } |
| -static rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateBlackFrameBuffer( |
| +rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateBlackFrameBuffer( |
| int width, |
| int height) { |
| rtc::scoped_refptr<webrtc::I420Buffer> buffer = |
| @@ -100,6 +103,14 @@ void VerifySendStreamHasRtxTypes(const webrtc::VideoSendStream::Config& config, |
| it->second == config.rtp.ulpfec.red_rtx_payload_type); |
| } |
| } |
| + |
| +std::unordered_set<std::string> GetCodecNames( |
| + const cricket::WebRtcVideoEngine2& engine) { |
| + std::unordered_set<std::string> codec_names; |
| + for (const auto& codec : engine.codecs()) |
| + codec_names.insert(codec.name); |
| + return codec_names; |
| +} |
| } // namespace |
| namespace cricket { |
| @@ -749,6 +760,62 @@ TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { |
| EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, nullptr)); |
| } |
| +// Test that internal codecs are added to the codec list. |
| +// Update this test if the internal codecs are changed! |
| +TEST_F(WebRtcVideoEngine2Test, ReportSupportedInternalCodecs) { |
| + engine_.Init(); |
| + std::unordered_set<std::string> codec_names = GetCodecNames(engine_); |
| + |
| + size_t expected_num_codecs = 4; |
| + EXPECT_NE(codec_names.find("VP8"), codec_names.end()); |
| + if (webrtc::VP9Encoder::IsSupported()) { |
| + EXPECT_NE(codec_names.find("VP9"), codec_names.end()); |
| + ++expected_num_codecs; |
| + } |
| + if (webrtc::H264Encoder::IsSupported()) { |
| + EXPECT_NE(codec_names.find("H264"), codec_names.end()); |
| + ++expected_num_codecs; |
| + } |
| + EXPECT_NE(codec_names.find("rtx"), codec_names.end()); |
| + EXPECT_NE(codec_names.find("red"), codec_names.end()); |
| + EXPECT_NE(codec_names.find("ulpfec"), codec_names.end()); |
| + EXPECT_EQ(expected_num_codecs, codec_names.size()); |
| +} |
| + |
| +// TODO(brandtr): Remove this fixture when the FlexFEC field trial is gone. |
| +class WebRtcVideoEngine2FlexfecTest : public WebRtcVideoEngine2Test { |
| + public: |
| + WebRtcVideoEngine2FlexfecTest() |
| + : WebRtcVideoEngine2Test("WebRTC-FlexFEC-03/Enabled/") {} |
| +}; |
| + |
| +// Test that the FlexFEC field trial properly alters the output of |
| +// WebRtcVideoEngine2::codecs(), for a newly created |engine_| object. |
| +// |
| +// TODO(brandtr): Merge with test above, when the FlexFEC field trial is gone. |
| +TEST_F(WebRtcVideoEngine2FlexfecTest, ReportSupportedInternalCodecs) { |
| + engine_.Init(); |
| + std::unordered_set<std::string> codec_names = GetCodecNames(engine_); |
| + |
| + EXPECT_NE(codec_names.find("flexfec-03"), codec_names.end()); |
| +} |
| + |
| +// Test that the FlexFEC field trial properly alters the output of |
| +// WebRtcVideoEngine2::codecs(), for an existing |engine_| object. |
| +// |
| +// TODO(brandtr): Remove this test, when the FlexFEC field trial is gone. |
| +TEST_F(WebRtcVideoEngine2Test, |
| + Flexfec03SupportedAsInternalCodecBehindFieldTrial) { |
|
brandtr
2016/11/28 10:40:15
Had I written this test before, the problem addres
perkj_webrtc
2016/11/28 10:56:05
great. I think you can remove the first two tests
brandtr
2016/11/28 11:47:50
Done.
|
| + engine_.Init(); |
| + std::unordered_set<std::string> codec_names_before = GetCodecNames(engine_); |
|
perkj_webrtc
2016/11/28 10:56:05
please remove GetCodecNames and directy use std::f
brandtr
2016/11/28 11:47:50
Done.
|
| + EXPECT_EQ(codec_names_before.find("flexfec-03"), codec_names_before.end()); |
| + |
| + webrtc::test::ScopedFieldTrials override_field_trials_( |
| + "WebRTC-FlexFEC-03/Enabled/"); |
| + std::unordered_set<std::string> codec_names_after = GetCodecNames(engine_); |
| + EXPECT_NE(codec_names_after.find("flexfec-03"), codec_names_after.end()); |
| +} |
| + |
| // Test that external codecs are added to the end of the supported codec list. |
| TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { |
| cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
| @@ -761,11 +828,31 @@ TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { |
| cricket::VideoCodec internal_codec = codecs.front(); |
| cricket::VideoCodec external_codec = codecs.back(); |
| - // The external codec will appear at last. |
| + // The external codec will appear last in the vector. |
| EXPECT_EQ("VP8", internal_codec.name); |
| EXPECT_EQ("FakeExternalCodec", external_codec.name); |
| } |
| +// Test that an external codec that was added after the engine was initialized |
| +// does show up in the codec list after it was added. |
| +TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecsWithAddedCodec) { |
| + // Set up external encoder factory with first codec, and initialize engine. |
|
brandtr
2016/11/28 10:40:15
This test fails before the change in this CL.
|
| + cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
| + encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec1"); |
| + engine_.SetExternalEncoderFactory(&encoder_factory); |
| + engine_.Init(); |
| + |
| + // 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"); |
| + 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(WebRtcVideoEngine2Test, RegisterExternalDecodersIfSupported) { |
| cricket::FakeWebRtcVideoDecoderFactory decoder_factory; |
| decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); |