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 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 } | 215 } |
216 FAIL() << "Video Rotation extension not in header-extension list."; | 216 FAIL() << "Video Rotation extension not in header-extension list."; |
217 } | 217 } |
218 | 218 |
219 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) { | 219 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) { |
220 // Allocate the capturer first to prevent early destruction before channel's | 220 // Allocate the capturer first to prevent early destruction before channel's |
221 // dtor is called. | 221 // dtor is called. |
222 cricket::FakeVideoCapturer capturer; | 222 cricket::FakeVideoCapturer capturer; |
223 | 223 |
224 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 224 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
225 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 225 encoder_factory.AddSupportedVideoCodecType("VP8"); |
226 cricket::VideoSendParameters parameters; | 226 cricket::VideoSendParameters parameters; |
227 parameters.codecs.push_back(kVp8Codec); | 227 parameters.codecs.push_back(kVp8Codec); |
228 | 228 |
229 std::unique_ptr<VideoMediaChannel> channel( | 229 std::unique_ptr<VideoMediaChannel> channel( |
230 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 230 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
231 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); | 231 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
232 | 232 |
233 // Add CVO extension. | 233 // Add CVO extension. |
234 const int id = 1; | 234 const int id = 1; |
235 parameters.extensions.push_back( | 235 parameters.extensions.push_back( |
(...skipping 11 matching lines...) Expand all Loading... |
247 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 247 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
248 EXPECT_TRUE(capturer.apply_rotation()); | 248 EXPECT_TRUE(capturer.apply_rotation()); |
249 } | 249 } |
250 | 250 |
251 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeAddSendStream) { | 251 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeAddSendStream) { |
252 // Allocate the capturer first to prevent early destruction before channel's | 252 // Allocate the capturer first to prevent early destruction before channel's |
253 // dtor is called. | 253 // dtor is called. |
254 cricket::FakeVideoCapturer capturer; | 254 cricket::FakeVideoCapturer capturer; |
255 | 255 |
256 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 256 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
257 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 257 encoder_factory.AddSupportedVideoCodecType("VP8"); |
258 cricket::VideoSendParameters parameters; | 258 cricket::VideoSendParameters parameters; |
259 parameters.codecs.push_back(kVp8Codec); | 259 parameters.codecs.push_back(kVp8Codec); |
260 | 260 |
261 std::unique_ptr<VideoMediaChannel> channel( | 261 std::unique_ptr<VideoMediaChannel> channel( |
262 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 262 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
263 // Add CVO extension. | 263 // Add CVO extension. |
264 const int id = 1; | 264 const int id = 1; |
265 parameters.extensions.push_back( | 265 parameters.extensions.push_back( |
266 RtpExtension(RtpExtension::kVideoRotationUri, id)); | 266 RtpExtension(RtpExtension::kVideoRotationUri, id)); |
267 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 267 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
268 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); | 268 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
269 | 269 |
270 // Set capturer. | 270 // Set capturer. |
271 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); | 271 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); |
272 | 272 |
273 // Verify capturer has turned off applying rotation. | 273 // Verify capturer has turned off applying rotation. |
274 EXPECT_FALSE(capturer.apply_rotation()); | 274 EXPECT_FALSE(capturer.apply_rotation()); |
275 } | 275 } |
276 | 276 |
277 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) { | 277 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) { |
278 cricket::FakeVideoCapturer capturer; | 278 cricket::FakeVideoCapturer capturer; |
279 | 279 |
280 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 280 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
281 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 281 encoder_factory.AddSupportedVideoCodecType("VP8"); |
282 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); | 282 encoder_factory.AddSupportedVideoCodecType("VP9"); |
283 cricket::VideoSendParameters parameters; | 283 cricket::VideoSendParameters parameters; |
284 parameters.codecs.push_back(kVp8Codec); | 284 parameters.codecs.push_back(kVp8Codec); |
285 parameters.codecs.push_back(kVp9Codec); | 285 parameters.codecs.push_back(kVp9Codec); |
286 | 286 |
287 std::unique_ptr<VideoMediaChannel> channel( | 287 std::unique_ptr<VideoMediaChannel> channel( |
288 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 288 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
289 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); | 289 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
290 | 290 |
291 // Set capturer. | 291 // Set capturer. |
292 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); | 292 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 engine_.Init(); | 328 engine_.Init(); |
329 std::unique_ptr<VideoMediaChannel> channel( | 329 std::unique_ptr<VideoMediaChannel> channel( |
330 engine_.CreateChannel(call_.get(), MediaConfig(), VideoOptions())); | 330 engine_.CreateChannel(call_.get(), MediaConfig(), VideoOptions())); |
331 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); | 331 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); |
332 VideoMediaInfo info; | 332 VideoMediaInfo info; |
333 channel->GetStats(&info); | 333 channel->GetStats(&info); |
334 } | 334 } |
335 | 335 |
336 TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) { | 336 TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) { |
337 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 337 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
338 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 338 encoder_factory.AddSupportedVideoCodecType("VP8"); |
339 cricket::VideoSendParameters parameters; | 339 cricket::VideoSendParameters parameters; |
340 parameters.codecs.push_back(kVp8Codec); | 340 parameters.codecs.push_back(kVp8Codec); |
341 | 341 |
342 std::unique_ptr<VideoMediaChannel> channel( | 342 std::unique_ptr<VideoMediaChannel> channel( |
343 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 343 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
344 | 344 |
345 EXPECT_TRUE( | 345 EXPECT_TRUE( |
346 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 346 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
347 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(1)); | 347 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(1)); |
348 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 348 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
(...skipping 24 matching lines...) Expand all Loading... |
373 EXPECT_EQ(0u, encoder_factory.encoders().size()); | 373 EXPECT_EQ(0u, encoder_factory.encoders().size()); |
374 } | 374 } |
375 | 375 |
376 // Test that when an external encoder factory supports a codec we don't | 376 // Test that when an external encoder factory supports a codec we don't |
377 // internally support, we still add an RTX codec for it. | 377 // internally support, we still add an RTX codec for it. |
378 // TODO(deadbeef): Currently this test is only effective if WebRTC is | 378 // TODO(deadbeef): Currently this test is only effective if WebRTC is |
379 // built with no internal H264 support. This test should be updated | 379 // built with no internal H264 support. This test should be updated |
380 // if/when we start adding RTX codecs for unrecognized codec names. | 380 // if/when we start adding RTX codecs for unrecognized codec names. |
381 TEST_F(WebRtcVideoEngine2Test, RtxCodecAddedForExternalCodec) { | 381 TEST_F(WebRtcVideoEngine2Test, RtxCodecAddedForExternalCodec) { |
382 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 382 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
383 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 383 encoder_factory.AddSupportedVideoCodecType("H264"); |
384 engine_.SetExternalEncoderFactory(&encoder_factory); | 384 engine_.SetExternalEncoderFactory(&encoder_factory); |
385 engine_.Init(); | 385 engine_.Init(); |
386 | 386 |
387 auto codecs = engine_.codecs(); | 387 auto codecs = engine_.codecs(); |
388 // First figure out what payload type the test codec got assigned. | 388 // First figure out what payload type the test codec got assigned. |
389 auto test_codec_it = | 389 auto test_codec_it = |
390 std::find_if(codecs.begin(), codecs.end(), | 390 std::find_if(codecs.begin(), codecs.end(), |
391 [](const VideoCodec& c) { return c.name == "H264"; }); | 391 [](const VideoCodec& c) { return c.name == "H264"; }); |
392 ASSERT_NE(codecs.end(), test_codec_it); | 392 ASSERT_NE(codecs.end(), test_codec_it); |
393 // Now search for an RTX codec for it. | 393 // Now search for an RTX codec for it. |
394 EXPECT_TRUE(std::any_of(codecs.begin(), codecs.end(), | 394 EXPECT_TRUE(std::any_of(codecs.begin(), codecs.end(), |
395 [&test_codec_it](const VideoCodec& c) { | 395 [&test_codec_it](const VideoCodec& c) { |
396 int associated_payload_type; | 396 int associated_payload_type; |
397 return c.name == "rtx" && | 397 return c.name == "rtx" && |
398 c.GetParam(kCodecParamAssociatedPayloadType, | 398 c.GetParam(kCodecParamAssociatedPayloadType, |
399 &associated_payload_type) && | 399 &associated_payload_type) && |
400 associated_payload_type == test_codec_it->id; | 400 associated_payload_type == test_codec_it->id; |
401 })); | 401 })); |
402 } | 402 } |
403 | 403 |
404 void WebRtcVideoEngine2Test::TestExtendedEncoderOveruse( | 404 void WebRtcVideoEngine2Test::TestExtendedEncoderOveruse( |
405 bool use_external_encoder) { | 405 bool use_external_encoder) { |
406 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 406 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
407 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 407 encoder_factory.AddSupportedVideoCodecType("VP8"); |
408 cricket::VideoSendParameters parameters; | 408 cricket::VideoSendParameters parameters; |
409 parameters.codecs.push_back(kVp8Codec); | 409 parameters.codecs.push_back(kVp8Codec); |
410 std::unique_ptr<VideoMediaChannel> channel; | 410 std::unique_ptr<VideoMediaChannel> channel; |
411 FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); | 411 FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); |
412 call_.reset(fake_call); | 412 call_.reset(fake_call); |
413 if (use_external_encoder) { | 413 if (use_external_encoder) { |
414 channel.reset( | 414 channel.reset( |
415 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 415 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
416 } else { | 416 } else { |
417 engine_.Init(); | 417 engine_.Init(); |
(...skipping 16 matching lines...) Expand all Loading... |
434 TestExtendedEncoderOveruse(true); | 434 TestExtendedEncoderOveruse(true); |
435 } | 435 } |
436 | 436 |
437 TEST_F(WebRtcVideoEngine2Test, DisablesFullEncoderTimeForNonExternalEncoders) { | 437 TEST_F(WebRtcVideoEngine2Test, DisablesFullEncoderTimeForNonExternalEncoders) { |
438 TestExtendedEncoderOveruse(false); | 438 TestExtendedEncoderOveruse(false); |
439 } | 439 } |
440 | 440 |
441 #if !defined(RTC_DISABLE_VP9) | 441 #if !defined(RTC_DISABLE_VP9) |
442 TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) { | 442 TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) { |
443 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 443 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
444 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); | 444 encoder_factory.AddSupportedVideoCodecType("VP9"); |
445 std::vector<cricket::VideoCodec> codecs; | 445 std::vector<cricket::VideoCodec> codecs; |
446 codecs.push_back(kVp9Codec); | 446 codecs.push_back(kVp9Codec); |
447 | 447 |
448 std::unique_ptr<VideoMediaChannel> channel( | 448 std::unique_ptr<VideoMediaChannel> channel( |
449 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 449 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
450 | 450 |
451 EXPECT_TRUE( | 451 EXPECT_TRUE( |
452 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 452 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
453 } | 453 } |
454 #endif // !defined(RTC_DISABLE_VP9) | 454 #endif // !defined(RTC_DISABLE_VP9) |
455 | 455 |
456 TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) { | 456 TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) { |
457 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 457 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
458 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 458 encoder_factory.AddSupportedVideoCodecType("VP8"); |
459 std::vector<cricket::VideoCodec> codecs; | 459 std::vector<cricket::VideoCodec> codecs; |
460 codecs.push_back(kVp8Codec); | 460 codecs.push_back(kVp8Codec); |
461 FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); | 461 FakeCall* fake_call = new FakeCall(webrtc::Call::Config(&event_log_)); |
462 call_.reset(fake_call); | 462 call_.reset(fake_call); |
463 std::unique_ptr<VideoMediaChannel> channel( | 463 std::unique_ptr<VideoMediaChannel> channel( |
464 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 464 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
465 | 465 |
466 EXPECT_TRUE( | 466 EXPECT_TRUE( |
467 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 467 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
468 | 468 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 engine_.CreateChannel(call_.get(), MediaConfig(), VideoOptions()); | 536 engine_.CreateChannel(call_.get(), MediaConfig(), VideoOptions()); |
537 cricket::VideoRecvParameters parameters; | 537 cricket::VideoRecvParameters parameters; |
538 parameters.codecs = codecs; | 538 parameters.codecs = codecs; |
539 EXPECT_TRUE(channel->SetRecvParameters(parameters)); | 539 EXPECT_TRUE(channel->SetRecvParameters(parameters)); |
540 | 540 |
541 return channel; | 541 return channel; |
542 } | 542 } |
543 | 543 |
544 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) { | 544 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) { |
545 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 545 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
546 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 546 encoder_factory.AddSupportedVideoCodecType("VP8"); |
547 std::vector<cricket::VideoCodec> codecs; | 547 std::vector<cricket::VideoCodec> codecs; |
548 codecs.push_back(kVp8Codec); | 548 codecs.push_back(kVp8Codec); |
549 | 549 |
550 std::unique_ptr<VideoMediaChannel> channel( | 550 std::unique_ptr<VideoMediaChannel> channel( |
551 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 551 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
552 | 552 |
553 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); | 553 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
554 | 554 |
555 EXPECT_TRUE( | 555 EXPECT_TRUE( |
556 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); | 556 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); |
(...skipping 20 matching lines...) Expand all Loading... |
577 } | 577 } |
578 | 578 |
579 EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), true, nullptr, nullptr)); | 579 EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), true, nullptr, nullptr)); |
580 | 580 |
581 channel.reset(); | 581 channel.reset(); |
582 ASSERT_EQ(0u, encoder_factory.encoders().size()); | 582 ASSERT_EQ(0u, encoder_factory.encoders().size()); |
583 } | 583 } |
584 | 584 |
585 TEST_F(WebRtcVideoEngine2Test, ChannelWithExternalH264CanChangeToInternalVp8) { | 585 TEST_F(WebRtcVideoEngine2Test, ChannelWithExternalH264CanChangeToInternalVp8) { |
586 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 586 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
587 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 587 encoder_factory.AddSupportedVideoCodecType("H264"); |
588 std::vector<cricket::VideoCodec> codecs; | 588 std::vector<cricket::VideoCodec> codecs; |
589 codecs.push_back(kH264Codec); | 589 codecs.push_back(kH264Codec); |
590 | 590 |
591 std::unique_ptr<VideoMediaChannel> channel( | 591 std::unique_ptr<VideoMediaChannel> channel( |
592 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 592 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
593 | 593 |
594 EXPECT_TRUE( | 594 EXPECT_TRUE( |
595 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 595 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
596 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 596 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
597 | 597 |
598 cricket::VideoSendParameters parameters; | 598 cricket::VideoSendParameters parameters; |
599 parameters.codecs.push_back(kVp8Codec); | 599 parameters.codecs.push_back(kVp8Codec); |
600 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 600 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
601 ASSERT_EQ(0u, encoder_factory.encoders().size()); | 601 ASSERT_EQ(0u, encoder_factory.encoders().size()); |
602 } | 602 } |
603 | 603 |
604 TEST_F(WebRtcVideoEngine2Test, | 604 TEST_F(WebRtcVideoEngine2Test, |
605 DontUseExternalEncoderFactoryForUnsupportedCodecs) { | 605 DontUseExternalEncoderFactoryForUnsupportedCodecs) { |
606 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 606 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
607 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 607 encoder_factory.AddSupportedVideoCodecType("H264"); |
608 std::vector<cricket::VideoCodec> codecs; | 608 std::vector<cricket::VideoCodec> codecs; |
609 codecs.push_back(kVp8Codec); | 609 codecs.push_back(kVp8Codec); |
610 | 610 |
611 std::unique_ptr<VideoMediaChannel> channel( | 611 std::unique_ptr<VideoMediaChannel> channel( |
612 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 612 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
613 | 613 |
614 EXPECT_TRUE( | 614 EXPECT_TRUE( |
615 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 615 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
616 // Make sure DestroyVideoEncoder was called on the factory. | 616 // Make sure DestroyVideoEncoder was called on the factory. |
617 ASSERT_EQ(0u, encoder_factory.encoders().size()); | 617 ASSERT_EQ(0u, encoder_factory.encoders().size()); |
618 } | 618 } |
619 | 619 |
620 TEST_F(WebRtcVideoEngine2Test, | 620 TEST_F(WebRtcVideoEngine2Test, |
621 UsesSimulcastAdapterForVp8WithCombinedVP8AndH264Factory) { | 621 UsesSimulcastAdapterForVp8WithCombinedVP8AndH264Factory) { |
622 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 622 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
623 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 623 encoder_factory.AddSupportedVideoCodecType("VP8"); |
624 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 624 encoder_factory.AddSupportedVideoCodecType("H264"); |
625 | 625 |
626 std::vector<cricket::VideoCodec> codecs; | 626 std::vector<cricket::VideoCodec> codecs; |
627 codecs.push_back(kVp8Codec); | 627 codecs.push_back(kVp8Codec); |
628 | 628 |
629 std::unique_ptr<VideoMediaChannel> channel( | 629 std::unique_ptr<VideoMediaChannel> channel( |
630 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 630 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
631 | 631 |
632 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); | 632 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
633 | 633 |
634 EXPECT_TRUE( | 634 EXPECT_TRUE( |
(...skipping 15 matching lines...) Expand all Loading... |
650 encoder_factory.encoders()[0]->GetCodecSettings().codecType); | 650 encoder_factory.encoders()[0]->GetCodecSettings().codecType); |
651 | 651 |
652 channel.reset(); | 652 channel.reset(); |
653 // Make sure DestroyVideoEncoder was called on the factory. | 653 // Make sure DestroyVideoEncoder was called on the factory. |
654 EXPECT_EQ(0u, encoder_factory.encoders().size()); | 654 EXPECT_EQ(0u, encoder_factory.encoders().size()); |
655 } | 655 } |
656 | 656 |
657 TEST_F(WebRtcVideoEngine2Test, | 657 TEST_F(WebRtcVideoEngine2Test, |
658 DestroysNonSimulcastEncoderFromCombinedVP8AndH264Factory) { | 658 DestroysNonSimulcastEncoderFromCombinedVP8AndH264Factory) { |
659 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 659 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
660 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 660 encoder_factory.AddSupportedVideoCodecType("VP8"); |
661 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 661 encoder_factory.AddSupportedVideoCodecType("H264"); |
662 | 662 |
663 std::vector<cricket::VideoCodec> codecs; | 663 std::vector<cricket::VideoCodec> codecs; |
664 codecs.push_back(kH264Codec); | 664 codecs.push_back(kH264Codec); |
665 | 665 |
666 std::unique_ptr<VideoMediaChannel> channel( | 666 std::unique_ptr<VideoMediaChannel> channel( |
667 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 667 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
668 | 668 |
669 EXPECT_TRUE( | 669 EXPECT_TRUE( |
670 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 670 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
671 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 671 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
672 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); | 672 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); |
673 EXPECT_EQ(webrtc::kVideoCodecH264, | 673 EXPECT_EQ(webrtc::kVideoCodecH264, |
674 encoder_factory.encoders()[0]->GetCodecSettings().codecType); | 674 encoder_factory.encoders()[0]->GetCodecSettings().codecType); |
675 | 675 |
676 channel.reset(); | 676 channel.reset(); |
677 // Make sure DestroyVideoEncoder was called on the factory. | 677 // Make sure DestroyVideoEncoder was called on the factory. |
678 ASSERT_EQ(0u, encoder_factory.encoders().size()); | 678 ASSERT_EQ(0u, encoder_factory.encoders().size()); |
679 } | 679 } |
680 | 680 |
681 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { | 681 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { |
682 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 682 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
683 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 683 encoder_factory.AddSupportedVideoCodecType("H264"); |
684 std::vector<cricket::VideoCodec> codecs; | 684 std::vector<cricket::VideoCodec> codecs; |
685 codecs.push_back(kH264Codec); | 685 codecs.push_back(kH264Codec); |
686 | 686 |
687 std::unique_ptr<VideoMediaChannel> channel( | 687 std::unique_ptr<VideoMediaChannel> channel( |
688 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 688 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
689 | 689 |
690 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); | 690 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
691 EXPECT_TRUE( | 691 EXPECT_TRUE( |
692 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); | 692 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); |
693 | 693 |
694 // Send a frame of 720p. This should trigger a "real" encoder initialization. | 694 // Send a frame of 720p. This should trigger a "real" encoder initialization. |
695 cricket::VideoFormat format( | 695 cricket::VideoFormat format( |
696 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); | 696 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); |
697 cricket::FakeVideoCapturer capturer; | 697 cricket::FakeVideoCapturer capturer; |
698 EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, &capturer)); | 698 EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, &capturer)); |
699 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format)); | 699 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format)); |
700 EXPECT_TRUE(capturer.CaptureFrame()); | 700 EXPECT_TRUE(capturer.CaptureFrame()); |
701 | 701 |
702 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 702 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
703 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; | 703 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; |
704 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); | 704 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); |
705 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); | 705 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); |
706 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); | 706 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); |
707 EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, nullptr)); | 707 EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, nullptr)); |
708 } | 708 } |
709 | 709 |
710 // Test that external codecs are added to the end of the supported codec list. | 710 // Test that external codecs are added to the end of the supported codec list. |
711 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { | 711 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { |
712 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 712 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
713 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecUnknown, | 713 encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec"); |
714 "FakeExternalCodec"); | |
715 engine_.SetExternalEncoderFactory(&encoder_factory); | 714 engine_.SetExternalEncoderFactory(&encoder_factory); |
716 engine_.Init(); | 715 engine_.Init(); |
717 | 716 |
718 std::vector<cricket::VideoCodec> codecs(engine_.codecs()); | 717 std::vector<cricket::VideoCodec> codecs(engine_.codecs()); |
719 ASSERT_GE(codecs.size(), 2u); | 718 ASSERT_GE(codecs.size(), 2u); |
720 cricket::VideoCodec internal_codec = codecs.front(); | 719 cricket::VideoCodec internal_codec = codecs.front(); |
721 cricket::VideoCodec external_codec = codecs.back(); | 720 cricket::VideoCodec external_codec = codecs.back(); |
722 | 721 |
723 // The external codec will appear at last. | 722 // The external codec will appear at last. |
724 EXPECT_EQ("VP8", internal_codec.name); | 723 EXPECT_EQ("VP8", internal_codec.name); |
(...skipping 22 matching lines...) Expand all Loading... |
747 EXPECT_EQ(0u, decoder_factory.decoders().size()); | 746 EXPECT_EQ(0u, decoder_factory.decoders().size()); |
748 } | 747 } |
749 | 748 |
750 // Verifies that we can set up decoders that are not internally supported. | 749 // Verifies that we can set up decoders that are not internally supported. |
751 TEST_F(WebRtcVideoEngine2Test, RegisterExternalH264DecoderIfSupported) { | 750 TEST_F(WebRtcVideoEngine2Test, RegisterExternalH264DecoderIfSupported) { |
752 // TODO(pbos): Do not assume that encoder/decoder support is symmetric. We | 751 // TODO(pbos): Do not assume that encoder/decoder support is symmetric. We |
753 // can't even query the WebRtcVideoDecoderFactory for supported codecs. | 752 // can't even query the WebRtcVideoDecoderFactory for supported codecs. |
754 // For now we add a FakeWebRtcVideoEncoderFactory to add H264 to supported | 753 // For now we add a FakeWebRtcVideoEncoderFactory to add H264 to supported |
755 // codecs. | 754 // codecs. |
756 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 755 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
757 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 756 encoder_factory.AddSupportedVideoCodecType("H264"); |
758 engine_.SetExternalEncoderFactory(&encoder_factory); | 757 engine_.SetExternalEncoderFactory(&encoder_factory); |
759 cricket::FakeWebRtcVideoDecoderFactory decoder_factory; | 758 cricket::FakeWebRtcVideoDecoderFactory decoder_factory; |
760 decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264); | 759 decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264); |
761 std::vector<cricket::VideoCodec> codecs; | 760 std::vector<cricket::VideoCodec> codecs; |
762 codecs.push_back(kH264Codec); | 761 codecs.push_back(kH264Codec); |
763 | 762 |
764 std::unique_ptr<VideoMediaChannel> channel( | 763 std::unique_ptr<VideoMediaChannel> channel( |
765 SetUpForExternalDecoderFactory(&decoder_factory, codecs)); | 764 SetUpForExternalDecoderFactory(&decoder_factory, codecs)); |
766 | 765 |
767 EXPECT_TRUE( | 766 EXPECT_TRUE( |
(...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1806 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations()); | 1805 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations()); |
1807 | 1806 |
1808 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 1807 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
1809 } | 1808 } |
1810 | 1809 |
1811 class Vp9SettingsTest : public WebRtcVideoChannel2Test { | 1810 class Vp9SettingsTest : public WebRtcVideoChannel2Test { |
1812 public: | 1811 public: |
1813 Vp9SettingsTest() : Vp9SettingsTest("") {} | 1812 Vp9SettingsTest() : Vp9SettingsTest("") {} |
1814 explicit Vp9SettingsTest(const char* field_trials) | 1813 explicit Vp9SettingsTest(const char* field_trials) |
1815 : WebRtcVideoChannel2Test(field_trials) { | 1814 : WebRtcVideoChannel2Test(field_trials) { |
1816 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); | 1815 encoder_factory_.AddSupportedVideoCodecType("VP9"); |
1817 } | 1816 } |
1818 virtual ~Vp9SettingsTest() {} | 1817 virtual ~Vp9SettingsTest() {} |
1819 | 1818 |
1820 protected: | 1819 protected: |
1821 void SetUp() override { | 1820 void SetUp() override { |
1822 engine_.SetExternalEncoderFactory(&encoder_factory_); | 1821 engine_.SetExternalEncoderFactory(&encoder_factory_); |
1823 | 1822 |
1824 WebRtcVideoChannel2Test::SetUp(); | 1823 WebRtcVideoChannel2Test::SetUp(); |
1825 } | 1824 } |
1826 | 1825 |
(...skipping 2009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3836 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { | 3835 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { |
3837 VerifySimulcastSettings(kVp8Codec, 1280, 720, 3, 3); | 3836 VerifySimulcastSettings(kVp8Codec, 1280, 720, 3, 3); |
3838 } | 3837 } |
3839 | 3838 |
3840 // Test that we normalize send codec format size in simulcast. | 3839 // Test that we normalize send codec format size in simulcast. |
3841 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { | 3840 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
3842 cricket::VideoCodec codec(kVp8Codec); | 3841 cricket::VideoCodec codec(kVp8Codec); |
3843 VerifySimulcastSettings(codec, 541, 271, 2, 2); | 3842 VerifySimulcastSettings(codec, 541, 271, 2, 2); |
3844 } | 3843 } |
3845 } // namespace cricket | 3844 } // namespace cricket |
OLD | NEW |