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 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: |