| Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc
|
| diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
|
| index 7fab75df2943c8fbe95af1d75318dc84b1e7f930..19b7d644cd8942ea702158e08efef53adccf5e3f 100644
|
| --- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc
|
| +++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
|
| @@ -16,6 +16,7 @@
|
| #include "webrtc/base/arraysize.h"
|
| #include "webrtc/base/gunit.h"
|
| #include "webrtc/base/stringutils.h"
|
| +#include "webrtc/common_video/h264/profile_level_id.h"
|
| #include "webrtc/logging/rtc_event_log/rtc_event_log.h"
|
| #include "webrtc/media/base/testutils.h"
|
| #include "webrtc/media/base/videoengine_unittest.h"
|
| @@ -61,6 +62,22 @@ void VerifyCodecHasDefaultFeedbackParams(const cricket::VideoCodec& codec) {
|
| cricket::kRtcpFbParamCcm, cricket::kRtcpFbCcmParamFir)));
|
| }
|
|
|
| +// Return true if any codec in |codecs| is an RTX codec with associated payload
|
| +// type |payload_type|.
|
| +bool HasRtxCodec(const std::vector<cricket::VideoCodec>& codecs,
|
| + int payload_type) {
|
| + for (const cricket::VideoCodec& codec : codecs) {
|
| + int associated_payload_type;
|
| + if (cricket::CodecNamesEq(codec.name.c_str(), "rtx") &&
|
| + codec.GetParam(cricket::kCodecParamAssociatedPayloadType,
|
| + &associated_payload_type) &&
|
| + associated_payload_type == payload_type) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| static rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateBlackFrameBuffer(
|
| int width,
|
| int height) {
|
| @@ -375,26 +392,38 @@ TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) {
|
| // built with no internal H264 support. This test should be updated
|
| // if/when we start adding RTX codecs for unrecognized codec names.
|
| TEST_F(WebRtcVideoEngine2Test, RtxCodecAddedForExternalCodec) {
|
| + using webrtc::H264::ProfileLevelIdToString;
|
| + using webrtc::H264::ProfileLevelId;
|
| + using webrtc::H264::kLevel1;
|
| + cricket::VideoCodec h264_constrained_baseline("H264");
|
| + h264_constrained_baseline.params[kH264FmtpProfileLevelId] =
|
| + *ProfileLevelIdToString(
|
| + ProfileLevelId(webrtc::H264::kProfileConstrainedBaseline, kLevel1));
|
| + cricket::VideoCodec h264_constrained_high("H264");
|
| + h264_constrained_high.params[kH264FmtpProfileLevelId] =
|
| + *ProfileLevelIdToString(
|
| + ProfileLevelId(webrtc::H264::kProfileConstrainedHigh, kLevel1));
|
| + cricket::VideoCodec h264_high("H264");
|
| + h264_high.params[kH264FmtpProfileLevelId] = *ProfileLevelIdToString(
|
| + ProfileLevelId(webrtc::H264::kProfileHigh, kLevel1));
|
| +
|
| cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
|
| - encoder_factory.AddSupportedVideoCodecType("H264");
|
| + encoder_factory.AddSupportedVideoCodec(h264_constrained_baseline);
|
| + encoder_factory.AddSupportedVideoCodec(h264_constrained_high);
|
| + encoder_factory.AddSupportedVideoCodec(h264_high);
|
| engine_.SetExternalEncoderFactory(&encoder_factory);
|
| engine_.Init();
|
|
|
| - auto codecs = engine_.codecs();
|
| - // First figure out what payload type the test codec got assigned.
|
| - auto test_codec_it =
|
| - std::find_if(codecs.begin(), codecs.end(),
|
| - [](const VideoCodec& c) { return c.name == "H264"; });
|
| - ASSERT_NE(codecs.end(), test_codec_it);
|
| - // Now search for an RTX codec for it.
|
| - EXPECT_TRUE(std::any_of(codecs.begin(), codecs.end(),
|
| - [&test_codec_it](const VideoCodec& c) {
|
| - int associated_payload_type;
|
| - return c.name == "rtx" &&
|
| - c.GetParam(kCodecParamAssociatedPayloadType,
|
| - &associated_payload_type) &&
|
| - associated_payload_type == test_codec_it->id;
|
| - }));
|
| + // First figure out what payload types the test codecs got assigned.
|
| + const std::vector<cricket::VideoCodec> codecs = engine_.codecs();
|
| + // Now search for RTX codecs for them. Expect that Constrained Baseline and
|
| + // Constrained High got an associated RTX codec, but not High.
|
| + EXPECT_TRUE(HasRtxCodec(
|
| + codecs, FindMatchingCodec(codecs, h264_constrained_baseline)->id));
|
| + EXPECT_TRUE(HasRtxCodec(
|
| + codecs, FindMatchingCodec(codecs, h264_constrained_high)->id));
|
| + EXPECT_FALSE(HasRtxCodec(
|
| + codecs, FindMatchingCodec(codecs, h264_high)->id));
|
| }
|
|
|
| void WebRtcVideoEngine2Test::TestExtendedEncoderOveruse(
|
|
|