Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
index 70de26711a93871df73b41c364b4263a80a14e90..c473a4099f98d9838a0a9de28857997253f87141 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
@@ -9,6 +9,7 @@ |
*/ |
#include <algorithm> |
+#include <list> |
#include <map> |
#include <memory> |
#include <vector> |
@@ -38,6 +39,7 @@ static const uint8_t kRedRtxPayloadType = 125; |
static const uint32_t kSsrcs1[] = {1}; |
static const uint32_t kSsrcs3[] = {1, 2, 3}; |
static const uint32_t kRtxSsrcs1[] = {4}; |
+static const uint32_t kFlexfecSsrc = 5; |
static const uint32_t kIncomingUnsignalledSsrc = 0xC0FFEE; |
static const char kUnsupportedExtensionName[] = |
"urn:ietf:params:rtp-hdrext:unsupported"; |
@@ -1938,7 +1940,7 @@ TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { |
class Vp9SettingsTestWithFieldTrial : public Vp9SettingsTest { |
public: |
- Vp9SettingsTestWithFieldTrial(const char* field_trials) |
+ explicit Vp9SettingsTestWithFieldTrial(const char* field_trials) |
: Vp9SettingsTest(field_trials) {} |
protected: |
@@ -2286,6 +2288,55 @@ TEST_F(WebRtcVideoChannel2Test, SetDefaultSendCodecs) { |
// TODO(juberti): Check RTCP, PLI, TMMBR. |
} |
+// TODO(brandtr): Remove when FlexFEC _is_ exposed by default. |
+TEST_F(WebRtcVideoChannel2Test, FlexfecCodecWithoutSsrcNotExposedByDefault) { |
+ FakeVideoSendStream* stream = AddSendStream(); |
+ webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); |
+ |
+ EXPECT_EQ(-1, config.rtp.flexfec.flexfec_payload_type); |
+} |
+ |
+// TODO(brandtr): Remove when FlexFEC _is_ exposed by default. |
+TEST_F(WebRtcVideoChannel2Test, FlexfecCodecWithSsrcNotExposedByDefault) { |
+ FakeVideoSendStream* stream = AddSendStream( |
+ CreatePrimaryWithFecFrStreamParams("cname", kSsrcs1[0], kFlexfecSsrc)); |
+ webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); |
+ |
+ EXPECT_EQ(-1, config.rtp.flexfec.flexfec_payload_type); |
+} |
+ |
+// TODO(brandtr): When FlexFEC is no longer behind a field trial, merge all |
+// tests that use this test fixture into the corresponding "non-field trial" |
+// tests. |
+class WebRtcVideoChannel2FlexfecTest : public WebRtcVideoChannel2Test { |
+ public: |
+ WebRtcVideoChannel2FlexfecTest() |
+ : WebRtcVideoChannel2Test("WebRTC-FlexFEC-03/Enabled/") {} |
+}; |
+ |
+// TODO(brandtr): Merge into "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, SetDefaultSendCodecsWithoutSsrc) { |
+ FakeVideoSendStream* stream = AddSendStream(); |
+ webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); |
+ |
+ EXPECT_EQ(GetEngineCodec("flexfec-03").id, |
+ config.rtp.flexfec.flexfec_payload_type); |
+ EXPECT_FALSE(config.rtp.flexfec.IsCompleteAndEnabled()); |
+} |
+ |
+// TODO(brandtr): Merge into "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, SetDefaultSendCodecsWithSsrc) { |
+ FakeVideoSendStream* stream = AddSendStream( |
+ CreatePrimaryWithFecFrStreamParams("cname", kSsrcs1[0], kFlexfecSsrc)); |
+ webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); |
+ |
+ EXPECT_EQ(GetEngineCodec("flexfec-03").id, |
+ config.rtp.flexfec.flexfec_payload_type); |
+ EXPECT_TRUE(config.rtp.flexfec.IsCompleteAndEnabled()); |
+} |
+ |
TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFec) { |
cricket::VideoSendParameters parameters; |
parameters.codecs.push_back(GetEngineCodec("VP8")); |
@@ -2298,6 +2349,19 @@ TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFec) { |
EXPECT_EQ(-1, config.rtp.ulpfec.red_payload_type); |
} |
+// TODO(brandtr): Merge into "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, SetSendCodecsWithoutFec) { |
+ cricket::VideoSendParameters parameters; |
+ parameters.codecs.push_back(GetEngineCodec("VP8")); |
+ ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
+ |
+ FakeVideoSendStream* stream = AddSendStream(); |
+ webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); |
+ |
+ EXPECT_EQ(-1, config.rtp.flexfec.flexfec_payload_type); |
+} |
+ |
TEST_F(WebRtcVideoChannel2Test, |
SetSendCodecRejectsRtxWithoutAssociatedPayloadType) { |
const int kUnusedPayloadType = 127; |
@@ -2349,10 +2413,37 @@ TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { |
parameters.codecs.pop_back(); |
ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
stream = fake_call_->GetVideoSendStreams()[0]; |
- ASSERT_TRUE(stream != NULL); |
+ ASSERT_TRUE(stream != nullptr); |
config = stream->GetConfig().Copy(); |
EXPECT_EQ(-1, config.rtp.ulpfec.ulpfec_payload_type) |
- << "SetSendCodec without FEC should disable current FEC."; |
+ << "SetSendCodec without ULPFEC should disable current ULPFEC."; |
+} |
+ |
+// TODO(brandtr): Merge into "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, SetSendCodecsWithoutFecDisablesFec) { |
+ cricket::VideoSendParameters parameters; |
+ parameters.codecs.push_back(GetEngineCodec("VP8")); |
+ parameters.codecs.push_back(GetEngineCodec("flexfec-03")); |
+ ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
+ |
+ FakeVideoSendStream* stream = AddSendStream( |
+ CreatePrimaryWithFecFrStreamParams("cname", kSsrcs1[0], kFlexfecSsrc)); |
+ webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); |
+ |
+ EXPECT_EQ(GetEngineCodec("flexfec-03").id, |
+ config.rtp.flexfec.flexfec_payload_type); |
+ EXPECT_EQ(kFlexfecSsrc, config.rtp.flexfec.flexfec_ssrc); |
+ ASSERT_EQ(1U, config.rtp.flexfec.protected_media_ssrcs.size()); |
+ EXPECT_EQ(kSsrcs1[0], config.rtp.flexfec.protected_media_ssrcs[0]); |
+ |
+ parameters.codecs.pop_back(); |
+ ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
+ stream = fake_call_->GetVideoSendStreams()[0]; |
+ ASSERT_TRUE(stream != nullptr); |
+ config = stream->GetConfig().Copy(); |
+ EXPECT_EQ(-1, config.rtp.flexfec.flexfec_payload_type) |
+ << "SetSendCodec without FlexFEC should disable current FlexFEC."; |
} |
TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { |
@@ -2698,9 +2789,37 @@ TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithoutFecDisablesFec) { |
recv_parameters.codecs.push_back(GetEngineCodec("VP8")); |
ASSERT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
stream = fake_call_->GetVideoReceiveStreams()[0]; |
- ASSERT_TRUE(stream != NULL); |
+ ASSERT_TRUE(stream != nullptr); |
EXPECT_EQ(-1, stream->GetConfig().rtp.ulpfec.ulpfec_payload_type) |
- << "SetSendCodec without FEC should disable current FEC."; |
+ << "SetSendCodec without ULPFEC should disable current ULPFEC."; |
+} |
+ |
+// TODO(brandtr): Merge into "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, SetRecvParamsWithoutFecDisablesFec) { |
+ cricket::VideoSendParameters send_parameters; |
+ send_parameters.codecs.push_back(GetEngineCodec("VP8")); |
+ send_parameters.codecs.push_back(GetEngineCodec("flexfec-03")); |
+ ASSERT_TRUE(channel_->SetSendParameters(send_parameters)); |
+ |
+ AddRecvStream( |
+ CreatePrimaryWithFecFrStreamParams("cname", kSsrcs1[0], kFlexfecSsrc)); |
+ const std::list<FakeFlexfecReceiveStream>& streams = |
+ fake_call_->GetFlexfecReceiveStreams(); |
+ |
+ ASSERT_EQ(1U, streams.size()); |
+ const FakeFlexfecReceiveStream& stream = streams.front(); |
+ EXPECT_EQ(GetEngineCodec("flexfec-03").id, |
+ stream.GetConfig().flexfec_payload_type); |
+ EXPECT_EQ(kFlexfecSsrc, stream.GetConfig().flexfec_ssrc); |
+ ASSERT_EQ(1U, stream.GetConfig().protected_media_ssrcs.size()); |
+ EXPECT_EQ(kSsrcs1[0], stream.GetConfig().protected_media_ssrcs[0]); |
+ |
+ cricket::VideoRecvParameters recv_parameters; |
+ recv_parameters.codecs.push_back(GetEngineCodec("VP8")); |
+ ASSERT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
+ EXPECT_TRUE(streams.empty()) |
+ << "SetSendCodec without FlexFEC should disable current FlexFEC."; |
} |
TEST_F(WebRtcVideoChannel2Test, SetSendParamsWithFecEnablesFec) { |
@@ -2714,10 +2833,10 @@ TEST_F(WebRtcVideoChannel2Test, SetSendParamsWithFecEnablesFec) { |
recv_parameters.codecs.push_back(GetEngineCodec("ulpfec")); |
ASSERT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
stream = fake_call_->GetVideoReceiveStreams()[0]; |
- ASSERT_TRUE(stream != NULL); |
+ ASSERT_TRUE(stream != nullptr); |
EXPECT_EQ(GetEngineCodec("ulpfec").id, |
stream->GetConfig().rtp.ulpfec.ulpfec_payload_type) |
- << "FEC should be enabled on the receive stream."; |
+ << "ULPFEC should be enabled on the receive stream."; |
cricket::VideoSendParameters send_parameters; |
send_parameters.codecs.push_back(GetEngineCodec("VP8")); |
@@ -2727,7 +2846,44 @@ TEST_F(WebRtcVideoChannel2Test, SetSendParamsWithFecEnablesFec) { |
stream = fake_call_->GetVideoReceiveStreams()[0]; |
EXPECT_EQ(GetEngineCodec("ulpfec").id, |
stream->GetConfig().rtp.ulpfec.ulpfec_payload_type) |
- << "FEC should be enabled on the receive stream."; |
+ << "ULPFEC should be enabled on the receive stream."; |
+} |
+ |
+// TODO(brandtr): Merge into "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, SetSendParamsWithFecEnablesFec) { |
+ AddRecvStream( |
+ CreatePrimaryWithFecFrStreamParams("cname", kSsrcs1[0], kFlexfecSsrc)); |
+ const std::list<FakeFlexfecReceiveStream>& streams = |
+ fake_call_->GetFlexfecReceiveStreams(); |
+ |
+ cricket::VideoRecvParameters recv_parameters; |
+ recv_parameters.codecs.push_back(GetEngineCodec("VP8")); |
+ recv_parameters.codecs.push_back(GetEngineCodec("flexfec-03")); |
+ ASSERT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
+ ASSERT_EQ(1U, streams.size()); |
+ const FakeFlexfecReceiveStream& stream_with_recv_params = streams.front(); |
+ EXPECT_EQ(GetEngineCodec("flexfec-03").id, |
+ stream_with_recv_params.GetConfig().flexfec_payload_type); |
+ EXPECT_EQ(kFlexfecSsrc, stream_with_recv_params.GetConfig().flexfec_ssrc); |
+ EXPECT_EQ(1U, |
+ stream_with_recv_params.GetConfig().protected_media_ssrcs.size()); |
+ EXPECT_EQ(kSsrcs1[0], |
+ stream_with_recv_params.GetConfig().protected_media_ssrcs[0]); |
+ |
+ cricket::VideoSendParameters send_parameters; |
+ send_parameters.codecs.push_back(GetEngineCodec("VP8")); |
+ send_parameters.codecs.push_back(GetEngineCodec("flexfec-03")); |
+ ASSERT_TRUE(channel_->SetSendParameters(send_parameters)); |
brandtr
2016/11/21 16:03:47
A crucial line was missing here.
|
+ ASSERT_EQ(1U, streams.size()); |
+ const FakeFlexfecReceiveStream& stream_with_send_params = streams.front(); |
+ EXPECT_EQ(GetEngineCodec("flexfec-03").id, |
+ stream_with_send_params.GetConfig().flexfec_payload_type); |
+ EXPECT_EQ(kFlexfecSsrc, stream_with_send_params.GetConfig().flexfec_ssrc); |
+ EXPECT_EQ(1U, |
+ stream_with_send_params.GetConfig().protected_media_ssrcs.size()); |
+ EXPECT_EQ(kSsrcs1[0], |
+ stream_with_send_params.GetConfig().protected_media_ssrcs[0]); |
} |
TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectDuplicateFecPayloads) { |
@@ -2738,6 +2894,17 @@ TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectDuplicateFecPayloads) { |
EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
} |
+// TODO(brandtr): Merge into "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, |
+ SetSendCodecsRejectDuplicateFecPayloads) { |
+ cricket::VideoRecvParameters parameters; |
+ parameters.codecs.push_back(GetEngineCodec("VP8")); |
+ parameters.codecs.push_back(GetEngineCodec("flexfec-03")); |
+ parameters.codecs[1].id = parameters.codecs[0].id; |
+ EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
+} |
+ |
TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectDuplicateCodecPayloads) { |
cricket::VideoRecvParameters parameters; |
parameters.codecs.push_back(GetEngineCodec("VP8")); |
@@ -3377,6 +3544,14 @@ TEST_F(WebRtcVideoChannel2Test, UlpfecPacketDoesntCreateUnsignalledStream) { |
false /* expect_created_receive_stream */); |
} |
+// TODO(brandtr): Change to "non-field trial" test when FlexFEC is enabled |
+// by default. |
+TEST_F(WebRtcVideoChannel2FlexfecTest, |
+ FlexfecPacketDoesntCreateUnsignalledStream) { |
+ TestReceiveUnsignaledSsrcPacket(GetEngineCodec("flexfec-03").id, |
+ false /* expect_created_receive_stream */); |
+} |
+ |
TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) { |
TestReceiveUnsignaledSsrcPacket(kRedRtxPayloadType, |
false /* expect_created_receive_stream */); |
@@ -3396,7 +3571,7 @@ TEST_F(WebRtcVideoChannel2Test, CanSentMaxBitrateForExistingStream) { |
capturer.CaptureFrame(); |
int default_encoder_bitrate = GetMaxEncoderBitrate(); |
- EXPECT_TRUE(default_encoder_bitrate > 1000); |
+ EXPECT_GT(default_encoder_bitrate, 1000); |
// TODO(skvlad): Resolve the inconsistency between the interpretation |
// of the global bitrate limit for audio and video: |