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

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

Issue 2646073004: Make RTX pt/apt reconfigurable by calling WebRtcVideoChannel2::SetRecvParameters. (Closed)
Patch Set: Fixes. Created 3 years, 10 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 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 FakeVideoSendStream* send_stream = AddSendStream( 1220 FakeVideoSendStream* send_stream = AddSendStream(
1221 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); 1221 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
1222 1222
1223 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size()); 1223 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size());
1224 for (size_t i = 0; i < rtx_ssrcs.size(); ++i) 1224 for (size_t i = 0; i < rtx_ssrcs.size(); ++i)
1225 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]); 1225 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]);
1226 1226
1227 // Receiver side. 1227 // Receiver side.
1228 FakeVideoReceiveStream* recv_stream = AddRecvStream( 1228 FakeVideoReceiveStream* recv_stream = AddRecvStream(
1229 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); 1229 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
1230 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx.empty()); 1230 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx_payload_types.empty());
1231 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), 1231 EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
1232 recv_stream->GetConfig().rtp.rtx.size()) 1232 recv_stream->GetConfig().rtp.rtx_payload_types.size())
1233 << "RTX should be mapped for all decoders/payload types."; 1233 << "RTX should be mapped for all decoders/payload types.";
1234 for (const auto& kv : recv_stream->GetConfig().rtp.rtx) { 1234 EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
1235 EXPECT_EQ(rtx_ssrcs[0], kv.second.ssrc);
1236 }
1237 } 1235 }
1238 1236
1239 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithRtx) { 1237 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithRtx) {
1240 // Setup one channel with an associated RTX stream. 1238 // Setup one channel with an associated RTX stream.
1241 cricket::StreamParams params = 1239 cricket::StreamParams params =
1242 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); 1240 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
1243 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]); 1241 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
1244 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); 1242 FakeVideoReceiveStream* recv_stream = AddRecvStream(params);
1245 EXPECT_EQ(kRtxSsrcs1[0], 1243 EXPECT_EQ(kRtxSsrcs1[0], recv_stream->GetConfig().rtp.rtx_ssrc);
1246 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc);
1247 } 1244 }
1248 1245
1249 TEST_F(WebRtcVideoChannel2Test, RecvStreamNoRtx) { 1246 TEST_F(WebRtcVideoChannel2Test, RecvStreamNoRtx) {
1250 // Setup one channel without an associated RTX stream. 1247 // Setup one channel without an associated RTX stream.
1251 cricket::StreamParams params = 1248 cricket::StreamParams params =
1252 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); 1249 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
1253 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); 1250 FakeVideoReceiveStream* recv_stream = AddRecvStream(params);
1254 ASSERT_TRUE(recv_stream->GetConfig().rtp.rtx.empty()); 1251 ASSERT_EQ(0U, recv_stream->GetConfig().rtp.rtx_ssrc);
1255 } 1252 }
1256 1253
1257 TEST_F(WebRtcVideoChannel2Test, NoHeaderExtesionsByDefault) { 1254 TEST_F(WebRtcVideoChannel2Test, NoHeaderExtesionsByDefault) {
1258 FakeVideoSendStream* send_stream = 1255 FakeVideoSendStream* send_stream =
1259 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); 1256 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0]));
1260 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); 1257 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty());
1261 1258
1262 FakeVideoReceiveStream* recv_stream = 1259 FakeVideoReceiveStream* recv_stream =
1263 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); 1260 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0]));
1264 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); 1261 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty());
(...skipping 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after
2474 cricket::VideoCodec rtx_codec = cricket::VideoCodec::CreateRtxCodec( 2471 cricket::VideoCodec rtx_codec = cricket::VideoCodec::CreateRtxCodec(
2475 kUnusedPayloadType1, kUnusedPayloadType2); 2472 kUnusedPayloadType1, kUnusedPayloadType2);
2476 cricket::VideoSendParameters parameters; 2473 cricket::VideoSendParameters parameters;
2477 parameters.codecs.push_back(GetEngineCodec("VP8")); 2474 parameters.codecs.push_back(GetEngineCodec("VP8"));
2478 parameters.codecs.push_back(rtx_codec); 2475 parameters.codecs.push_back(rtx_codec);
2479 EXPECT_FALSE(channel_->SetSendParameters(parameters)) 2476 EXPECT_FALSE(channel_->SetSendParameters(parameters))
2480 << "RTX without matching video codec should be rejected."; 2477 << "RTX without matching video codec should be rejected.";
2481 } 2478 }
2482 } 2479 }
2483 2480
2481 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithChangedRtxPayloadType) {
2482 const int kUnusedPayloadType1 = 126;
2483 const int kUnusedPayloadType2 = 127;
2484 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType1));
2485 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType2));
2486
2487 // SSRCs for RTX.
2488 cricket::StreamParams params =
2489 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
2490 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
2491 AddSendStream(params);
2492
2493 // Original payload type for RTX.
2494 cricket::VideoSendParameters parameters;
2495 parameters.codecs.push_back(GetEngineCodec("VP8"));
2496 cricket::VideoCodec rtx_codec(kUnusedPayloadType1, "rtx");
2497 rtx_codec.SetParam("apt", GetEngineCodec("VP8").id);
2498 parameters.codecs.push_back(rtx_codec);
2499 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2500 ASSERT_EQ(1U, fake_call_->GetVideoSendStreams().size());
2501 const webrtc::VideoSendStream::Config& config_before =
2502 fake_call_->GetVideoSendStreams()[0]->GetConfig();
2503 EXPECT_EQ(kUnusedPayloadType1, config_before.rtp.rtx.payload_type);
2504 ASSERT_EQ(1U, config_before.rtp.rtx.ssrcs.size());
2505 EXPECT_EQ(kRtxSsrcs1[0], config_before.rtp.rtx.ssrcs[0]);
2506
2507 // Change payload type for RTX.
2508 parameters.codecs[1].id = kUnusedPayloadType2;
2509 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2510 ASSERT_EQ(1U, fake_call_->GetVideoSendStreams().size());
2511 const webrtc::VideoSendStream::Config& config_after =
2512 fake_call_->GetVideoSendStreams()[0]->GetConfig();
2513 EXPECT_EQ(kUnusedPayloadType2, config_after.rtp.rtx.payload_type);
2514 ASSERT_EQ(1U, config_after.rtp.rtx.ssrcs.size());
2515 EXPECT_EQ(kRtxSsrcs1[0], config_after.rtp.rtx.ssrcs[0]);
2516 }
2517
2484 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { 2518 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) {
2485 cricket::VideoSendParameters parameters; 2519 cricket::VideoSendParameters parameters;
2486 parameters.codecs.push_back(GetEngineCodec("VP8")); 2520 parameters.codecs.push_back(GetEngineCodec("VP8"));
2487 parameters.codecs.push_back(GetEngineCodec("ulpfec")); 2521 parameters.codecs.push_back(GetEngineCodec("ulpfec"));
2488 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2522 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2489 2523
2490 FakeVideoSendStream* stream = AddSendStream(); 2524 FakeVideoSendStream* stream = AddSendStream();
2491 webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); 2525 webrtc::VideoSendStream::Config config = stream->GetConfig().Copy();
2492 2526
2493 EXPECT_EQ(GetEngineCodec("ulpfec").id, config.rtp.ulpfec.ulpfec_payload_type); 2527 EXPECT_EQ(GetEngineCodec("ulpfec").id, config.rtp.ulpfec.ulpfec_payload_type);
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
2804 2838
2805 cricket::VideoCodec rtx_codec2(kUnusedPayloadType2, "rtx"); 2839 cricket::VideoCodec rtx_codec2(kUnusedPayloadType2, "rtx");
2806 rtx_codec2.SetParam("apt", rtx_codec.id); 2840 rtx_codec2.SetParam("apt", rtx_codec.id);
2807 parameters.codecs.push_back(rtx_codec2); 2841 parameters.codecs.push_back(rtx_codec2);
2808 2842
2809 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) << 2843 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) <<
2810 "RTX codec with another RTX as associated payload type should be " 2844 "RTX codec with another RTX as associated payload type should be "
2811 "rejected."; 2845 "rejected.";
2812 } 2846 }
2813 2847
2848 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithChangedRtxPayloadType) {
2849 const int kUnusedPayloadType1 = 126;
2850 const int kUnusedPayloadType2 = 127;
2851 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType1));
2852 EXPECT_FALSE(FindCodecById(engine_.codecs(), kUnusedPayloadType2));
2853
2854 // SSRCs for RTX.
2855 cricket::StreamParams params =
2856 cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
2857 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
2858 AddRecvStream(params);
2859
2860 // Original payload type for RTX.
2861 cricket::VideoRecvParameters parameters;
2862 parameters.codecs.push_back(GetEngineCodec("VP8"));
2863 cricket::VideoCodec rtx_codec(kUnusedPayloadType1, "rtx");
2864 rtx_codec.SetParam("apt", GetEngineCodec("VP8").id);
2865 parameters.codecs.push_back(rtx_codec);
2866 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2867 ASSERT_EQ(1U, fake_call_->GetVideoReceiveStreams().size());
2868 const webrtc::VideoReceiveStream::Config& config_before =
2869 fake_call_->GetVideoReceiveStreams()[0]->GetConfig();
2870 EXPECT_EQ(1U, config_before.rtp.rtx_payload_types.size());
2871 auto it_before =
2872 config_before.rtp.rtx_payload_types.find(GetEngineCodec("VP8").id);
2873 ASSERT_NE(it_before, config_before.rtp.rtx_payload_types.end());
2874 EXPECT_EQ(kUnusedPayloadType1, it_before->second);
2875 EXPECT_EQ(kRtxSsrcs1[0], config_before.rtp.rtx_ssrc);
2876
2877 // Change payload type for RTX.
2878 parameters.codecs[1].id = kUnusedPayloadType2;
2879 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2880 ASSERT_EQ(1U, fake_call_->GetVideoReceiveStreams().size());
2881 const webrtc::VideoReceiveStream::Config& config_after =
2882 fake_call_->GetVideoReceiveStreams()[0]->GetConfig();
2883 EXPECT_EQ(1U, config_after.rtp.rtx_payload_types.size());
2884 auto it_after =
2885 config_after.rtp.rtx_payload_types.find(GetEngineCodec("VP8").id);
2886 ASSERT_NE(it_after, config_after.rtp.rtx_payload_types.end());
2887 EXPECT_EQ(kUnusedPayloadType2, it_after->second);
2888 EXPECT_EQ(kRtxSsrcs1[0], config_after.rtp.rtx_ssrc);
2889 }
2890
2814 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) { 2891 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) {
2815 cricket::VideoRecvParameters parameters; 2892 cricket::VideoRecvParameters parameters;
2816 parameters.codecs.push_back(GetEngineCodec("VP8")); 2893 parameters.codecs.push_back(GetEngineCodec("VP8"));
2817 parameters.codecs[0].id = 99; 2894 parameters.codecs[0].id = 99;
2818 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 2895 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2819 } 2896 }
2820 2897
2821 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) { 2898 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) {
2822 cricket::VideoRecvParameters parameters; 2899 cricket::VideoRecvParameters parameters;
2823 parameters.codecs = engine_.codecs(); 2900 parameters.codecs = engine_.codecs();
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
3433 uint8_t data[kDataLength]; 3510 uint8_t data[kDataLength];
3434 memset(data, 0, sizeof(data)); 3511 memset(data, 0, sizeof(data));
3435 rtc::SetBE32(&data[8], ssrcs[0]); 3512 rtc::SetBE32(&data[8], ssrcs[0]);
3436 rtc::CopyOnWriteBuffer packet(data, kDataLength); 3513 rtc::CopyOnWriteBuffer packet(data, kDataLength);
3437 rtc::PacketTime packet_time; 3514 rtc::PacketTime packet_time;
3438 channel_->OnPacketReceived(&packet, packet_time); 3515 channel_->OnPacketReceived(&packet, packet_time);
3439 3516
3440 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) 3517 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
3441 << "No default receive stream created."; 3518 << "No default receive stream created.";
3442 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0]; 3519 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0];
3443 EXPECT_TRUE(recv_stream->GetConfig().rtp.rtx.empty()) 3520 EXPECT_EQ(0u, recv_stream->GetConfig().rtp.rtx_ssrc)
3444 << "Default receive stream should not have configured RTX"; 3521 << "Default receive stream should not have configured RTX";
3445 3522
3446 EXPECT_TRUE(channel_->AddRecvStream( 3523 EXPECT_TRUE(channel_->AddRecvStream(
3447 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); 3524 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)));
3448 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) 3525 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
3449 << "AddRecvStream should've reconfigured, not added a new receiver."; 3526 << "AddRecvStream should have reconfigured, not added a new receiver.";
3450 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; 3527 recv_stream = fake_call_->GetVideoReceiveStreams()[0];
3451 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx.empty()); 3528 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx_payload_types.empty());
3452 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), 3529 EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
3453 recv_stream->GetConfig().rtp.rtx.size()) 3530 recv_stream->GetConfig().rtp.rtx_payload_types.size())
3454 << "RTX should be mapped for all decoders/payload types."; 3531 << "RTX should be mapped for all decoders/payload types.";
3455 for (const auto& kv : recv_stream->GetConfig().rtp.rtx) { 3532 EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
3456 EXPECT_EQ(rtx_ssrcs[0], kv.second.ssrc);
3457 }
3458 } 3533 }
3459 3534
3460 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { 3535 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) {
3461 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 3536 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
3462 3537
3463 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); 3538 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1);
3464 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); 3539 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
3465 3540
3466 StreamParams sp = 3541 StreamParams sp =
3467 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); 3542 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs);
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
4091 4166
4092 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { 4167 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) {
4093 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3); 4168 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3);
4094 } 4169 }
4095 4170
4096 // Test that we normalize send codec format size in simulcast. 4171 // Test that we normalize send codec format size in simulcast.
4097 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 4172 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
4098 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2); 4173 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2);
4099 } 4174 }
4100 } // namespace cricket 4175 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.cc ('k') | webrtc/tools/event_log_visualizer/analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698