| 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 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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_payload_types.empty()); | 1230 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx.empty()); |
| 1231 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), | 1231 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), |
| 1232 recv_stream->GetConfig().rtp.rtx_payload_types.size()) | 1232 recv_stream->GetConfig().rtp.rtx.size()) |
| 1233 << "RTX should be mapped for all decoders/payload types."; | 1233 << "RTX should be mapped for all decoders/payload types."; |
| 1234 EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc); | 1234 for (const auto& kv : recv_stream->GetConfig().rtp.rtx) { |
| 1235 EXPECT_EQ(rtx_ssrcs[0], kv.second.ssrc); |
| 1236 } |
| 1235 } | 1237 } |
| 1236 | 1238 |
| 1237 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithRtx) { | 1239 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithRtx) { |
| 1238 // Setup one channel with an associated RTX stream. | 1240 // Setup one channel with an associated RTX stream. |
| 1239 cricket::StreamParams params = | 1241 cricket::StreamParams params = |
| 1240 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); | 1242 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); |
| 1241 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]); | 1243 params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]); |
| 1242 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); | 1244 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); |
| 1243 EXPECT_EQ(kRtxSsrcs1[0], recv_stream->GetConfig().rtp.rtx_ssrc); | 1245 EXPECT_EQ(kRtxSsrcs1[0], |
| 1246 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc); |
| 1244 } | 1247 } |
| 1245 | 1248 |
| 1246 TEST_F(WebRtcVideoChannel2Test, RecvStreamNoRtx) { | 1249 TEST_F(WebRtcVideoChannel2Test, RecvStreamNoRtx) { |
| 1247 // Setup one channel without an associated RTX stream. | 1250 // Setup one channel without an associated RTX stream. |
| 1248 cricket::StreamParams params = | 1251 cricket::StreamParams params = |
| 1249 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); | 1252 cricket::StreamParams::CreateLegacy(kSsrcs1[0]); |
| 1250 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); | 1253 FakeVideoReceiveStream* recv_stream = AddRecvStream(params); |
| 1251 ASSERT_EQ(0U, recv_stream->GetConfig().rtp.rtx_ssrc); | 1254 ASSERT_TRUE(recv_stream->GetConfig().rtp.rtx.empty()); |
| 1252 } | 1255 } |
| 1253 | 1256 |
| 1254 TEST_F(WebRtcVideoChannel2Test, NoHeaderExtesionsByDefault) { | 1257 TEST_F(WebRtcVideoChannel2Test, NoHeaderExtesionsByDefault) { |
| 1255 FakeVideoSendStream* send_stream = | 1258 FakeVideoSendStream* send_stream = |
| 1256 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); | 1259 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); |
| 1257 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); | 1260 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); |
| 1258 | 1261 |
| 1259 FakeVideoReceiveStream* recv_stream = | 1262 FakeVideoReceiveStream* recv_stream = |
| 1260 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); | 1263 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); |
| 1261 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); | 1264 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); |
| (...skipping 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2471 cricket::VideoCodec rtx_codec = cricket::VideoCodec::CreateRtxCodec( | 2474 cricket::VideoCodec rtx_codec = cricket::VideoCodec::CreateRtxCodec( |
| 2472 kUnusedPayloadType1, kUnusedPayloadType2); | 2475 kUnusedPayloadType1, kUnusedPayloadType2); |
| 2473 cricket::VideoSendParameters parameters; | 2476 cricket::VideoSendParameters parameters; |
| 2474 parameters.codecs.push_back(GetEngineCodec("VP8")); | 2477 parameters.codecs.push_back(GetEngineCodec("VP8")); |
| 2475 parameters.codecs.push_back(rtx_codec); | 2478 parameters.codecs.push_back(rtx_codec); |
| 2476 EXPECT_FALSE(channel_->SetSendParameters(parameters)) | 2479 EXPECT_FALSE(channel_->SetSendParameters(parameters)) |
| 2477 << "RTX without matching video codec should be rejected."; | 2480 << "RTX without matching video codec should be rejected."; |
| 2478 } | 2481 } |
| 2479 } | 2482 } |
| 2480 | 2483 |
| 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 | |
| 2518 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { | 2484 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { |
| 2519 cricket::VideoSendParameters parameters; | 2485 cricket::VideoSendParameters parameters; |
| 2520 parameters.codecs.push_back(GetEngineCodec("VP8")); | 2486 parameters.codecs.push_back(GetEngineCodec("VP8")); |
| 2521 parameters.codecs.push_back(GetEngineCodec("ulpfec")); | 2487 parameters.codecs.push_back(GetEngineCodec("ulpfec")); |
| 2522 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 2488 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
| 2523 | 2489 |
| 2524 FakeVideoSendStream* stream = AddSendStream(); | 2490 FakeVideoSendStream* stream = AddSendStream(); |
| 2525 webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); | 2491 webrtc::VideoSendStream::Config config = stream->GetConfig().Copy(); |
| 2526 | 2492 |
| 2527 EXPECT_EQ(GetEngineCodec("ulpfec").id, config.rtp.ulpfec.ulpfec_payload_type); | 2493 EXPECT_EQ(GetEngineCodec("ulpfec").id, config.rtp.ulpfec.ulpfec_payload_type); |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2838 | 2804 |
| 2839 cricket::VideoCodec rtx_codec2(kUnusedPayloadType2, "rtx"); | 2805 cricket::VideoCodec rtx_codec2(kUnusedPayloadType2, "rtx"); |
| 2840 rtx_codec2.SetParam("apt", rtx_codec.id); | 2806 rtx_codec2.SetParam("apt", rtx_codec.id); |
| 2841 parameters.codecs.push_back(rtx_codec2); | 2807 parameters.codecs.push_back(rtx_codec2); |
| 2842 | 2808 |
| 2843 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) << | 2809 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) << |
| 2844 "RTX codec with another RTX as associated payload type should be " | 2810 "RTX codec with another RTX as associated payload type should be " |
| 2845 "rejected."; | 2811 "rejected."; |
| 2846 } | 2812 } |
| 2847 | 2813 |
| 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 | |
| 2891 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) { | 2814 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) { |
| 2892 cricket::VideoRecvParameters parameters; | 2815 cricket::VideoRecvParameters parameters; |
| 2893 parameters.codecs.push_back(GetEngineCodec("VP8")); | 2816 parameters.codecs.push_back(GetEngineCodec("VP8")); |
| 2894 parameters.codecs[0].id = 99; | 2817 parameters.codecs[0].id = 99; |
| 2895 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 2818 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
| 2896 } | 2819 } |
| 2897 | 2820 |
| 2898 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) { | 2821 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) { |
| 2899 cricket::VideoRecvParameters parameters; | 2822 cricket::VideoRecvParameters parameters; |
| 2900 parameters.codecs = engine_.codecs(); | 2823 parameters.codecs = engine_.codecs(); |
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3510 uint8_t data[kDataLength]; | 3433 uint8_t data[kDataLength]; |
| 3511 memset(data, 0, sizeof(data)); | 3434 memset(data, 0, sizeof(data)); |
| 3512 rtc::SetBE32(&data[8], ssrcs[0]); | 3435 rtc::SetBE32(&data[8], ssrcs[0]); |
| 3513 rtc::CopyOnWriteBuffer packet(data, kDataLength); | 3436 rtc::CopyOnWriteBuffer packet(data, kDataLength); |
| 3514 rtc::PacketTime packet_time; | 3437 rtc::PacketTime packet_time; |
| 3515 channel_->OnPacketReceived(&packet, packet_time); | 3438 channel_->OnPacketReceived(&packet, packet_time); |
| 3516 | 3439 |
| 3517 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) | 3440 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) |
| 3518 << "No default receive stream created."; | 3441 << "No default receive stream created."; |
| 3519 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 3442 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
| 3520 EXPECT_EQ(0u, recv_stream->GetConfig().rtp.rtx_ssrc) | 3443 EXPECT_TRUE(recv_stream->GetConfig().rtp.rtx.empty()) |
| 3521 << "Default receive stream should not have configured RTX"; | 3444 << "Default receive stream should not have configured RTX"; |
| 3522 | 3445 |
| 3523 EXPECT_TRUE(channel_->AddRecvStream( | 3446 EXPECT_TRUE(channel_->AddRecvStream( |
| 3524 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); | 3447 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); |
| 3525 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) | 3448 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) |
| 3526 << "AddRecvStream should have reconfigured, not added a new receiver."; | 3449 << "AddRecvStream should've reconfigured, not added a new receiver."; |
| 3527 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 3450 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
| 3528 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx_payload_types.empty()); | 3451 EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx.empty()); |
| 3529 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), | 3452 EXPECT_EQ(recv_stream->GetConfig().decoders.size(), |
| 3530 recv_stream->GetConfig().rtp.rtx_payload_types.size()) | 3453 recv_stream->GetConfig().rtp.rtx.size()) |
| 3531 << "RTX should be mapped for all decoders/payload types."; | 3454 << "RTX should be mapped for all decoders/payload types."; |
| 3532 EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc); | 3455 for (const auto& kv : recv_stream->GetConfig().rtp.rtx) { |
| 3456 EXPECT_EQ(rtx_ssrcs[0], kv.second.ssrc); |
| 3457 } |
| 3533 } | 3458 } |
| 3534 | 3459 |
| 3535 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { | 3460 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { |
| 3536 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 3461 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 3537 | 3462 |
| 3538 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); | 3463 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); |
| 3539 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 3464 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
| 3540 | 3465 |
| 3541 StreamParams sp = | 3466 StreamParams sp = |
| 3542 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); | 3467 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4166 | 4091 |
| 4167 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { | 4092 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { |
| 4168 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3); | 4093 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 1280, 720, 3, 3); |
| 4169 } | 4094 } |
| 4170 | 4095 |
| 4171 // Test that we normalize send codec format size in simulcast. | 4096 // Test that we normalize send codec format size in simulcast. |
| 4172 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { | 4097 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
| 4173 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2); | 4098 VerifySimulcastSettings(cricket::VideoCodec("VP8"), 541, 271, 2, 2); |
| 4174 } | 4099 } |
| 4175 } // namespace cricket | 4100 } // namespace cricket |
| OLD | NEW |