Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
index bf03afac0fda1920eba6517378c4ba11a3c7e903..24cd8fc9573c1ea40c20236a9e804f5d4069100f 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
@@ -388,6 +388,34 @@ TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) { |
EXPECT_EQ(0u, encoder_factory.encoders().size()); |
} |
+// Test that when an external encoder factory supports a codec we don't |
+// internally support, we still add an RTX codec for it. |
+// TODO(deadbeef): Currently this test is only effective if WebRTC is |
+// 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) { |
+ cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
+ encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); |
+ 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; |
+ })); |
+} |
+ |
void WebRtcVideoEngine2Test::TestExtendedEncoderOveruse( |
bool use_external_encoder) { |
cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |