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

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

Issue 2449993003: Replace WebRtcVideoEncoderFactory::VideoCodec with cricket::VideoCodec (Closed)
Patch Set: Compare only codec names, not VideoCodec::Matches Created 4 years, 1 month 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
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.cc ('k') | webrtc/media/media.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.cc ('k') | webrtc/media/media.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698