Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(598)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2_unittest.cc

Issue 2646073004: Make RTX pt/apt reconfigurable by calling WebRtcVideoChannel2::SetRecvParameters. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 FakeVideoSendStream* send_stream = AddSendStream( 1221 FakeVideoSendStream* send_stream = AddSendStream(
1222 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); 1222 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
1223 1223
1224 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size()); 1224 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size());
1225 for (size_t i = 0; i < rtx_ssrcs.size(); ++i) 1225 for (size_t i = 0; i < rtx_ssrcs.size(); ++i)
1226 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]); 1226 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]);
1227 1227
1228 // Receiver side. 1228 // Receiver side.
1229 FakeVideoReceiveStream* recv_stream = AddRecvStream( 1229 FakeVideoReceiveStream* recv_stream = AddRecvStream(
1230 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); 1230 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
1231 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx.empty()); 1231 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx_payload_types.empty());
1232 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), 1232 EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
1233 recv_stream->GetConfig().rtp.rtx.size()) 1233 recv_stream->GetConfig().rtp.rtx_payload_types.size())
1234 << "RTX should be mapped for all decoders/payload types."; 1234 << "RTX should be mapped for all decoders/payload types.";
1235 for (const auto& kv : recv_stream->GetConfig().rtp.rtx) { 1235 EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
1236 EXPECT_EQ(rtx_ssrcs[0], kv.second.ssrc);
1237 }
1238 } 1236 }
1239 1237
1240 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithRtx) { 1238 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithRtx) {
1241 // Setup one channel with an associated RTX stream. 1239 // Setup one channel with an associated RTX stream.
1242 cricket::StreamParams params = 1240 cricket::StreamParams params =
1243 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); 1241 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
1244 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]); 1242 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
1245 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); 1243 FakeVideoReceiveStream* recv_stream = AddRecvStream(params);
1246 EXPECT_EQ(kRtxSsrcs1[0], 1244 EXPECT_EQ(kRtxSsrcs1[0], recv_stream->GetConfig().rtp.rtx_ssrc);
1247 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc);
1248 } 1245 }
1249 1246
1250 TEST_F(WebRtcVideoChannel2Test, RecvStreamNoRtx) { 1247 TEST_F(WebRtcVideoChannel2Test, RecvStreamNoRtx) {
1251 // Setup one channel without an associated RTX stream. 1248 // Setup one channel without an associated RTX stream.
1252 cricket::StreamParams params = 1249 cricket::StreamParams params =
1253 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); 1250 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
1254 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); 1251 FakeVideoReceiveStream* recv_stream = AddRecvStream(params);
1255 ASSERT_TRUE(recv_stream->GetConfig().rtp.rtx.empty()); 1252 ASSERT_EQ(0U, recv_stream->GetConfig().rtp.rtx_ssrc);
1256 } 1253 }
1257 1254
1258 TEST_F(WebRtcVideoChannel2Test, NoHeaderExtesionsByDefault) { 1255 TEST_F(WebRtcVideoChannel2Test, NoHeaderExtesionsByDefault) {
1259 FakeVideoSendStream* send_stream = 1256 FakeVideoSendStream* send_stream =
1260 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); 1257 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0]));
1261 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); 1258 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty());
1262 1259
1263 FakeVideoReceiveStream* recv_stream = 1260 FakeVideoReceiveStream* recv_stream =
1264 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); 1261 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0]));
1265 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); 1262 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty());
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
2454 cricket::VideoCodec rtx_codec = cricket::VideoCodec::CreateRtxCodec( 2451 cricket::VideoCodec rtx_codec = cricket::VideoCodec::CreateRtxCodec(
2455 kUnusedPayloadType1, kUnusedPayloadType2); 2452 kUnusedPayloadType1, kUnusedPayloadType2);
2456 cricket::VideoSendParameters parameters; 2453 cricket::VideoSendParameters parameters;
2457 parameters.codecs.push_back(GetEngineCodec("VP8")); 2454 parameters.codecs.push_back(GetEngineCodec("VP8"));
2458 parameters.codecs.push_back(rtx_codec); 2455 parameters.codecs.push_back(rtx_codec);
2459 EXPECT_FALSE(channel_->SetSendParameters(parameters)) 2456 EXPECT_FALSE(channel_->SetSendParameters(parameters))
2460 << "RTX without matching video codec should be rejected."; 2457 << "RTX without matching video codec should be rejected.";
2461 } 2458 }
2462 } 2459 }
2463 2460
2461 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithChangedRtxPayloadType) {
2462 const int kUnusedPayloadType1 = 126;
brandtr 2017/01/20 14:49:23 Prior to this CL, this test already passes. I.e.,
2463 const int kUnusedPayloadType2 = 127;
2464 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType1));
2465 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType2));
2466
2467 // SSRCs for RTX.
2468 cricket::StreamParams params =
2469 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
2470 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
2471 AddSendStream(params);
2472
2473 // Original payload type for RTX.
2474 cricket::VideoSendParameters parameters;
2475 parameters.codecs.push_back(GetEngineCodec("VP8"));
2476 cricket::VideoCodec rtx_codec(kUnusedPayloadType1, "rtx");
2477 rtx_codec.SetParam("apt", GetEngineCodec("VP8").id);
2478 parameters.codecs.push_back(rtx_codec);
2479 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2480 ASSERT_EQ(1U, fake_call_->GetVideoSendStreams().size());
2481 const webrtc::VideoSendStream::Config& config_before =
2482 fake_call_->GetVideoSendStreams()[0]->GetConfig();
2483 EXPECT_EQ(kUnusedPayloadType1, config_before.rtp.rtx.payload_type);
2484 ASSERT_EQ(1U, config_before.rtp.rtx.ssrcs.size());
2485 EXPECT_EQ(kRtxSsrcs1[0], config_before.rtp.rtx.ssrcs[0]);
2486
2487 // Change payload type for RTX.
2488 parameters.codecs[1].id = kUnusedPayloadType2;
2489 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2490 ASSERT_EQ(1U, fake_call_->GetVideoSendStreams().size());
2491 const webrtc::VideoSendStream::Config& config_after =
2492 fake_call_->GetVideoSendStreams()[0]->GetConfig();
2493 EXPECT_EQ(kUnusedPayloadType2, config_after.rtp.rtx.payload_type);
2494 ASSERT_EQ(1U, config_before.rtp.rtx.ssrcs.size());
2495 EXPECT_EQ(kRtxSsrcs1[0], config_before.rtp.rtx.ssrcs[0]);
stefan-webrtc 2017/01/23 12:45:11 Is it possible to break this code out into a helpe
brandtr 2017/01/24 10:04:41 It would reduce the verbosity a bit, but I think i
2496 }
2497
2464 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { 2498 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) {
2465 cricket::VideoSendParameters parameters; 2499 cricket::VideoSendParameters parameters;
2466 parameters.codecs.push_back(GetEngineCodec("VP8")); 2500 parameters.codecs.push_back(GetEngineCodec("VP8"));
2467 parameters.codecs.push_back(GetEngineCodec("ulpfec")); 2501 parameters.codecs.push_back(GetEngineCodec("ulpfec"));
2468 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2502 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2469 2503
2470 FakeVideoSendStream* stream = AddSendStream(); 2504 FakeVideoSendStream* stream = AddSendStream();
2471 webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); 2505 webrtc::VideoSendStream::Config config = stream->GetConfig().Copy();
2472 2506
2473 EXPECT_EQ(GetEngineCodec("ulpfec").id, config.rtp.ulpfec.ulpfec_payload_type); 2507 EXPECT_EQ(GetEngineCodec("ulpfec").id, config.rtp.ulpfec.ulpfec_payload_type);
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
2784 2818
2785 cricket::VideoCodec rtx_codec2(kUnusedPayloadType2, "rtx"); 2819 cricket::VideoCodec rtx_codec2(kUnusedPayloadType2, "rtx");
2786 rtx_codec2.SetParam("apt", rtx_codec.id); 2820 rtx_codec2.SetParam("apt", rtx_codec.id);
2787 parameters.codecs.push_back(rtx_codec2); 2821 parameters.codecs.push_back(rtx_codec2);
2788 2822
2789 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) << 2823 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) <<
2790 "RTX codec with another RTX as associated payload type should be " 2824 "RTX codec with another RTX as associated payload type should be "
2791 "rejected."; 2825 "rejected.";
2792 } 2826 }
2793 2827
2828 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithChangedRtxPayloadType) {
2829 const int kUnusedPayloadType1 = 126;
brandtr 2017/01/20 14:49:23 Prior to this CL, this test fails.
2830 const int kUnusedPayloadType2 = 127;
2831 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType1));
2832 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType2));
2833
2834 // SSRCs for RTX.
2835 cricket::StreamParams params =
2836 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
2837 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
2838 AddRecvStream(params);
2839
2840 // Original payload type for RTX.
2841 cricket::VideoRecvParameters parameters;
2842 parameters.codecs.push_back(GetEngineCodec("VP8"));
2843 cricket::VideoCodec rtx_codec(kUnusedPayloadType1, "rtx");
2844 rtx_codec.SetParam("apt", GetEngineCodec("VP8").id);
2845 parameters.codecs.push_back(rtx_codec);
2846 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2847 ASSERT_EQ(1U, fake_call_->GetVideoReceiveStreams().size());
2848 const webrtc::VideoReceiveStream::Config& config_before =
2849 fake_call_->GetVideoReceiveStreams()[0]->GetConfig();
2850 EXPECT_EQ(1U, config_before.rtp.rtx_payload_types.size());
2851 auto it_before =
2852 config_before.rtp.rtx_payload_types.find(GetEngineCodec("VP8").id);
2853 ASSERT_NE(it_before, config_before.rtp.rtx_payload_types.end());
2854 EXPECT_EQ(kUnusedPayloadType1, it_before->second);
2855 EXPECT_EQ(kRtxSsrcs1[0], config_before.rtp.rtx_ssrc);
2856
2857 // Change payload type for RTX.
2858 parameters.codecs[1].id = kUnusedPayloadType2;
2859 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2860 ASSERT_EQ(1U, fake_call_->GetVideoReceiveStreams().size());
2861 const webrtc::VideoReceiveStream::Config& config_after =
2862 fake_call_->GetVideoReceiveStreams()[0]->GetConfig();
2863 EXPECT_EQ(1U, config_after.rtp.rtx_payload_types.size());
2864 auto it_after =
2865 config_after.rtp.rtx_payload_types.find(GetEngineCodec("VP8").id);
2866 ASSERT_NE(it_after, config_after.rtp.rtx_payload_types.end());
2867 EXPECT_EQ(kUnusedPayloadType2, it_after->second);
2868 EXPECT_EQ(kRtxSsrcs1[0], config_before.rtp.rtx_ssrc);
brandtr 2017/01/24 10:04:41 ... Also, the EXPECTs are slightly difference betw
2869 }
2870
2794 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) { 2871 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) {
2795 cricket::VideoRecvParameters parameters; 2872 cricket::VideoRecvParameters parameters;
2796 parameters.codecs.push_back(GetEngineCodec("VP8")); 2873 parameters.codecs.push_back(GetEngineCodec("VP8"));
2797 parameters.codecs[0].id = 99; 2874 parameters.codecs[0].id = 99;
2798 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 2875 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2799 } 2876 }
2800 2877
2801 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) { 2878 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) {
2802 cricket::VideoRecvParameters parameters; 2879 cricket::VideoRecvParameters parameters;
2803 parameters.codecs = engine_.codecs(); 2880 parameters.codecs = engine_.codecs();
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
3407 uint8_t data[kDataLength]; 3484 uint8_t data[kDataLength];
3408 memset(data, 0, sizeof(data)); 3485 memset(data, 0, sizeof(data));
3409 rtc::SetBE32(&data[8], ssrcs[0]); 3486 rtc::SetBE32(&data[8], ssrcs[0]);
3410 rtc::CopyOnWriteBuffer packet(data, kDataLength); 3487 rtc::CopyOnWriteBuffer packet(data, kDataLength);
3411 rtc::PacketTime packet_time; 3488 rtc::PacketTime packet_time;
3412 channel_->OnPacketReceived(&packet, packet_time); 3489 channel_->OnPacketReceived(&packet, packet_time);
3413 3490
3414 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) 3491 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
3415 << "No default receive stream created."; 3492 << "No default receive stream created.";
3416 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0]; 3493 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0];
3417 EXPECT_TRUE(recv_stream->GetConfig().rtp.rtx.empty()) 3494 EXPECT_EQ(0u, recv_stream->GetConfig().rtp.rtx_ssrc)
3418 << "Default receive stream should not have configured RTX"; 3495 << "Default receive stream should not have configured RTX";
3419 3496
3420 EXPECT_TRUE(channel_->AddRecvStream( 3497 EXPECT_TRUE(channel_->AddRecvStream(
3421 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); 3498 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)));
3422 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) 3499 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
3423 << "AddRecvStream should've reconfigured, not added a new receiver."; 3500 << "AddRecvStream should have reconfigured, not added a new receiver.";
3424 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; 3501 recv_stream = fake_call_->GetVideoReceiveStreams()[0];
3425 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx.empty()); 3502 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx_payload_types.empty());
3426 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), 3503 EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
3427 recv_stream->GetConfig().rtp.rtx.size()) 3504 recv_stream->GetConfig().rtp.rtx_payload_types.size())
3428 << "RTX should be mapped for all decoders/payload types."; 3505 << "RTX should be mapped for all decoders/payload types.";
3429 for (const auto& kv : recv_stream->GetConfig().rtp.rtx) { 3506 EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
3430 EXPECT_EQ(rtx_ssrcs[0], kv.second.ssrc);
3431 }
3432 } 3507 }
3433 3508
3434 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { 3509 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) {
3435 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 3510 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
3436 3511
3437 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); 3512 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1);
3438 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); 3513 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
3439 3514
3440 StreamParams sp = 3515 StreamParams sp =
3441 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); 3516 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs);
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
4065 4140
4066 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { 4141 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) {
4067 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3); 4142 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3);
4068 } 4143 }
4069 4144
4070 // Test that we normalize send codec format size in simulcast. 4145 // Test that we normalize send codec format size in simulcast.
4071 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 4146 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
4072 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2); 4147 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2);
4073 } 4148 }
4074 } // namespace cricket 4149 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698