OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |