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

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

Issue 1327933002: Full impl of NnChannel::SetSendParameters and NnChannel::SetRecvParameters (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 FAIL() << "Video Rotation extension not in header-extension list."; 283 FAIL() << "Video Rotation extension not in header-extension list.";
284 } 284 }
285 285
286 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) { 286 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) {
287 // Allocate the capturer first to prevent early destruction before channel's 287 // Allocate the capturer first to prevent early destruction before channel's
288 // dtor is called. 288 // dtor is called.
289 cricket::FakeVideoCapturer capturer; 289 cricket::FakeVideoCapturer capturer;
290 290
291 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 291 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
292 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 292 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
293 std::vector<cricket::VideoCodec> codecs; 293 cricket::VideoSendParameters parameters;
294 codecs.push_back(kVp8Codec); 294 parameters.codecs.push_back(kVp8Codec);
295 295
296 rtc::scoped_ptr<VideoMediaChannel> channel( 296 rtc::scoped_ptr<VideoMediaChannel> channel(
297 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 297 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
298 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 298 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
299 299
300 // Add CVO extension. 300 // Add CVO extension.
301 const int id = 1; 301 const int id = 1;
302 std::vector<cricket::RtpHeaderExtension> extensions; 302 parameters.extensions.push_back(
303 extensions.push_back(
304 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); 303 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
305 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); 304 EXPECT_TRUE(channel->SetSendParameters(parameters));
306 305
307 // Set capturer. 306 // Set capturer.
308 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 307 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer));
309 308
310 // Verify capturer has turned off applying rotation. 309 // Verify capturer has turned off applying rotation.
311 EXPECT_FALSE(capturer.GetApplyRotation()); 310 EXPECT_FALSE(capturer.GetApplyRotation());
312 311
313 // Verify removing header extension turns on applying rotation. 312 // Verify removing header extension turns on applying rotation.
314 extensions.clear(); 313 parameters.extensions.clear();
315 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); 314 EXPECT_TRUE(channel->SetSendParameters(parameters));
316 EXPECT_TRUE(capturer.GetApplyRotation()); 315 EXPECT_TRUE(capturer.GetApplyRotation());
317 } 316 }
318 317
319 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) { 318 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) {
320 cricket::FakeVideoCapturer capturer; 319 cricket::FakeVideoCapturer capturer;
321 320
322 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 321 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
323 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 322 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
324 std::vector<cricket::VideoCodec> codecs; 323 cricket::VideoSendParameters parameters;
325 codecs.push_back(kVp8Codec); 324 parameters.codecs.push_back(kVp8Codec);
326 325
327 rtc::scoped_ptr<VideoMediaChannel> channel( 326 rtc::scoped_ptr<VideoMediaChannel> channel(
328 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 327 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
329 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 328 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
330 329
331 // Set capturer. 330 // Set capturer.
332 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 331 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer));
333 332
334 // Add CVO extension. 333 // Add CVO extension.
335 const int id = 1; 334 const int id = 1;
336 std::vector<cricket::RtpHeaderExtension> extensions; 335 parameters.extensions.push_back(
337 extensions.push_back(
338 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); 336 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
339 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); 337 EXPECT_TRUE(channel->SetSendParameters(parameters));
340 338
341 // Verify capturer has turned off applying rotation. 339 // Verify capturer has turned off applying rotation.
342 EXPECT_FALSE(capturer.GetApplyRotation()); 340 EXPECT_FALSE(capturer.GetApplyRotation());
343 341
344 // Verify removing header extension turns on applying rotation. 342 // Verify removing header extension turns on applying rotation.
345 extensions.clear(); 343 parameters.extensions.clear();
346 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); 344 EXPECT_TRUE(channel->SetSendParameters(parameters));
347 EXPECT_TRUE(capturer.GetApplyRotation()); 345 EXPECT_TRUE(capturer.GetApplyRotation());
348 } 346 }
349 347
350 TEST_F(WebRtcVideoEngine2Test, SetSendFailsBeforeSettingCodecs) { 348 TEST_F(WebRtcVideoEngine2Test, SetSendFailsBeforeSettingCodecs) {
351 engine_.Init(); 349 engine_.Init();
352 rtc::scoped_ptr<VideoMediaChannel> channel( 350 rtc::scoped_ptr<VideoMediaChannel> channel(
353 engine_.CreateChannel(cricket::VideoOptions(), NULL)); 351 engine_.CreateChannel(cricket::VideoOptions(), NULL));
354 352
355 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); 353 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123)));
356 354
357 EXPECT_FALSE(channel->SetSend(true)) 355 EXPECT_FALSE(channel->SetSend(true))
358 << "Channel should not start without codecs."; 356 << "Channel should not start without codecs.";
359 EXPECT_TRUE(channel->SetSend(false)) 357 EXPECT_TRUE(channel->SetSend(false))
360 << "Channel should be stoppable even without set codecs."; 358 << "Channel should be stoppable even without set codecs.";
361 } 359 }
362 360
363 TEST_F(WebRtcVideoEngine2Test, GetStatsWithoutSendCodecsSetDoesNotCrash) { 361 TEST_F(WebRtcVideoEngine2Test, GetStatsWithoutSendCodecsSetDoesNotCrash) {
364 engine_.Init(); 362 engine_.Init();
365 rtc::scoped_ptr<VideoMediaChannel> channel( 363 rtc::scoped_ptr<VideoMediaChannel> channel(
366 engine_.CreateChannel(cricket::VideoOptions(), NULL)); 364 engine_.CreateChannel(cricket::VideoOptions(), NULL));
367 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); 365 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123)));
368 VideoMediaInfo info; 366 VideoMediaInfo info;
369 channel->GetStats(&info); 367 channel->GetStats(&info);
370 } 368 }
371 369
372 TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) { 370 TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) {
373 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 371 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
374 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 372 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
375 std::vector<cricket::VideoCodec> codecs; 373 cricket::VideoSendParameters parameters;
376 codecs.push_back(kVp8Codec); 374 parameters.codecs.push_back(kVp8Codec);
377 375
378 rtc::scoped_ptr<VideoMediaChannel> channel( 376 rtc::scoped_ptr<VideoMediaChannel> channel(
379 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 377 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
380 378
381 EXPECT_TRUE( 379 EXPECT_TRUE(
382 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 380 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
383 ASSERT_EQ(1u, encoder_factory.encoders().size()); 381 ASSERT_EQ(1u, encoder_factory.encoders().size());
384 EXPECT_TRUE(channel->SetSend(true)); 382 EXPECT_TRUE(channel->SetSend(true));
385 383
386 cricket::FakeVideoCapturer capturer; 384 cricket::FakeVideoCapturer capturer;
387 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 385 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer));
388 EXPECT_EQ(cricket::CS_RUNNING, 386 EXPECT_EQ(cricket::CS_RUNNING,
389 capturer.Start(capturer.GetSupportedFormats()->front())); 387 capturer.Start(capturer.GetSupportedFormats()->front()));
390 EXPECT_TRUE(capturer.CaptureFrame()); 388 EXPECT_TRUE(capturer.CaptureFrame());
391 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, 389 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0,
392 kTimeout); 390 kTimeout);
393 391
394 // Sending one frame will have reallocated the encoder since input size 392 // Sending one frame will have reallocated the encoder since input size
395 // changes from a small default to the actual frame width/height. 393 // changes from a small default to the actual frame width/height.
396 int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); 394 int num_created_encoders = encoder_factory.GetNumCreatedEncoders();
397 EXPECT_EQ(num_created_encoders, 2); 395 EXPECT_EQ(num_created_encoders, 2);
398 396
399 // Setting codecs of the same type should not reallocate any encoders 397 // Setting codecs of the same type should not reallocate any encoders
400 // (expecting a no-op). 398 // (expecting a no-op).
401 EXPECT_TRUE(channel->SetSendCodecs(codecs)); 399 EXPECT_TRUE(channel->SetSendParameters(parameters));
402 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders()); 400 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders());
403 401
404 // Remove stream previously added to free the external encoder instance. 402 // Remove stream previously added to free the external encoder instance.
405 EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); 403 EXPECT_TRUE(channel->RemoveSendStream(kSsrc));
406 EXPECT_EQ(0u, encoder_factory.encoders().size()); 404 EXPECT_EQ(0u, encoder_factory.encoders().size());
407 } 405 }
408 406
409 TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) { 407 TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) {
410 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 408 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
411 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); 409 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9");
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 } 482 }
485 483
486 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory( 484 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory(
487 cricket::WebRtcVideoEncoderFactory* encoder_factory, 485 cricket::WebRtcVideoEncoderFactory* encoder_factory,
488 const std::vector<VideoCodec>& codecs) { 486 const std::vector<VideoCodec>& codecs) {
489 engine_.SetExternalEncoderFactory(encoder_factory); 487 engine_.SetExternalEncoderFactory(encoder_factory);
490 engine_.Init(); 488 engine_.Init();
491 489
492 VideoMediaChannel* channel = 490 VideoMediaChannel* channel =
493 engine_.CreateChannel(cricket::VideoOptions(), NULL); 491 engine_.CreateChannel(cricket::VideoOptions(), NULL);
494 EXPECT_TRUE(channel->SetSendCodecs(codecs)); 492 cricket::VideoSendParameters parameters;
495 493 parameters.codecs = codecs;
494 EXPECT_TRUE(channel->SetSendParameters(parameters));
496 return channel; 495 return channel;
497 } 496 }
498 497
499 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalDecoderFactory( 498 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalDecoderFactory(
500 cricket::WebRtcVideoDecoderFactory* decoder_factory, 499 cricket::WebRtcVideoDecoderFactory* decoder_factory,
501 const std::vector<VideoCodec>& codecs) { 500 const std::vector<VideoCodec>& codecs) {
502 engine_.SetExternalDecoderFactory(decoder_factory); 501 engine_.SetExternalDecoderFactory(decoder_factory);
503 engine_.Init(); 502 engine_.Init();
504 503
505 VideoMediaChannel* channel = 504 VideoMediaChannel* channel =
506 engine_.CreateChannel(cricket::VideoOptions(), NULL); 505 engine_.CreateChannel(cricket::VideoOptions(), NULL);
507 EXPECT_TRUE(channel->SetRecvCodecs(codecs)); 506 cricket::VideoRecvParameters parameters;
508 507 parameters.codecs = codecs;
508 EXPECT_TRUE(channel->SetRecvParameters(parameters));
509 return channel; 509 return channel;
510 } 510 }
511 511
512 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) { 512 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) {
513 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 513 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
514 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 514 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
515 std::vector<cricket::VideoCodec> codecs; 515 std::vector<cricket::VideoCodec> codecs;
516 codecs.push_back(kVp8Codec); 516 codecs.push_back(kVp8Codec);
517 517
518 rtc::scoped_ptr<VideoMediaChannel> channel( 518 rtc::scoped_ptr<VideoMediaChannel> channel(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 std::vector<cricket::VideoCodec> codecs; 555 std::vector<cricket::VideoCodec> codecs;
556 codecs.push_back(kH264Codec); 556 codecs.push_back(kH264Codec);
557 557
558 rtc::scoped_ptr<VideoMediaChannel> channel( 558 rtc::scoped_ptr<VideoMediaChannel> channel(
559 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 559 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
560 560
561 EXPECT_TRUE( 561 EXPECT_TRUE(
562 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 562 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
563 ASSERT_EQ(1u, encoder_factory.encoders().size()); 563 ASSERT_EQ(1u, encoder_factory.encoders().size());
564 564
565 codecs.clear(); 565 cricket::VideoSendParameters parameters;
566 codecs.push_back(kVp8Codec); 566 parameters.codecs.push_back(kVp8Codec);
567 EXPECT_TRUE(channel->SetSendCodecs(codecs)); 567 EXPECT_TRUE(channel->SetSendParameters(parameters));
568
569 ASSERT_EQ(0u, encoder_factory.encoders().size()); 568 ASSERT_EQ(0u, encoder_factory.encoders().size());
570 } 569 }
571 570
572 TEST_F(WebRtcVideoEngine2Test, 571 TEST_F(WebRtcVideoEngine2Test,
573 DontUseExternalEncoderFactoryForUnsupportedCodecs) { 572 DontUseExternalEncoderFactoryForUnsupportedCodecs) {
574 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 573 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
575 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); 574 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
576 std::vector<cricket::VideoCodec> codecs; 575 std::vector<cricket::VideoCodec> codecs;
577 codecs.push_back(kVp8Codec); 576 codecs.push_back(kVp8Codec);
578 577
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 cricket::VideoCodec external_codec = codecs.back(); 679 cricket::VideoCodec external_codec = codecs.back();
681 680
682 // The external codec will appear at last. 681 // The external codec will appear at last.
683 EXPECT_EQ("VP8", internal_codec.name); 682 EXPECT_EQ("VP8", internal_codec.name);
684 EXPECT_EQ("H264", external_codec.name); 683 EXPECT_EQ("H264", external_codec.name);
685 } 684 }
686 685
687 TEST_F(WebRtcVideoEngine2Test, RegisterExternalDecodersIfSupported) { 686 TEST_F(WebRtcVideoEngine2Test, RegisterExternalDecodersIfSupported) {
688 cricket::FakeWebRtcVideoDecoderFactory decoder_factory; 687 cricket::FakeWebRtcVideoDecoderFactory decoder_factory;
689 decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); 688 decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8);
690 std::vector<cricket::VideoCodec> codecs; 689 cricket::VideoRecvParameters parameters;
691 codecs.push_back(kVp8Codec); 690 parameters.codecs.push_back(kVp8Codec);
692 691
693 rtc::scoped_ptr<VideoMediaChannel> channel( 692 rtc::scoped_ptr<VideoMediaChannel> channel(
694 SetUpForExternalDecoderFactory(&decoder_factory, codecs)); 693 SetUpForExternalDecoderFactory(&decoder_factory, parameters.codecs));
695 694
696 EXPECT_TRUE( 695 EXPECT_TRUE(
697 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); 696 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc)));
698 ASSERT_EQ(1u, decoder_factory.decoders().size()); 697 ASSERT_EQ(1u, decoder_factory.decoders().size());
699 698
700 // Setting codecs of the same type should not reallocate the decoder. 699 // Setting codecs of the same type should not reallocate the decoder.
701 EXPECT_TRUE(channel->SetRecvCodecs(codecs)); 700 EXPECT_TRUE(channel->SetRecvParameters(parameters));
702 EXPECT_EQ(1, decoder_factory.GetNumCreatedDecoders()); 701 EXPECT_EQ(1, decoder_factory.GetNumCreatedDecoders());
703 702
704 // Remove stream previously added to free the external decoder instance. 703 // Remove stream previously added to free the external decoder instance.
705 EXPECT_TRUE(channel->RemoveRecvStream(kSsrc)); 704 EXPECT_TRUE(channel->RemoveRecvStream(kSsrc));
706 EXPECT_EQ(0u, decoder_factory.decoders().size()); 705 EXPECT_EQ(0u, decoder_factory.decoders().size());
707 } 706 }
708 707
709 // Verifies that we can set up decoders that are not internally supported. 708 // Verifies that we can set up decoders that are not internally supported.
710 TEST_F(WebRtcVideoEngine2Test, RegisterExternalH264DecoderIfSupported) { 709 TEST_F(WebRtcVideoEngine2Test, RegisterExternalH264DecoderIfSupported) {
711 // TODO(pbos): Do not assume that encoder/decoder support is symmetric. We 710 // TODO(pbos): Do not assume that encoder/decoder support is symmetric. We
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test, 856 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test,
858 public WebRtcCallFactory { 857 public WebRtcCallFactory {
859 public: 858 public:
860 WebRtcVideoChannel2Test() : fake_call_(NULL), last_ssrc_(0) {} 859 WebRtcVideoChannel2Test() : fake_call_(NULL), last_ssrc_(0) {}
861 void SetUp() override { 860 void SetUp() override {
862 engine_.SetCallFactory(this); 861 engine_.SetCallFactory(this);
863 engine_.Init(); 862 engine_.Init();
864 channel_.reset(engine_.CreateChannel(cricket::VideoOptions(), NULL)); 863 channel_.reset(engine_.CreateChannel(cricket::VideoOptions(), NULL));
865 ASSERT_TRUE(fake_call_ != NULL) << "Call not created through factory."; 864 ASSERT_TRUE(fake_call_ != NULL) << "Call not created through factory.";
866 last_ssrc_ = 123; 865 last_ssrc_ = 123;
867 ASSERT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 866 cricket::VideoSendParameters parameters;
867 parameters.codecs = engine_.codecs();
868 ASSERT_TRUE(channel_->SetSendParameters(parameters));
868 } 869 }
869 870
870 protected: 871 protected:
871 virtual std::vector<cricket::VideoCodec> GetCodecs() { 872 virtual std::vector<cricket::VideoCodec> GetCodecs() {
872 return engine_.codecs(); 873 return engine_.codecs();
873 } 874 }
874 875
875 webrtc::Call* CreateCall(const webrtc::Call::Config& config) override { 876 webrtc::Call* CreateCall(const webrtc::Call::Config& config) override {
876 DCHECK(fake_call_ == NULL); 877 DCHECK(fake_call_ == NULL);
877 fake_call_ = new FakeCall(config); 878 fake_call_ = new FakeCall(config);
(...skipping 29 matching lines...) Expand all
907 EXPECT_EQ(num_streams + 1, streams.size()); 908 EXPECT_EQ(num_streams + 1, streams.size());
908 return streams[streams.size() - 1]; 909 return streams[streams.size() - 1];
909 } 910 }
910 911
911 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, 912 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps,
912 int expected_min_bitrate_bps, 913 int expected_min_bitrate_bps,
913 const char* start_bitrate_kbps, 914 const char* start_bitrate_kbps,
914 int expected_start_bitrate_bps, 915 int expected_start_bitrate_bps,
915 const char* max_bitrate_kbps, 916 const char* max_bitrate_kbps,
916 int expected_max_bitrate_bps) { 917 int expected_max_bitrate_bps) {
917 std::vector<VideoCodec> codecs; 918 VideoSendParameters parameters;
918 codecs.push_back(kVp8Codec); 919 parameters.codecs.push_back(kVp8Codec);
919 codecs[0].params[kCodecParamMinBitrate] = min_bitrate_kbps; 920 parameters.codecs[0].params[kCodecParamMinBitrate] = min_bitrate_kbps;
920 codecs[0].params[kCodecParamStartBitrate] = start_bitrate_kbps; 921 parameters.codecs[0].params[kCodecParamStartBitrate] = start_bitrate_kbps;
921 codecs[0].params[kCodecParamMaxBitrate] = max_bitrate_kbps; 922 parameters.codecs[0].params[kCodecParamMaxBitrate] = max_bitrate_kbps;
922 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 923 EXPECT_TRUE(channel_->SetSendParameters(parameters));
923 924
924 EXPECT_EQ(expected_min_bitrate_bps, 925 EXPECT_EQ(expected_min_bitrate_bps,
925 fake_call_->GetConfig().bitrate_config.min_bitrate_bps); 926 fake_call_->GetConfig().bitrate_config.min_bitrate_bps);
926 EXPECT_EQ(expected_start_bitrate_bps, 927 EXPECT_EQ(expected_start_bitrate_bps,
927 fake_call_->GetConfig().bitrate_config.start_bitrate_bps); 928 fake_call_->GetConfig().bitrate_config.start_bitrate_bps);
928 EXPECT_EQ(expected_max_bitrate_bps, 929 EXPECT_EQ(expected_max_bitrate_bps,
929 fake_call_->GetConfig().bitrate_config.max_bitrate_bps); 930 fake_call_->GetConfig().bitrate_config.max_bitrate_bps);
930 } 931 }
931 932
932 void TestSetSendRtpHeaderExtensions(const std::string& cricket_ext, 933 void TestSetSendRtpHeaderExtensions(const std::string& cricket_ext,
933 const std::string& webrtc_ext) { 934 const std::string& webrtc_ext) {
934 FakeCall* call = fake_call_; 935 FakeCall* call = fake_call_;
935 // Enable extension. 936 // Enable extension.
936 const int id = 1; 937 const int id = 1;
937 std::vector<cricket::RtpHeaderExtension> extensions; 938 cricket::VideoSendParameters parameters;
938 extensions.push_back(cricket::RtpHeaderExtension(cricket_ext, id)); 939 parameters.extensions.push_back(
939 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 940 cricket::RtpHeaderExtension(cricket_ext, id));
940 941 EXPECT_TRUE(channel_->SetSendParameters(parameters));
941 FakeVideoSendStream* send_stream = 942 FakeVideoSendStream* send_stream =
942 AddSendStream(cricket::StreamParams::CreateLegacy(123)); 943 AddSendStream(cricket::StreamParams::CreateLegacy(123));
943 944
944 // Verify the send extension id. 945 // Verify the send extension id.
945 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); 946 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size());
946 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); 947 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id);
947 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); 948 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name);
948 // Verify call with same set of extensions returns true. 949 // Verify call with same set of extensions returns true.
949 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 950 EXPECT_TRUE(channel_->SetSendParameters(parameters));
950 // Verify that SetSendRtpHeaderExtensions doesn't implicitly add them for 951 // Verify that SetSendRtpHeaderExtensions doesn't implicitly add them for
951 // receivers. 952 // receivers.
952 EXPECT_TRUE(AddRecvStream(cricket::StreamParams::CreateLegacy(123)) 953 EXPECT_TRUE(AddRecvStream(cricket::StreamParams::CreateLegacy(123))
953 ->GetConfig() 954 ->GetConfig()
954 .rtp.extensions.empty()); 955 .rtp.extensions.empty());
955 956
956 // Verify that existing RTP header extensions can be removed. 957 // Verify that existing RTP header extensions can be removed.
957 std::vector<cricket::RtpHeaderExtension> empty_extensions; 958 EXPECT_TRUE(channel_->SetSendParameters(cricket::VideoSendParameters()));
958 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(empty_extensions));
959 ASSERT_EQ(1u, call->GetVideoSendStreams().size()); 959 ASSERT_EQ(1u, call->GetVideoSendStreams().size());
960 send_stream = call->GetVideoSendStreams()[0]; 960 send_stream = call->GetVideoSendStreams()[0];
961 EXPECT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); 961 EXPECT_TRUE(send_stream->GetConfig().rtp.extensions.empty());
962 962
963 // Verify that adding receive RTP header extensions adds them for existing 963 // Verify that adding receive RTP header extensions adds them for existing
964 // streams. 964 // streams.
965 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 965 EXPECT_TRUE(channel_->SetSendParameters(parameters));
966 send_stream = call->GetVideoSendStreams()[0]; 966 send_stream = call->GetVideoSendStreams()[0];
967 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); 967 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size());
968 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); 968 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id);
969 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); 969 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name);
970 } 970 }
971 971
972 void TestSetRecvRtpHeaderExtensions(const std::string& cricket_ext, 972 void TestSetRecvRtpHeaderExtensions(const std::string& cricket_ext,
973 const std::string& webrtc_ext) { 973 const std::string& webrtc_ext) {
974 FakeCall* call = fake_call_; 974 FakeCall* call = fake_call_;
975 // Enable extension. 975 // Enable extension.
976 const int id = 1; 976 const int id = 1;
977 std::vector<cricket::RtpHeaderExtension> extensions; 977 cricket::VideoRecvParameters parameters;
978 extensions.push_back(cricket::RtpHeaderExtension(cricket_ext, id)); 978 parameters.extensions.push_back(
979 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 979 cricket::RtpHeaderExtension(cricket_ext, id));
980 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
980 981
981 FakeVideoReceiveStream* recv_stream = 982 FakeVideoReceiveStream* recv_stream =
982 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); 983 AddRecvStream(cricket::StreamParams::CreateLegacy(123));
983 984
984 // Verify the recv extension id. 985 // Verify the recv extension id.
985 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); 986 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size());
986 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); 987 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id);
987 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); 988 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name);
988 // Verify call with same set of extensions returns true. 989 // Verify call with same set of extensions returns true.
989 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 990 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
990 991
991 // Verify that SetRecvRtpHeaderExtensions doesn't implicitly add them for 992 // Verify that SetRecvRtpHeaderExtensions doesn't implicitly add them for
992 // senders. 993 // senders.
993 EXPECT_TRUE(AddSendStream(cricket::StreamParams::CreateLegacy(123)) 994 EXPECT_TRUE(AddSendStream(cricket::StreamParams::CreateLegacy(123))
994 ->GetConfig() 995 ->GetConfig()
995 .rtp.extensions.empty()); 996 .rtp.extensions.empty());
996 997
997 // Verify that existing RTP header extensions can be removed. 998 // Verify that existing RTP header extensions can be removed.
998 std::vector<cricket::RtpHeaderExtension> empty_extensions; 999 EXPECT_TRUE(channel_->SetRecvParameters(cricket::VideoRecvParameters()));
999 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(empty_extensions));
1000 ASSERT_EQ(1u, call->GetVideoReceiveStreams().size()); 1000 ASSERT_EQ(1u, call->GetVideoReceiveStreams().size());
1001 recv_stream = call->GetVideoReceiveStreams()[0]; 1001 recv_stream = call->GetVideoReceiveStreams()[0];
1002 EXPECT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); 1002 EXPECT_TRUE(recv_stream->GetConfig().rtp.extensions.empty());
1003 1003
1004 // Verify that adding receive RTP header extensions adds them for existing 1004 // Verify that adding receive RTP header extensions adds them for existing
1005 // streams. 1005 // streams.
1006 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 1006 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1007 recv_stream = call->GetVideoReceiveStreams()[0]; 1007 recv_stream = call->GetVideoReceiveStreams()[0];
1008 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); 1008 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size());
1009 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); 1009 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id);
1010 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); 1010 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name);
1011 } 1011 }
1012 1012
1013 void TestCpuAdaptation(bool enable_overuse, bool is_screenshare); 1013 void TestCpuAdaptation(bool enable_overuse, bool is_screenshare);
1014 void TestReceiverLocalSsrcConfiguration(bool receiver_first); 1014 void TestReceiverLocalSsrcConfiguration(bool receiver_first);
1015 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type, 1015 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type,
1016 bool expect_created_receive_stream); 1016 bool expect_created_receive_stream);
1017 1017
1018 FakeVideoSendStream* SetDenoisingOption(bool enabled) { 1018 FakeVideoSendStream* SetDenoisingOption(
1019 VideoOptions options; 1019 const cricket::VideoSendParameters& parameters, bool enabled) {
1020 options.video_noise_reduction.Set(enabled); 1020 cricket::VideoSendParameters params = parameters;
1021 channel_->SetOptions(options); 1021 params.options.video_noise_reduction.Set(enabled);
1022 channel_->SetSendParameters(params);
1022 return fake_call_->GetVideoSendStreams().back(); 1023 return fake_call_->GetVideoSendStreams().back();
1023 } 1024 }
1024 1025
1025 FakeVideoSendStream* SetUpSimulcast(bool enabled, bool with_rtx) { 1026 FakeVideoSendStream* SetUpSimulcast(bool enabled, bool with_rtx) {
1026 const int kRtxSsrcOffset = 0xDEADBEEF; 1027 const int kRtxSsrcOffset = 0xDEADBEEF;
1027 last_ssrc_ += 3; 1028 last_ssrc_ += 3;
1028 std::vector<uint32_t> ssrcs; 1029 std::vector<uint32_t> ssrcs;
1029 std::vector<uint32_t> rtx_ssrcs; 1030 std::vector<uint32_t> rtx_ssrcs;
1030 uint32_t num_streams = enabled ? 3 : 1; 1031 uint32_t num_streams = enabled ? 3 : 1;
1031 for (uint32_t i = 0; i < num_streams; ++i) { 1032 for (uint32_t i = 0; i < num_streams; ++i) {
(...skipping 23 matching lines...) Expand all
1055 sp.sync_label = kSyncLabel; 1056 sp.sync_label = kSyncLabel;
1056 EXPECT_TRUE(channel_->AddRecvStream(sp)); 1057 EXPECT_TRUE(channel_->AddRecvStream(sp));
1057 1058
1058 EXPECT_EQ(1, fake_call_->GetVideoReceiveStreams().size()); 1059 EXPECT_EQ(1, fake_call_->GetVideoReceiveStreams().size());
1059 EXPECT_EQ(kSyncLabel, 1060 EXPECT_EQ(kSyncLabel,
1060 fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group) 1061 fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group)
1061 << "SyncGroup should be set based on sync_label"; 1062 << "SyncGroup should be set based on sync_label";
1062 } 1063 }
1063 1064
1064 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithSimAndRtx) { 1065 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithSimAndRtx) {
1065 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 1066 cricket::VideoSendParameters parameters;
1067 parameters.codecs = engine_.codecs();
1068 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1066 EXPECT_TRUE(channel_->SetSend(true)); 1069 EXPECT_TRUE(channel_->SetSend(true));
1067 cricket::VideoOptions options; 1070 parameters.options.conference_mode.Set(true);
1068 options.conference_mode.Set(true); 1071 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1069 EXPECT_TRUE(channel_->SetOptions(options));
1070 1072
1071 // Send side. 1073 // Send side.
1072 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); 1074 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1);
1073 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); 1075 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
1074 FakeVideoSendStream* send_stream = AddSendStream( 1076 FakeVideoSendStream* send_stream = AddSendStream(
1075 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); 1077 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
1076 1078
1077 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size()); 1079 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size());
1078 for (size_t i = 0; i < rtx_ssrcs.size(); ++i) 1080 for (size_t i = 0; i < rtx_ssrcs.size(); ++i)
1079 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]); 1081 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 } 1148 }
1147 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { 1149 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) {
1148 TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, 1150 TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension,
1149 webrtc::RtpExtension::kVideoRotation); 1151 webrtc::RtpExtension::kVideoRotation);
1150 } 1152 }
1151 1153
1152 TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) { 1154 TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) {
1153 const int kTOffsetId = 1; 1155 const int kTOffsetId = 1;
1154 const int kAbsSendTimeId = 2; 1156 const int kAbsSendTimeId = 2;
1155 const int kVideoRotationId = 3; 1157 const int kVideoRotationId = 3;
1156 std::vector<cricket::RtpHeaderExtension> extensions; 1158 cricket::VideoSendParameters parameters;
1157 extensions.push_back(cricket::RtpHeaderExtension( 1159 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1158 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); 1160 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId));
1159 extensions.push_back(cricket::RtpHeaderExtension( 1161 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1160 kRtpTimestampOffsetHeaderExtension, kTOffsetId)); 1162 kRtpTimestampOffsetHeaderExtension, kTOffsetId));
1161 extensions.push_back(cricket::RtpHeaderExtension( 1163 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1162 kRtpVideoRotationHeaderExtension, kVideoRotationId)); 1164 kRtpVideoRotationHeaderExtension, kVideoRotationId));
1163 1165
1164 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 1166 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1165 FakeVideoSendStream* send_stream = 1167 FakeVideoSendStream* send_stream =
1166 AddSendStream(cricket::StreamParams::CreateLegacy(123)); 1168 AddSendStream(cricket::StreamParams::CreateLegacy(123));
1167 1169
1168 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); 1170 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams());
1169 ASSERT_EQ(3u, send_stream->GetConfig().rtp.extensions.size()); 1171 ASSERT_EQ(3u, send_stream->GetConfig().rtp.extensions.size());
1170 1172
1171 // Setting the same extensions (even if in different order) shouldn't 1173 // Setting the same extensions (even if in different order) shouldn't
1172 // reallocate the stream. 1174 // reallocate the stream.
1173 std::reverse(extensions.begin(), extensions.end()); 1175 std::reverse(parameters.extensions.begin(), parameters.extensions.end());
1174 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 1176 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1175 1177
1176 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); 1178 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams());
1177 1179
1178 // Setting different extensions should recreate the stream. 1180 // Setting different extensions should recreate the stream.
1179 extensions.resize(1); 1181 parameters.extensions.resize(1);
1180 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 1182 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1181 1183
1182 EXPECT_EQ(2, fake_call_->GetNumCreatedSendStreams()); 1184 EXPECT_EQ(2, fake_call_->GetNumCreatedSendStreams());
1183 } 1185 }
1184 1186
1185 TEST_F(WebRtcVideoChannel2Test, IdenticalRecvExtensionsDoesntRecreateStream) { 1187 TEST_F(WebRtcVideoChannel2Test, IdenticalRecvExtensionsDoesntRecreateStream) {
1186 const int kTOffsetId = 1; 1188 const int kTOffsetId = 1;
1187 const int kAbsSendTimeId = 2; 1189 const int kAbsSendTimeId = 2;
1188 const int kVideoRotationId = 3; 1190 const int kVideoRotationId = 3;
1189 std::vector<cricket::RtpHeaderExtension> extensions; 1191 cricket::VideoRecvParameters parameters;
1190 extensions.push_back(cricket::RtpHeaderExtension( 1192 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1191 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); 1193 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId));
1192 extensions.push_back(cricket::RtpHeaderExtension( 1194 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1193 kRtpTimestampOffsetHeaderExtension, kTOffsetId)); 1195 kRtpTimestampOffsetHeaderExtension, kTOffsetId));
1194 extensions.push_back(cricket::RtpHeaderExtension( 1196 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1195 kRtpVideoRotationHeaderExtension, kVideoRotationId)); 1197 kRtpVideoRotationHeaderExtension, kVideoRotationId));
1196 1198
1197 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 1199 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1198 FakeVideoReceiveStream* recv_stream = 1200 FakeVideoReceiveStream* recv_stream =
1199 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); 1201 AddRecvStream(cricket::StreamParams::CreateLegacy(123));
1200 1202
1201 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); 1203 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams());
1202 ASSERT_EQ(3u, recv_stream->GetConfig().rtp.extensions.size()); 1204 ASSERT_EQ(3u, recv_stream->GetConfig().rtp.extensions.size());
1203 1205
1204 // Setting the same extensions (even if in different order) shouldn't 1206 // Setting the same extensions (even if in different order) shouldn't
1205 // reallocate the stream. 1207 // reallocate the stream.
1206 std::reverse(extensions.begin(), extensions.end()); 1208 std::reverse(parameters.extensions.begin(), parameters.extensions.end());
1207 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 1209 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1208 1210
1209 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); 1211 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams());
1210 1212
1211 // Setting different extensions should recreate the stream. 1213 // Setting different extensions should recreate the stream.
1212 extensions.resize(1); 1214 parameters.extensions.resize(1);
1213 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 1215 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1214 1216
1215 EXPECT_EQ(2, fake_call_->GetNumCreatedReceiveStreams()); 1217 EXPECT_EQ(2, fake_call_->GetNumCreatedReceiveStreams());
1216 } 1218 }
1217 1219
1218 TEST_F(WebRtcVideoChannel2Test, 1220 TEST_F(WebRtcVideoChannel2Test,
1219 SetSendRtpHeaderExtensionsExcludeUnsupportedExtensions) { 1221 SetSendRtpHeaderExtensionsExcludeUnsupportedExtensions) {
1220 const int kUnsupportedId = 1; 1222 const int kUnsupportedId = 1;
1221 const int kTOffsetId = 2; 1223 const int kTOffsetId = 2;
1222 1224
1223 std::vector<cricket::RtpHeaderExtension> extensions; 1225 cricket::VideoSendParameters parameters;
1224 extensions.push_back( 1226 parameters.extensions.push_back(
1225 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); 1227 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId));
1226 extensions.push_back( 1228 parameters.extensions.push_back(
1227 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); 1229 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId));
1228 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); 1230 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1229 FakeVideoSendStream* send_stream = 1231 FakeVideoSendStream* send_stream =
1230 AddSendStream(cricket::StreamParams::CreateLegacy(123)); 1232 AddSendStream(cricket::StreamParams::CreateLegacy(123));
1231 1233
1232 // Only timestamp offset extension is set to send stream, 1234 // Only timestamp offset extension is set to send stream,
1233 // unsupported rtp extension is ignored. 1235 // unsupported rtp extension is ignored.
1234 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); 1236 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size());
1235 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, 1237 EXPECT_STREQ(webrtc::RtpExtension::kTOffset,
1236 send_stream->GetConfig().rtp.extensions[0].name.c_str()); 1238 send_stream->GetConfig().rtp.extensions[0].name.c_str());
1237 } 1239 }
1238 1240
1239 TEST_F(WebRtcVideoChannel2Test, 1241 TEST_F(WebRtcVideoChannel2Test,
1240 SetRecvRtpHeaderExtensionsExcludeUnsupportedExtensions) { 1242 SetRecvRtpHeaderExtensionsExcludeUnsupportedExtensions) {
1241 const int kUnsupportedId = 1; 1243 const int kUnsupportedId = 1;
1242 const int kTOffsetId = 2; 1244 const int kTOffsetId = 2;
1243 1245
1244 std::vector<cricket::RtpHeaderExtension> extensions; 1246 cricket::VideoRecvParameters parameters;
1245 extensions.push_back( 1247 parameters.extensions.push_back(
1246 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); 1248 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId));
1247 extensions.push_back( 1249 parameters.extensions.push_back(
1248 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); 1250 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId));
1249 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); 1251 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1250 FakeVideoReceiveStream* recv_stream = 1252 FakeVideoReceiveStream* recv_stream =
1251 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); 1253 AddRecvStream(cricket::StreamParams::CreateLegacy(123));
1252 1254
1253 // Only timestamp offset extension is set to receive stream, 1255 // Only timestamp offset extension is set to receive stream,
1254 // unsupported rtp extension is ignored. 1256 // unsupported rtp extension is ignored.
1255 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); 1257 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size());
1256 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, 1258 EXPECT_STREQ(webrtc::RtpExtension::kTOffset,
1257 recv_stream->GetConfig().rtp.extensions[0].name.c_str()); 1259 recv_stream->GetConfig().rtp.extensions[0].name.c_str());
1258 } 1260 }
1259 1261
1260 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) { 1262 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) {
1261 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; 1263 const int kIncorrectIds[] = {-2, -1, 0, 15, 16};
1262 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { 1264 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) {
1263 std::vector<cricket::RtpHeaderExtension> extensions; 1265 cricket::VideoSendParameters parameters;
1264 extensions.push_back(cricket::RtpHeaderExtension( 1266 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1265 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); 1267 webrtc::RtpExtension::kTOffset, kIncorrectIds[i]));
1266 EXPECT_FALSE(channel_->SetSendRtpHeaderExtensions(extensions)) 1268 EXPECT_FALSE(channel_->SetSendParameters(parameters))
1267 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; 1269 << "Bad extension id '" << kIncorrectIds[i] << "' accepted.";
1268 } 1270 }
1269 } 1271 }
1270 1272
1271 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) { 1273 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) {
1272 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; 1274 const int kIncorrectIds[] = {-2, -1, 0, 15, 16};
1273 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { 1275 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) {
1274 std::vector<cricket::RtpHeaderExtension> extensions; 1276 cricket::VideoRecvParameters parameters;
1275 extensions.push_back(cricket::RtpHeaderExtension( 1277 parameters.extensions.push_back(cricket::RtpHeaderExtension(
1276 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); 1278 webrtc::RtpExtension::kTOffset, kIncorrectIds[i]));
1277 EXPECT_FALSE(channel_->SetRecvRtpHeaderExtensions(extensions)) 1279 EXPECT_FALSE(channel_->SetRecvParameters(parameters))
1278 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; 1280 << "Bad extension id '" << kIncorrectIds[i] << "' accepted.";
1279 } 1281 }
1280 } 1282 }
1281 1283
1282 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) { 1284 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) {
1283 const int id = 1; 1285 const int id = 1;
1284 std::vector<cricket::RtpHeaderExtension> extensions; 1286 cricket::VideoSendParameters parameters;
1285 extensions.push_back( 1287 parameters.extensions.push_back(
1286 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); 1288 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
1287 extensions.push_back( 1289 parameters.extensions.push_back(
1288 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); 1290 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id));
1289 EXPECT_FALSE(channel_->SetSendRtpHeaderExtensions(extensions)); 1291 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1290 1292
1291 // Duplicate entries are also not supported. 1293 // Duplicate entries are also not supported.
1292 extensions.clear(); 1294 parameters.extensions.clear();
1293 extensions.push_back( 1295 parameters.extensions.push_back(
1294 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); 1296 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
1295 extensions.push_back(extensions.back()); 1297 parameters.extensions.push_back(parameters.extensions.back());
1296 EXPECT_FALSE(channel_->SetSendRtpHeaderExtensions(extensions)); 1298 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1297 } 1299 }
1298 1300
1299 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) { 1301 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) {
1300 const int id = 1; 1302 const int id = 1;
1301 std::vector<cricket::RtpHeaderExtension> extensions; 1303 cricket::VideoRecvParameters parameters;
1302 extensions.push_back( 1304 parameters.extensions.push_back(
1303 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); 1305 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
1304 extensions.push_back( 1306 parameters.extensions.push_back(
1305 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); 1307 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id));
1306 EXPECT_FALSE(channel_->SetRecvRtpHeaderExtensions(extensions)); 1308 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
1307 1309
1308 // Duplicate entries are also not supported. 1310 // Duplicate entries are also not supported.
1309 extensions.clear(); 1311 parameters.extensions.clear();
1310 extensions.push_back( 1312 parameters.extensions.push_back(
1311 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); 1313 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id));
1312 extensions.push_back(extensions.back()); 1314 parameters.extensions.push_back(parameters.extensions.back());
1313 EXPECT_FALSE(channel_->SetRecvRtpHeaderExtensions(extensions)); 1315 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
1314 } 1316 }
1315 1317
1316 TEST_F(WebRtcVideoChannel2Test, DISABLED_LeakyBucketTest) { 1318 TEST_F(WebRtcVideoChannel2Test, DISABLED_LeakyBucketTest) {
1317 FAIL() << "Not implemented."; // TODO(pbos): Implement. 1319 FAIL() << "Not implemented."; // TODO(pbos): Implement.
1318 } 1320 }
1319 1321
1320 TEST_F(WebRtcVideoChannel2Test, DISABLED_BufferedModeLatency) { 1322 TEST_F(WebRtcVideoChannel2Test, DISABLED_BufferedModeLatency) {
1321 FAIL() << "Not implemented."; // TODO(pbos): Implement. 1323 FAIL() << "Not implemented."; // TODO(pbos): Implement.
1322 } 1324 }
1323 1325
(...skipping 14 matching lines...) Expand all
1338 TEST_F(WebRtcVideoChannel2Test, RembIsEnabledByDefault) { 1340 TEST_F(WebRtcVideoChannel2Test, RembIsEnabledByDefault) {
1339 FakeVideoReceiveStream* stream = AddRecvStream(); 1341 FakeVideoReceiveStream* stream = AddRecvStream();
1340 EXPECT_TRUE(stream->GetConfig().rtp.remb); 1342 EXPECT_TRUE(stream->GetConfig().rtp.remb);
1341 } 1343 }
1342 1344
1343 TEST_F(WebRtcVideoChannel2Test, RembCanBeEnabledAndDisabled) { 1345 TEST_F(WebRtcVideoChannel2Test, RembCanBeEnabledAndDisabled) {
1344 FakeVideoReceiveStream* stream = AddRecvStream(); 1346 FakeVideoReceiveStream* stream = AddRecvStream();
1345 EXPECT_TRUE(stream->GetConfig().rtp.remb); 1347 EXPECT_TRUE(stream->GetConfig().rtp.remb);
1346 1348
1347 // Verify that REMB is turned off when send(!) codecs without REMB are set. 1349 // Verify that REMB is turned off when send(!) codecs without REMB are set.
1348 std::vector<VideoCodec> codecs; 1350 cricket::VideoSendParameters parameters;
1349 codecs.push_back(kVp8Codec); 1351 parameters.codecs.push_back(kVp8Codec);
1350 EXPECT_TRUE(codecs[0].feedback_params.params().empty()); 1352 EXPECT_TRUE(parameters.codecs[0].feedback_params.params().empty());
1351 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1353 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1352 stream = fake_call_->GetVideoReceiveStreams()[0]; 1354 stream = fake_call_->GetVideoReceiveStreams()[0];
1353 EXPECT_FALSE(stream->GetConfig().rtp.remb); 1355 EXPECT_FALSE(stream->GetConfig().rtp.remb);
1354 1356
1355 // Verify that REMB is turned on when setting default codecs since the 1357 // Verify that REMB is turned on when setting default codecs since the
1356 // default codecs have REMB enabled. 1358 // default codecs have REMB enabled.
1357 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 1359 parameters.codecs = engine_.codecs();
1360 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1358 stream = fake_call_->GetVideoReceiveStreams()[0]; 1361 stream = fake_call_->GetVideoReceiveStreams()[0];
1359 EXPECT_TRUE(stream->GetConfig().rtp.remb); 1362 EXPECT_TRUE(stream->GetConfig().rtp.remb);
1360 } 1363 }
1361 1364
1362 TEST_F(WebRtcVideoChannel2Test, NackIsEnabledByDefault) { 1365 TEST_F(WebRtcVideoChannel2Test, NackIsEnabledByDefault) {
1363 VerifyCodecHasDefaultFeedbackParams(default_codec_); 1366 VerifyCodecHasDefaultFeedbackParams(default_codec_);
1364 1367
1365 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 1368 cricket::VideoSendParameters parameters;
1369 parameters.codecs = engine_.codecs();
1370 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1366 EXPECT_TRUE(channel_->SetSend(true)); 1371 EXPECT_TRUE(channel_->SetSend(true));
1367 1372
1368 // Send side. 1373 // Send side.
1369 FakeVideoSendStream* send_stream = 1374 FakeVideoSendStream* send_stream =
1370 AddSendStream(cricket::StreamParams::CreateLegacy(1)); 1375 AddSendStream(cricket::StreamParams::CreateLegacy(1));
1371 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); 1376 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0);
1372 1377
1373 // Receiver side. 1378 // Receiver side.
1374 FakeVideoReceiveStream* recv_stream = 1379 FakeVideoReceiveStream* recv_stream =
1375 AddRecvStream(cricket::StreamParams::CreateLegacy(1)); 1380 AddRecvStream(cricket::StreamParams::CreateLegacy(1));
1376 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); 1381 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0);
1377 1382
1378 // Nack history size should match between sender and receiver. 1383 // Nack history size should match between sender and receiver.
1379 EXPECT_EQ(send_stream->GetConfig().rtp.nack.rtp_history_ms, 1384 EXPECT_EQ(send_stream->GetConfig().rtp.nack.rtp_history_ms,
1380 recv_stream->GetConfig().rtp.nack.rtp_history_ms); 1385 recv_stream->GetConfig().rtp.nack.rtp_history_ms);
1381 } 1386 }
1382 1387
1383 TEST_F(WebRtcVideoChannel2Test, NackCanBeEnabledAndDisabled) { 1388 TEST_F(WebRtcVideoChannel2Test, NackCanBeEnabledAndDisabled) {
1384 FakeVideoSendStream* send_stream = AddSendStream(); 1389 FakeVideoSendStream* send_stream = AddSendStream();
1385 FakeVideoReceiveStream* recv_stream = AddRecvStream(); 1390 FakeVideoReceiveStream* recv_stream = AddRecvStream();
1386 1391
1387 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); 1392 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0);
1388 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); 1393 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0);
1389 1394
1390 // Verify that NACK is turned off when send(!) codecs without NACK are set. 1395 // Verify that NACK is turned off when send(!) codecs without NACK are set.
1391 std::vector<VideoCodec> codecs; 1396 cricket::VideoSendParameters parameters;
1392 codecs.push_back(kVp8Codec); 1397 parameters.codecs.push_back(kVp8Codec);
1393 EXPECT_TRUE(codecs[0].feedback_params.params().empty()); 1398 EXPECT_TRUE(parameters.codecs[0].feedback_params.params().empty());
1394 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1399 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1395 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; 1400 recv_stream = fake_call_->GetVideoReceiveStreams()[0];
1396 EXPECT_EQ(0, recv_stream->GetConfig().rtp.nack.rtp_history_ms); 1401 EXPECT_EQ(0, recv_stream->GetConfig().rtp.nack.rtp_history_ms);
1397 send_stream = fake_call_->GetVideoSendStreams()[0]; 1402 send_stream = fake_call_->GetVideoSendStreams()[0];
1398 EXPECT_EQ(0, send_stream->GetConfig().rtp.nack.rtp_history_ms); 1403 EXPECT_EQ(0, send_stream->GetConfig().rtp.nack.rtp_history_ms);
1399 1404
1400 // Verify that NACK is turned on when setting default codecs since the 1405 // Verify that NACK is turned on when setting default codecs since the
1401 // default codecs have NACK enabled. 1406 // default codecs have NACK enabled.
1402 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 1407 parameters.codecs = engine_.codecs();
1408 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1403 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; 1409 recv_stream = fake_call_->GetVideoReceiveStreams()[0];
1404 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); 1410 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0);
1405 send_stream = fake_call_->GetVideoSendStreams()[0]; 1411 send_stream = fake_call_->GetVideoSendStreams()[0];
1406 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); 1412 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0);
1407 } 1413 }
1408 1414
1409 TEST_F(WebRtcVideoChannel2Test, DISABLED_VideoProtectionInterop) { 1415 TEST_F(WebRtcVideoChannel2Test, DISABLED_VideoProtectionInterop) {
1410 FAIL() << "Not implemented."; // TODO(pbos): Implement. 1416 FAIL() << "Not implemented."; // TODO(pbos): Implement.
1411 } 1417 }
1412 1418
(...skipping 25 matching lines...) Expand all
1438 FAIL() << "Not implemented."; // TODO(pbos): Implement. 1444 FAIL() << "Not implemented."; // TODO(pbos): Implement.
1439 } 1445 }
1440 1446
1441 TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthInConference) { 1447 TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthInConference) {
1442 FAIL() << "Not implemented."; // TODO(pbos): Implement. 1448 FAIL() << "Not implemented."; // TODO(pbos): Implement.
1443 } 1449 }
1444 1450
1445 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) { 1451 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) {
1446 static const int kScreenshareMinBitrateKbps = 800; 1452 static const int kScreenshareMinBitrateKbps = 800;
1447 cricket::VideoCodec codec = kVp8Codec360p; 1453 cricket::VideoCodec codec = kVp8Codec360p;
1448 std::vector<cricket::VideoCodec> codecs; 1454 cricket::VideoSendParameters parameters;
1449 codecs.push_back(codec); 1455 parameters.codecs.push_back(codec);
1450 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 1456 parameters.options.screencast_min_bitrate.Set(kScreenshareMinBitrateKbps);
1451 VideoOptions options; 1457 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1452 options.screencast_min_bitrate.Set(kScreenshareMinBitrateKbps);
1453 channel_->SetOptions(options);
1454 1458
1455 AddSendStream(); 1459 AddSendStream();
1456 1460
1457 cricket::FakeVideoCapturer capturer; 1461 cricket::FakeVideoCapturer capturer;
1458 capturer.SetScreencast(false); 1462 capturer.SetScreencast(false);
1459 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1463 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1460 cricket::VideoFormat capture_format_hd = 1464 cricket::VideoFormat capture_format_hd =
1461 capturer.GetSupportedFormats()->front(); 1465 capturer.GetSupportedFormats()->front();
1462 EXPECT_EQ(1280, capture_format_hd.width); 1466 EXPECT_EQ(1280, capture_format_hd.width);
1463 EXPECT_EQ(720, capture_format_hd.height); 1467 EXPECT_EQ(720, capture_format_hd.height);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height); 1500 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height);
1497 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty()); 1501 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty());
1498 1502
1499 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1503 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
1500 } 1504 }
1501 1505
1502 TEST_F(WebRtcVideoChannel2Test, 1506 TEST_F(WebRtcVideoChannel2Test,
1503 ConferenceModeScreencastConfiguresTemporalLayer) { 1507 ConferenceModeScreencastConfiguresTemporalLayer) {
1504 static const int kConferenceScreencastTemporalBitrateBps = 1508 static const int kConferenceScreencastTemporalBitrateBps =
1505 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000; 1509 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000;
1506 VideoOptions options; 1510 cricket::VideoSendParameters parameters;
1507 options.conference_mode.Set(true); 1511 parameters.options.conference_mode.Set(true);
1508 channel_->SetOptions(options); 1512 channel_->SetSendParameters(parameters);
1509 1513
1510 AddSendStream(); 1514 AddSendStream();
1511 1515
1512 cricket::FakeVideoCapturer capturer; 1516 cricket::FakeVideoCapturer capturer;
1513 capturer.SetScreencast(true); 1517 capturer.SetScreencast(true);
1514 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1518 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1515 cricket::VideoFormat capture_format_hd = 1519 cricket::VideoFormat capture_format_hd =
1516 capturer.GetSupportedFormats()->front(); 1520 capturer.GetSupportedFormats()->front();
1517 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 1521 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
1518 1522
(...skipping 24 matching lines...) Expand all
1543 TEST_F(WebRtcVideoChannel2Test, 1547 TEST_F(WebRtcVideoChannel2Test,
1544 DISABLED_SetSendSsrcAfterCreatingReceiveChannel) { 1548 DISABLED_SetSendSsrcAfterCreatingReceiveChannel) {
1545 FAIL() << "Not implemented."; // TODO(pbos): Implement. 1549 FAIL() << "Not implemented."; // TODO(pbos): Implement.
1546 } 1550 }
1547 1551
1548 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) { 1552 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) {
1549 FakeVideoSendStream* stream = AddSendStream(); 1553 FakeVideoSendStream* stream = AddSendStream();
1550 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); 1554 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate);
1551 } 1555 }
1552 1556
1557
1558
1559
1553 TEST_F(WebRtcVideoChannel2Test, SetOptionsWithSuspendBelowMinBitrate) { 1560 TEST_F(WebRtcVideoChannel2Test, SetOptionsWithSuspendBelowMinBitrate) {
1554 VideoOptions options; 1561 cricket::VideoSendParameters parameters;
1555 options.suspend_below_min_bitrate.Set(true); 1562 parameters.options.suspend_below_min_bitrate.Set(true);
1556 channel_->SetOptions(options); 1563 channel_->SetSendParameters(parameters);
1557 1564
1558 FakeVideoSendStream* stream = AddSendStream(); 1565 FakeVideoSendStream* stream = AddSendStream();
1559 EXPECT_TRUE(stream->GetConfig().suspend_below_min_bitrate); 1566 EXPECT_TRUE(stream->GetConfig().suspend_below_min_bitrate);
1560 1567
1561 options.suspend_below_min_bitrate.Set(false); 1568 parameters.options.suspend_below_min_bitrate.Set(false);
1562 channel_->SetOptions(options); 1569 channel_->SetSendParameters(parameters);
1563 1570
1564 stream = fake_call_->GetVideoSendStreams()[0]; 1571 stream = fake_call_->GetVideoSendStreams()[0];
1565 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); 1572 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate);
1566 } 1573 }
1567 1574
1568 TEST_F(WebRtcVideoChannel2Test, Vp8DenoisingEnabledByDefault) { 1575 TEST_F(WebRtcVideoChannel2Test, Vp8DenoisingEnabledByDefault) {
1569 FakeVideoSendStream* stream = AddSendStream(); 1576 FakeVideoSendStream* stream = AddSendStream();
1570 webrtc::VideoCodecVP8 vp8_settings; 1577 webrtc::VideoCodecVP8 vp8_settings;
1571 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1578 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1572 EXPECT_TRUE(vp8_settings.denoisingOn); 1579 EXPECT_TRUE(vp8_settings.denoisingOn);
1573 } 1580 }
1574 1581
1575 TEST_F(WebRtcVideoChannel2Test, VerifyVp8SpecificSettings) { 1582 TEST_F(WebRtcVideoChannel2Test, VerifyVp8SpecificSettings) {
1576 std::vector<cricket::VideoCodec> codecs; 1583 cricket::VideoSendParameters parameters;
1577 codecs.push_back(kVp8Codec720p); 1584 parameters.codecs.push_back(kVp8Codec720p);
1578 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1585 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1579 1586
1580 // Single-stream settings should apply with RTX as well (verifies that we 1587 // Single-stream settings should apply with RTX as well (verifies that we
1581 // check number of regular SSRCs and not StreamParams::ssrcs which contains 1588 // check number of regular SSRCs and not StreamParams::ssrcs which contains
1582 // both RTX and regular SSRCs). 1589 // both RTX and regular SSRCs).
1583 FakeVideoSendStream* stream = SetUpSimulcast(false, true); 1590 FakeVideoSendStream* stream = SetUpSimulcast(false, true);
1584 1591
1585 cricket::FakeVideoCapturer capturer; 1592 cricket::FakeVideoCapturer capturer;
1586 capturer.SetScreencast(false); 1593 capturer.SetScreencast(false);
1587 EXPECT_EQ(cricket::CS_RUNNING, 1594 EXPECT_EQ(cricket::CS_RUNNING,
1588 capturer.Start(capturer.GetSupportedFormats()->front())); 1595 capturer.Start(capturer.GetSupportedFormats()->front()));
1589 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1596 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1590 channel_->SetSend(true); 1597 channel_->SetSend(true);
1591 1598
1592 EXPECT_TRUE(capturer.CaptureFrame()); 1599 EXPECT_TRUE(capturer.CaptureFrame());
1593 1600
1594 stream = SetDenoisingOption(false); 1601 stream = SetDenoisingOption(parameters, false);
1595 1602
1596 webrtc::VideoCodecVP8 vp8_settings; 1603 webrtc::VideoCodecVP8 vp8_settings;
1597 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1604 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1598 EXPECT_FALSE(vp8_settings.denoisingOn); 1605 EXPECT_FALSE(vp8_settings.denoisingOn);
1599 EXPECT_TRUE(vp8_settings.automaticResizeOn); 1606 EXPECT_TRUE(vp8_settings.automaticResizeOn);
1600 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1607 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1601 1608
1602 stream = SetDenoisingOption(true); 1609 stream = SetDenoisingOption(parameters, true);
1603 1610
1604 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1611 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1605 EXPECT_TRUE(vp8_settings.denoisingOn); 1612 EXPECT_TRUE(vp8_settings.denoisingOn);
1606 EXPECT_TRUE(vp8_settings.automaticResizeOn); 1613 EXPECT_TRUE(vp8_settings.automaticResizeOn);
1607 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1614 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1608 1615
1609 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1616 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
1610 stream = SetUpSimulcast(true, false); 1617 stream = SetUpSimulcast(true, false);
1611 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1618 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1612 channel_->SetSend(true); 1619 channel_->SetSend(true);
1613 EXPECT_TRUE(capturer.CaptureFrame()); 1620 EXPECT_TRUE(capturer.CaptureFrame());
1614 1621
1615 EXPECT_EQ(3, stream->GetVideoStreams().size()); 1622 EXPECT_EQ(3, stream->GetVideoStreams().size());
1616 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1623 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1617 // Autmatic resize off when using simulcast. 1624 // Autmatic resize off when using simulcast.
1618 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1625 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1619 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1626 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1620 1627
1621 // In screen-share mode, denoising is forced off and simulcast disabled. 1628 // In screen-share mode, denoising is forced off and simulcast disabled.
1622 capturer.SetScreencast(true); 1629 capturer.SetScreencast(true);
1623 EXPECT_TRUE(capturer.CaptureFrame()); 1630 EXPECT_TRUE(capturer.CaptureFrame());
1624 stream = SetDenoisingOption(false); 1631 stream = SetDenoisingOption(parameters, false);
1625 1632
1626 EXPECT_EQ(1, stream->GetVideoStreams().size()); 1633 EXPECT_EQ(1, stream->GetVideoStreams().size());
1627 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1634 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1628 EXPECT_FALSE(vp8_settings.denoisingOn); 1635 EXPECT_FALSE(vp8_settings.denoisingOn);
1629 // Resizing and frame dropping always off for screen sharing. 1636 // Resizing and frame dropping always off for screen sharing.
1630 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1637 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1631 EXPECT_FALSE(vp8_settings.frameDroppingOn); 1638 EXPECT_FALSE(vp8_settings.frameDroppingOn);
1632 1639
1633 stream = SetDenoisingOption(true); 1640 stream = SetDenoisingOption(parameters, true);
1634 1641
1635 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1642 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1636 EXPECT_FALSE(vp8_settings.denoisingOn); 1643 EXPECT_FALSE(vp8_settings.denoisingOn);
1637 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1644 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1638 EXPECT_FALSE(vp8_settings.frameDroppingOn); 1645 EXPECT_FALSE(vp8_settings.frameDroppingOn);
1639 1646
1640 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1647 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
1641 } 1648 }
1642 1649
1643 class Vp9SettingsTest : public WebRtcVideoChannel2Test { 1650 class Vp9SettingsTest : public WebRtcVideoChannel2Test {
1644 public: 1651 public:
1645 Vp9SettingsTest() : WebRtcVideoChannel2Test() { 1652 Vp9SettingsTest() : WebRtcVideoChannel2Test() {
1646 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); 1653 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9");
1647 } 1654 }
1648 virtual ~Vp9SettingsTest() {} 1655 virtual ~Vp9SettingsTest() {}
1649 1656
1650 protected: 1657 protected:
1651 void SetUp() override { 1658 void SetUp() override {
1652 engine_.SetExternalEncoderFactory(&encoder_factory_); 1659 engine_.SetExternalEncoderFactory(&encoder_factory_);
1653 1660
1654 WebRtcVideoChannel2Test::SetUp(); 1661 WebRtcVideoChannel2Test::SetUp();
1655 } 1662 }
1656 1663
1657 void TearDown() override { 1664 void TearDown() override {
1658 // Remove references to encoder_factory_ since this will be destroyed 1665 // Remove references to encoder_factory_ since this will be destroyed
1659 // before channel_ and engine_. 1666 // before channel_ and engine_.
1660 ASSERT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 1667 cricket::VideoSendParameters parameters;
1668 parameters.codecs = engine_.codecs();
1669 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1661 } 1670 }
1662 1671
1663 cricket::FakeWebRtcVideoEncoderFactory encoder_factory_; 1672 cricket::FakeWebRtcVideoEncoderFactory encoder_factory_;
1664 }; 1673 };
1665 1674
1666 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { 1675 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) {
1667 std::vector<cricket::VideoCodec> codecs; 1676 cricket::VideoSendParameters parameters;
1668 codecs.push_back(kVp9Codec); 1677 parameters.codecs.push_back(kVp9Codec);
1669 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1678 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1670 1679
1671 FakeVideoSendStream* stream = SetUpSimulcast(false, false); 1680 FakeVideoSendStream* stream = SetUpSimulcast(false, false);
1672 1681
1673 cricket::FakeVideoCapturer capturer; 1682 cricket::FakeVideoCapturer capturer;
1674 capturer.SetScreencast(false); 1683 capturer.SetScreencast(false);
1675 EXPECT_EQ(cricket::CS_RUNNING, 1684 EXPECT_EQ(cricket::CS_RUNNING,
1676 capturer.Start(capturer.GetSupportedFormats()->front())); 1685 capturer.Start(capturer.GetSupportedFormats()->front()));
1677 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1686 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1678 channel_->SetSend(true); 1687 channel_->SetSend(true);
1679 1688
1680 EXPECT_TRUE(capturer.CaptureFrame()); 1689 EXPECT_TRUE(capturer.CaptureFrame());
1681 1690
1682 stream = SetDenoisingOption(false); 1691 stream = SetDenoisingOption(parameters, false);
1683 1692
1684 webrtc::VideoCodecVP9 vp9_settings; 1693 webrtc::VideoCodecVP9 vp9_settings;
1685 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1694 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1686 EXPECT_FALSE(vp9_settings.denoisingOn); 1695 EXPECT_FALSE(vp9_settings.denoisingOn);
1687 // Frame dropping always on for real time video. 1696 // Frame dropping always on for real time video.
1688 EXPECT_TRUE(vp9_settings.frameDroppingOn); 1697 EXPECT_TRUE(vp9_settings.frameDroppingOn);
1689 1698
1690 stream = SetDenoisingOption(true); 1699 stream = SetDenoisingOption(parameters, true);
1691 1700
1692 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1701 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1693 EXPECT_TRUE(vp9_settings.denoisingOn); 1702 EXPECT_TRUE(vp9_settings.denoisingOn);
1694 EXPECT_TRUE(vp9_settings.frameDroppingOn); 1703 EXPECT_TRUE(vp9_settings.frameDroppingOn);
1695 1704
1696 // In screen-share mode, denoising is forced off. 1705 // In screen-share mode, denoising is forced off.
1697 capturer.SetScreencast(true); 1706 capturer.SetScreencast(true);
1698 EXPECT_TRUE(capturer.CaptureFrame()); 1707 EXPECT_TRUE(capturer.CaptureFrame());
1699 stream = SetDenoisingOption(false); 1708 stream = SetDenoisingOption(parameters, false);
1700 1709
1701 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1710 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1702 EXPECT_FALSE(vp9_settings.denoisingOn); 1711 EXPECT_FALSE(vp9_settings.denoisingOn);
1703 // Frame dropping always off for screen sharing. 1712 // Frame dropping always off for screen sharing.
1704 EXPECT_FALSE(vp9_settings.frameDroppingOn); 1713 EXPECT_FALSE(vp9_settings.frameDroppingOn);
1705 1714
1706 stream = SetDenoisingOption(false); 1715 stream = SetDenoisingOption(parameters, false);
1707 1716
1708 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1717 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1709 EXPECT_FALSE(vp9_settings.denoisingOn); 1718 EXPECT_FALSE(vp9_settings.denoisingOn);
1710 EXPECT_FALSE(vp9_settings.frameDroppingOn); 1719 EXPECT_FALSE(vp9_settings.frameDroppingOn);
1711 1720
1712 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1721 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
1713 } 1722 }
1714 1723
1715 TEST_F(WebRtcVideoChannel2Test, DISABLED_MultipleSendStreamsWithOneCapturer) { 1724 TEST_F(WebRtcVideoChannel2Test, DISABLED_MultipleSendStreamsWithOneCapturer) {
1716 FAIL() << "Not implemented."; // TODO(pbos): Implement. 1725 FAIL() << "Not implemented."; // TODO(pbos): Implement.
(...skipping 11 matching lines...) Expand all
1728 TestCpuAdaptation(false, false); 1737 TestCpuAdaptation(false, false);
1729 } 1738 }
1730 1739
1731 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenScreensharing) { 1740 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenScreensharing) {
1732 TestCpuAdaptation(true, true); 1741 TestCpuAdaptation(true, true);
1733 } 1742 }
1734 1743
1735 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, 1744 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse,
1736 bool is_screenshare) { 1745 bool is_screenshare) {
1737 cricket::VideoCodec codec = kVp8Codec720p; 1746 cricket::VideoCodec codec = kVp8Codec720p;
1738 std::vector<cricket::VideoCodec> codecs; 1747 cricket::VideoSendParameters parameters;
1739 codecs.push_back(codec); 1748 parameters.codecs.push_back(codec);
1740 EXPECT_TRUE(channel_->SetSendCodecs(codecs));
1741
1742 if (!enable_overuse) { 1749 if (!enable_overuse) {
1743 VideoOptions options; 1750 parameters.options.cpu_overuse_detection.Set(false);
1744 options.cpu_overuse_detection.Set(false);
1745 channel_->SetOptions(options);
1746 } 1751 }
1752 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1747 1753
1748 AddSendStream(); 1754 AddSendStream();
1749 1755
1750 cricket::FakeVideoCapturer capturer; 1756 cricket::FakeVideoCapturer capturer;
1751 capturer.SetScreencast(is_screenshare); 1757 capturer.SetScreencast(is_screenshare);
1752 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1758 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1753 EXPECT_EQ(cricket::CS_RUNNING, 1759 EXPECT_EQ(cricket::CS_RUNNING,
1754 capturer.Start(capturer.GetSupportedFormats()->front())); 1760 capturer.Start(capturer.GetSupportedFormats()->front()));
1755 1761
1756 EXPECT_TRUE(channel_->SetSend(true)); 1762 EXPECT_TRUE(channel_->SetSend(true));
(...skipping 27 matching lines...) Expand all
1784 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 1790 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
1785 1791
1786 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1792 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
1787 } 1793 }
1788 1794
1789 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeAndElapsedTimeCorrectly) { 1795 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeAndElapsedTimeCorrectly) {
1790 // Start at last timestamp to verify that wraparounds are estimated correctly. 1796 // Start at last timestamp to verify that wraparounds are estimated correctly.
1791 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu; 1797 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu;
1792 static const int64_t kInitialNtpTimeMs = 1247891230; 1798 static const int64_t kInitialNtpTimeMs = 1247891230;
1793 static const int kFrameOffsetMs = 20; 1799 static const int kFrameOffsetMs = 20;
1794 EXPECT_TRUE(channel_->SetRecvCodecs(engine_.codecs())); 1800 cricket::VideoRecvParameters parameters;
1801 parameters.codecs = engine_.codecs();
1802 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
1795 1803
1796 FakeVideoReceiveStream* stream = AddRecvStream(); 1804 FakeVideoReceiveStream* stream = AddRecvStream();
1797 cricket::FakeVideoRenderer renderer; 1805 cricket::FakeVideoRenderer renderer;
1798 EXPECT_TRUE(channel_->SetRenderer(last_ssrc_, &renderer)); 1806 EXPECT_TRUE(channel_->SetRenderer(last_ssrc_, &renderer));
1799 EXPECT_TRUE(channel_->SetRender(true)); 1807 EXPECT_TRUE(channel_->SetRender(true));
1800 1808
1801 webrtc::VideoFrame video_frame; 1809 webrtc::VideoFrame video_frame;
1802 CreateBlackFrame(&video_frame, 4, 4); 1810 CreateBlackFrame(&video_frame, 4, 4);
1803 video_frame.set_timestamp(kInitialTimestamp); 1811 video_frame.set_timestamp(kInitialTimestamp);
1804 // Initial NTP time is not available on the first frame, but should still be 1812 // Initial NTP time is not available on the first frame, but should still be
(...skipping 15 matching lines...) Expand all
1820 renderer.last_frame_elapsed_time_ns()); 1828 renderer.last_frame_elapsed_time_ns());
1821 1829
1822 // Verify that NTP time has been correctly deduced. 1830 // Verify that NTP time has been correctly deduced.
1823 cricket::VideoMediaInfo info; 1831 cricket::VideoMediaInfo info;
1824 ASSERT_TRUE(channel_->GetStats(&info)); 1832 ASSERT_TRUE(channel_->GetStats(&info));
1825 ASSERT_EQ(1u, info.receivers.size()); 1833 ASSERT_EQ(1u, info.receivers.size());
1826 EXPECT_EQ(kInitialNtpTimeMs, info.receivers[0].capture_start_ntp_time_ms); 1834 EXPECT_EQ(kInitialNtpTimeMs, info.receivers[0].capture_start_ntp_time_ms);
1827 } 1835 }
1828 1836
1829 TEST_F(WebRtcVideoChannel2Test, SetDefaultSendCodecs) { 1837 TEST_F(WebRtcVideoChannel2Test, SetDefaultSendCodecs) {
1830 ASSERT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 1838 cricket::VideoSendParameters parameters;
1839 parameters.codecs = engine_.codecs();
1840 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1831 1841
1832 VideoCodec codec; 1842 VideoCodec codec;
1833 EXPECT_TRUE(channel_->GetSendCodec(&codec)); 1843 EXPECT_TRUE(channel_->GetSendCodec(&codec));
1834 EXPECT_TRUE(codec.Matches(engine_.codecs()[0])); 1844 EXPECT_TRUE(codec.Matches(engine_.codecs()[0]));
1835 1845
1836 // Using a RTX setup to verify that the default RTX payload type is good. 1846 // Using a RTX setup to verify that the default RTX payload type is good.
1837 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); 1847 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1);
1838 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); 1848 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
1839 FakeVideoSendStream* stream = AddSendStream( 1849 FakeVideoSendStream* stream = AddSendStream(
1840 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); 1850 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
1841 webrtc::VideoSendStream::Config config = stream->GetConfig(); 1851 webrtc::VideoSendStream::Config config = stream->GetConfig();
1842 1852
1843 // Make sure NACK and FEC are enabled on the correct payload types. 1853 // Make sure NACK and FEC are enabled on the correct payload types.
1844 EXPECT_EQ(1000, config.rtp.nack.rtp_history_ms); 1854 EXPECT_EQ(1000, config.rtp.nack.rtp_history_ms);
1845 EXPECT_EQ(default_ulpfec_codec_.id, config.rtp.fec.ulpfec_payload_type); 1855 EXPECT_EQ(default_ulpfec_codec_.id, config.rtp.fec.ulpfec_payload_type);
1846 EXPECT_EQ(default_red_codec_.id, config.rtp.fec.red_payload_type); 1856 EXPECT_EQ(default_red_codec_.id, config.rtp.fec.red_payload_type);
1847 1857
1848 EXPECT_EQ(1u, config.rtp.rtx.ssrcs.size()); 1858 EXPECT_EQ(1u, config.rtp.rtx.ssrcs.size());
1849 EXPECT_EQ(kRtxSsrcs1[0], config.rtp.rtx.ssrcs[0]); 1859 EXPECT_EQ(kRtxSsrcs1[0], config.rtp.rtx.ssrcs[0]);
1850 VerifySendStreamHasRtxTypes(config, default_apt_rtx_types_); 1860 VerifySendStreamHasRtxTypes(config, default_apt_rtx_types_);
1851 // TODO(juberti): Check RTCP, PLI, TMMBR. 1861 // TODO(juberti): Check RTCP, PLI, TMMBR.
1852 } 1862 }
1853 1863
1854 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFec) { 1864 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFec) {
1855 std::vector<VideoCodec> codecs; 1865 cricket::VideoSendParameters parameters;
1856 codecs.push_back(kVp8Codec); 1866 parameters.codecs.push_back(kVp8Codec);
1857 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1867 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1858 1868
1859 FakeVideoSendStream* stream = AddSendStream(); 1869 FakeVideoSendStream* stream = AddSendStream();
1860 webrtc::VideoSendStream::Config config = stream->GetConfig(); 1870 webrtc::VideoSendStream::Config config = stream->GetConfig();
1861 1871
1862 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type); 1872 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type);
1863 EXPECT_EQ(-1, config.rtp.fec.red_payload_type); 1873 EXPECT_EQ(-1, config.rtp.fec.red_payload_type);
1864 } 1874 }
1865 1875
1866 TEST_F(WebRtcVideoChannel2Test, 1876 TEST_F(WebRtcVideoChannel2Test,
1867 SetSendCodecRejectsRtxWithoutAssociatedPayloadType) { 1877 SetSendCodecRejectsRtxWithoutAssociatedPayloadType) {
1868 std::vector<VideoCodec> codecs; 1878 cricket::VideoSendParameters parameters;
1869 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0); 1879 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0);
1870 codecs.push_back(rtx_codec); 1880 parameters.codecs.push_back(rtx_codec);
1871 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) 1881 EXPECT_FALSE(channel_->SetSendParameters(parameters))
1872 << "RTX codec without associated payload type should be rejected."; 1882 << "RTX codec without associated payload type should be rejected.";
1873 } 1883 }
1874 1884
1875 TEST_F(WebRtcVideoChannel2Test, 1885 TEST_F(WebRtcVideoChannel2Test,
1876 SetSendCodecRejectsRtxWithoutMatchingVideoCodec) { 1886 SetSendCodecRejectsRtxWithoutMatchingVideoCodec) {
1877 std::vector<VideoCodec> codecs; 1887 cricket::VideoSendParameters parameters;
1878 cricket::VideoCodec rtx_codec = 1888 cricket::VideoCodec rtx_codec =
1879 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id); 1889 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id);
1880 codecs.push_back(kVp8Codec); 1890 parameters.codecs.push_back(kVp8Codec);
1881 codecs.push_back(rtx_codec); 1891 parameters.codecs.push_back(rtx_codec);
1882 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1892 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1883 1893
1884 cricket::VideoCodec rtx_codec2 = 1894 cricket::VideoCodec rtx_codec2 =
1885 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id + 1); 1895 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id + 1);
1886 codecs.pop_back(); 1896 parameters.codecs.pop_back();
1887 codecs.push_back(rtx_codec2); 1897 parameters.codecs.push_back(rtx_codec2);
1888 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) 1898 EXPECT_FALSE(channel_->SetSendParameters(parameters))
1889 << "RTX without matching video codec should be rejected."; 1899 << "RTX without matching video codec should be rejected.";
1890 } 1900 }
1891 1901
1892 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { 1902 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) {
1893 std::vector<VideoCodec> codecs; 1903 cricket::VideoSendParameters parameters;
1894 codecs.push_back(kVp8Codec); 1904 parameters.codecs.push_back(kVp8Codec);
1895 codecs.push_back(kUlpfecCodec); 1905 parameters.codecs.push_back(kUlpfecCodec);
1896 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1906 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1897 1907
1898 FakeVideoSendStream* stream = AddSendStream(); 1908 FakeVideoSendStream* stream = AddSendStream();
1899 webrtc::VideoSendStream::Config config = stream->GetConfig(); 1909 webrtc::VideoSendStream::Config config = stream->GetConfig();
1900 1910
1901 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type); 1911 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type);
1902 1912
1903 codecs.pop_back(); 1913 parameters.codecs.pop_back();
1904 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1914 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1905 stream = fake_call_->GetVideoSendStreams()[0]; 1915 stream = fake_call_->GetVideoSendStreams()[0];
1906 ASSERT_TRUE(stream != NULL); 1916 ASSERT_TRUE(stream != NULL);
1907 config = stream->GetConfig(); 1917 config = stream->GetConfig();
1908 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) 1918 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type)
1909 << "SetSendCodec without FEC should disable current FEC."; 1919 << "SetSendCodec without FEC should disable current FEC.";
1910 } 1920 }
1911 1921
1912 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { 1922 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) {
1913 std::vector<VideoCodec> codecs; 1923 cricket::VideoSendParameters parameters;
1914 codecs.push_back(kVp8Codec720p); 1924 parameters.codecs.push_back(kVp8Codec720p);
1915 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1925 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1916 channel_->SetSend(true); 1926 channel_->SetSend(true);
1917 1927
1918 FakeVideoSendStream* stream = AddSendStream(); 1928 FakeVideoSendStream* stream = AddSendStream();
1919 1929
1920 cricket::FakeVideoCapturer capturer; 1930 cricket::FakeVideoCapturer capturer;
1921 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1931 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1922 EXPECT_EQ(cricket::CS_RUNNING, 1932 EXPECT_EQ(cricket::CS_RUNNING,
1923 capturer.Start(capturer.GetSupportedFormats()->front())); 1933 capturer.Start(capturer.GetSupportedFormats()->front()));
1924 EXPECT_TRUE(capturer.CaptureFrame()); 1934 EXPECT_TRUE(capturer.CaptureFrame());
1925 1935
1926 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 1936 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
1927 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); 1937 EXPECT_EQ(kVp8Codec720p.width, streams[0].width);
1928 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); 1938 EXPECT_EQ(kVp8Codec720p.height, streams[0].height);
1929 1939
1930 codecs.clear(); 1940 parameters.codecs.clear();
1931 codecs.push_back(kVp8Codec360p); 1941 parameters.codecs.push_back(kVp8Codec360p);
1932 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 1942 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1933 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams(); 1943 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams();
1934 EXPECT_EQ(kVp8Codec360p.width, streams[0].width); 1944 EXPECT_EQ(kVp8Codec360p.width, streams[0].width);
1935 EXPECT_EQ(kVp8Codec360p.height, streams[0].height); 1945 EXPECT_EQ(kVp8Codec360p.height, streams[0].height);
1936 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1946 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
1937 } 1947 }
1938 1948
1939 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) { 1949 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) {
1940 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", 1950 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
1941 200000); 1951 200000);
1942 } 1952 }
1943 1953
1944 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) { 1954 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) {
1945 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); 1955 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000);
1946 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams(); 1956 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams();
1947 ASSERT_EQ(1u, streams.size()); 1957 ASSERT_EQ(1u, streams.size());
1948 EXPECT_EQ(10000000, streams[0].max_bitrate_bps); 1958 EXPECT_EQ(10000000, streams[0].max_bitrate_bps);
1949 } 1959 }
1950 1960
1951 TEST_F(WebRtcVideoChannel2Test, 1961 TEST_F(WebRtcVideoChannel2Test,
1952 SetSendCodecsWithoutBitratesUsesCorrectDefaults) { 1962 SetSendCodecsWithoutBitratesUsesCorrectDefaults) {
1953 SetSendCodecsShouldWorkForBitrates( 1963 SetSendCodecsShouldWorkForBitrates(
1954 "", 0, "", -1, "", -1); 1964 "", 0, "", -1, "", -1);
1955 } 1965 }
1956 1966
1957 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsCapsMinAndStartBitrate) { 1967 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsCapsMinAndStartBitrate) {
1958 SetSendCodecsShouldWorkForBitrates("-1", 0, "-100", -1, "", -1); 1968 SetSendCodecsShouldWorkForBitrates("-1", 0, "-100", -1, "", -1);
1959 } 1969 }
1960 1970
1961 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectsMaxLessThanMinBitrate) { 1971 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectsMaxLessThanMinBitrate) {
1962 std::vector<VideoCodec> video_codecs = engine_.codecs(); 1972 cricket::VideoSendParameters parameters;
1963 video_codecs[0].params[kCodecParamMinBitrate] = "300"; 1973 parameters.codecs = engine_.codecs();
1964 video_codecs[0].params[kCodecParamMaxBitrate] = "200"; 1974 parameters.codecs[0].params[kCodecParamMinBitrate] = "300";
1965 EXPECT_FALSE(channel_->SetSendCodecs(video_codecs)); 1975 parameters.codecs[0].params[kCodecParamMaxBitrate] = "200";
1976 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1966 } 1977 }
1967 1978 /* TODO(solenberg): !!!!
1968 TEST_F(WebRtcVideoChannel2Test, 1979 TEST_F(WebRtcVideoChannel2Test,
1969 SetMaxSendBandwidthShouldPreserveOtherBitrates) { 1980 SetMaxSendBandwidthShouldPreserveOtherBitrates) {
1970 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", 1981 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
1971 200000); 1982 200000);
1972 channel_->SetMaxSendBandwidth(300000); 1983 channel_->SetMaxSendBandwidth(300000);
1973 EXPECT_EQ(100000, fake_call_->GetConfig().bitrate_config.min_bitrate_bps) 1984 EXPECT_EQ(100000, fake_call_->GetConfig().bitrate_config.min_bitrate_bps)
1974 << "Setting max bitrate should keep previous min bitrate."; 1985 << "Setting max bitrate should keep previous min bitrate.";
1975 EXPECT_EQ(-1, fake_call_->GetConfig().bitrate_config.start_bitrate_bps) 1986 EXPECT_EQ(-1, fake_call_->GetConfig().bitrate_config.start_bitrate_bps)
1976 << "Setting max bitrate should not reset start bitrate."; 1987 << "Setting max bitrate should not reset start bitrate.";
1977 EXPECT_EQ(300000, fake_call_->GetConfig().bitrate_config.max_bitrate_bps); 1988 EXPECT_EQ(300000, fake_call_->GetConfig().bitrate_config.max_bitrate_bps);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2030 2041
2031 EXPECT_TRUE(channel_->SetMaxSendBandwidth(initial_max_bitrate_bps * 2)); 2042 EXPECT_TRUE(channel_->SetMaxSendBandwidth(initial_max_bitrate_bps * 2));
2032 streams = stream->GetVideoStreams(); 2043 streams = stream->GetVideoStreams();
2033 int increased_max_bitrate_bps = 0; 2044 int increased_max_bitrate_bps = 0;
2034 for (auto& video_stream : streams) 2045 for (auto& video_stream : streams)
2035 increased_max_bitrate_bps += video_stream.max_bitrate_bps; 2046 increased_max_bitrate_bps += video_stream.max_bitrate_bps;
2036 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps); 2047 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps);
2037 2048
2038 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], nullptr)); 2049 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], nullptr));
2039 } 2050 }
2051 */
2040 2052
2041 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) { 2053 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) {
2042 static const char* kMaxQuantization = "21"; 2054 static const char* kMaxQuantization = "21";
2043 std::vector<VideoCodec> codecs; 2055 cricket::VideoSendParameters parameters;
2044 codecs.push_back(kVp8Codec); 2056 parameters.codecs.push_back(kVp8Codec);
2045 codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization; 2057 parameters.codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization;
2046 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2058 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2047 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)), 2059 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)),
2048 AddSendStream()->GetVideoStreams().back().max_qp); 2060 AddSendStream()->GetVideoStreams().back().max_qp);
2049 2061
2050 VideoCodec codec; 2062 VideoCodec codec;
2051 EXPECT_TRUE(channel_->GetSendCodec(&codec)); 2063 EXPECT_TRUE(channel_->GetSendCodec(&codec));
2052 EXPECT_EQ(kMaxQuantization, codec.params[kCodecParamMaxQuantization]); 2064 EXPECT_EQ(kMaxQuantization, codec.params[kCodecParamMaxQuantization]);
2053 } 2065 }
2054 2066
2055 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadDimensions) { 2067 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadDimensions) {
2056 std::vector<cricket::VideoCodec> codecs; 2068 cricket::VideoSendParameters parameters;
2057 codecs.push_back(kVp8Codec); 2069 parameters.codecs.push_back(kVp8Codec);
2058 2070
2059 codecs[0].width = 0; 2071 parameters.codecs[0].width = 0;
2060 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) 2072 EXPECT_FALSE(channel_->SetSendParameters(parameters))
2061 << "Codec set though codec width is zero."; 2073 << "Codec set though codec width is zero.";
2062 2074
2063 codecs[0].width = kVp8Codec.width; 2075 parameters.codecs[0].width = kVp8Codec.width;
2064 codecs[0].height = 0; 2076 parameters.codecs[0].height = 0;
2065 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) 2077 EXPECT_FALSE(channel_->SetSendParameters(parameters))
2066 << "Codec set though codec height is zero."; 2078 << "Codec set though codec height is zero.";
2067 } 2079 }
2068 2080
2069 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadPayloadTypes) { 2081 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadPayloadTypes) {
2070 // TODO(pbos): Should we only allow the dynamic range? 2082 // TODO(pbos): Should we only allow the dynamic range?
2071 static const int kIncorrectPayloads[] = {-2, -1, 128, 129}; 2083 static const int kIncorrectPayloads[] = {-2, -1, 128, 129};
2072 std::vector<cricket::VideoCodec> codecs; 2084 cricket::VideoSendParameters parameters;
2073 codecs.push_back(kVp8Codec); 2085 parameters.codecs.push_back(kVp8Codec);
2074 for (size_t i = 0; i < arraysize(kIncorrectPayloads); ++i) { 2086 for (size_t i = 0; i < arraysize(kIncorrectPayloads); ++i) {
2075 codecs[0].id = kIncorrectPayloads[i]; 2087 parameters.codecs[0].id = kIncorrectPayloads[i];
2076 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) 2088 EXPECT_FALSE(channel_->SetSendParameters(parameters))
2077 << "Bad payload type '" << kIncorrectPayloads[i] << "' accepted."; 2089 << "Bad payload type '" << kIncorrectPayloads[i] << "' accepted.";
2078 } 2090 }
2079 } 2091 }
2080 2092
2081 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsAcceptAllValidPayloadTypes) { 2093 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsAcceptAllValidPayloadTypes) {
2082 std::vector<cricket::VideoCodec> codecs; 2094 cricket::VideoSendParameters parameters;
2083 codecs.push_back(kVp8Codec); 2095 parameters.codecs.push_back(kVp8Codec);
2084 for (int payload_type = 0; payload_type <= 127; ++payload_type) { 2096 for (int payload_type = 0; payload_type <= 127; ++payload_type) {
2085 codecs[0].id = payload_type; 2097 parameters.codecs[0].id = payload_type;
2086 EXPECT_TRUE(channel_->SetSendCodecs(codecs)) 2098 EXPECT_TRUE(channel_->SetSendParameters(parameters))
2087 << "Payload type '" << payload_type << "' rejected."; 2099 << "Payload type '" << payload_type << "' rejected.";
2088 } 2100 }
2089 } 2101 }
2090 2102
2091 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithOnlyVp8) { 2103 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithOnlyVp8) {
2092 std::vector<cricket::VideoCodec> codecs; 2104 cricket::VideoRecvParameters parameters;
2093 codecs.push_back(kVp8Codec); 2105 parameters.codecs.push_back(kVp8Codec);
2094 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2106 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2095 } 2107 }
2096 2108
2097 // Test that we set our inbound RTX codecs properly. 2109 // Test that we set our inbound RTX codecs properly.
2098 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithRtx) { 2110 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithRtx) {
2099 std::vector<cricket::VideoCodec> codecs; 2111 cricket::VideoRecvParameters parameters;
2100 codecs.push_back(kVp8Codec); 2112 parameters.codecs.push_back(kVp8Codec);
2101 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0); 2113 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0);
2102 codecs.push_back(rtx_codec); 2114 parameters.codecs.push_back(rtx_codec);
2103 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)) 2115 EXPECT_FALSE(channel_->SetRecvParameters(parameters))
2104 << "RTX codec without associated payload should be rejected."; 2116 << "RTX codec without associated payload should be rejected.";
2105 2117
2106 codecs[1].SetParam("apt", kVp8Codec.id + 1); 2118 parameters.codecs[1].SetParam("apt", kVp8Codec.id + 1);
2107 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)) 2119 EXPECT_FALSE(channel_->SetRecvParameters(parameters))
2108 << "RTX codec with invalid associated payload type should be rejected."; 2120 << "RTX codec with invalid associated payload type should be rejected.";
2109 2121
2110 codecs[1].SetParam("apt", kVp8Codec.id); 2122 parameters.codecs[1].SetParam("apt", kVp8Codec.id);
2111 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2123 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2112 2124
2113 cricket::VideoCodec rtx_codec2(97, "rtx", 0, 0, 0, 0); 2125 cricket::VideoCodec rtx_codec2(97, "rtx", 0, 0, 0, 0);
2114 rtx_codec2.SetParam("apt", rtx_codec.id); 2126 rtx_codec2.SetParam("apt", rtx_codec.id);
2115 codecs.push_back(rtx_codec2); 2127 parameters.codecs.push_back(rtx_codec2);
2116 2128
2117 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)) << "RTX codec with another RTX " 2129 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) <<
2118 "as associated payload type " 2130 "RTX codec with another RTX as associated payload type should be "
2119 "should be rejected."; 2131 "rejected.";
2120 } 2132 }
2121 2133
2122 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) { 2134 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) {
2123 std::vector<cricket::VideoCodec> codecs; 2135 cricket::VideoRecvParameters parameters;
2124 codecs.push_back(kVp8Codec); 2136 parameters.codecs.push_back(kVp8Codec);
2125 codecs[0].id = 99; 2137 parameters.codecs[0].id = 99;
2126 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2138 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2127 } 2139 }
2128 2140
2129 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) { 2141 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) {
2130 EXPECT_TRUE(channel_->SetRecvCodecs(engine_.codecs())); 2142 cricket::VideoRecvParameters parameters;
2143 parameters.codecs = engine_.codecs();
2144 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2131 2145
2132 FakeVideoReceiveStream* stream = AddRecvStream(); 2146 FakeVideoReceiveStream* stream = AddRecvStream();
2133 webrtc::VideoReceiveStream::Config config = stream->GetConfig(); 2147 webrtc::VideoReceiveStream::Config config = stream->GetConfig();
2134 EXPECT_EQ(engine_.codecs()[0].name, config.decoders[0].payload_name); 2148 EXPECT_EQ(engine_.codecs()[0].name, config.decoders[0].payload_name);
2135 EXPECT_EQ(engine_.codecs()[0].id, config.decoders[0].payload_type); 2149 EXPECT_EQ(engine_.codecs()[0].id, config.decoders[0].payload_type);
2136 } 2150 }
2137 2151
2138 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectUnsupportedCodec) { 2152 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectUnsupportedCodec) {
2139 std::vector<VideoCodec> codecs; 2153 cricket::VideoRecvParameters parameters;
2140 codecs.push_back(kVp8Codec); 2154 parameters.codecs.push_back(kVp8Codec);
2141 codecs.push_back(VideoCodec(101, "WTF3", 640, 400, 30, 0)); 2155 parameters.codecs.push_back(VideoCodec(101, "WTF3", 640, 400, 30, 0));
2142 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); 2156 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
2143 } 2157 }
2144 2158
2145 // TODO(pbos): Enable VP9 through external codec support 2159 // TODO(pbos): Enable VP9 through external codec support
2146 TEST_F(WebRtcVideoChannel2Test, 2160 TEST_F(WebRtcVideoChannel2Test,
2147 DISABLED_SetRecvCodecsAcceptsMultipleVideoCodecs) { 2161 DISABLED_SetRecvCodecsAcceptsMultipleVideoCodecs) {
2148 std::vector<VideoCodec> codecs; 2162 cricket::VideoRecvParameters parameters;
2149 codecs.push_back(kVp8Codec); 2163 parameters.codecs.push_back(kVp8Codec);
2150 codecs.push_back(kVp9Codec); 2164 parameters.codecs.push_back(kVp9Codec);
2151 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2165 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2152 } 2166 }
2153 2167
2154 TEST_F(WebRtcVideoChannel2Test, 2168 TEST_F(WebRtcVideoChannel2Test,
2155 DISABLED_SetRecvCodecsSetsFecForAllVideoCodecs) { 2169 DISABLED_SetRecvCodecsSetsFecForAllVideoCodecs) {
2156 std::vector<VideoCodec> codecs; 2170 cricket::VideoRecvParameters parameters;
2157 codecs.push_back(kVp8Codec); 2171 parameters.codecs.push_back(kVp8Codec);
2158 codecs.push_back(kVp9Codec); 2172 parameters.codecs.push_back(kVp9Codec);
2159 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2173 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2160 FAIL(); // TODO(pbos): Verify that the FEC parameters are set for all codecs. 2174 FAIL(); // TODO(pbos): Verify that the FEC parameters are set for all codecs.
2161 } 2175 }
2162 2176
2163 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithoutFecDisablesFec) { 2177 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithoutFecDisablesFec) {
2164 std::vector<VideoCodec> codecs; 2178 cricket::VideoSendParameters send_parameters;
2165 codecs.push_back(kVp8Codec); 2179 send_parameters.codecs.push_back(kVp8Codec);
2166 codecs.push_back(kUlpfecCodec); 2180 send_parameters.codecs.push_back(kUlpfecCodec);
2167 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); 2181 ASSERT_TRUE(channel_->SetSendParameters(send_parameters));
2168 2182
2169 FakeVideoReceiveStream* stream = AddRecvStream(); 2183 FakeVideoReceiveStream* stream = AddRecvStream();
2170 webrtc::VideoReceiveStream::Config config = stream->GetConfig(); 2184 webrtc::VideoReceiveStream::Config config = stream->GetConfig();
2171 2185
2172 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type); 2186 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type);
2173 2187
2174 codecs.pop_back(); 2188 cricket::VideoRecvParameters recv_parameters;
2175 ASSERT_TRUE(channel_->SetRecvCodecs(codecs)); 2189 recv_parameters.codecs.push_back(kVp8Codec);
2190 ASSERT_TRUE(channel_->SetRecvParameters(recv_parameters));
2176 stream = fake_call_->GetVideoReceiveStreams()[0]; 2191 stream = fake_call_->GetVideoReceiveStreams()[0];
2177 ASSERT_TRUE(stream != NULL); 2192 ASSERT_TRUE(stream != NULL);
2178 config = stream->GetConfig(); 2193 config = stream->GetConfig();
2179 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) 2194 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type)
2180 << "SetSendCodec without FEC should disable current FEC."; 2195 << "SetSendCodec without FEC should disable current FEC.";
2181 } 2196 }
2182 2197
2183 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectDuplicateFecPayloads) { 2198 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectDuplicateFecPayloads) {
2184 std::vector<VideoCodec> codecs; 2199 cricket::VideoRecvParameters parameters;
2185 codecs.push_back(kVp8Codec); 2200 parameters.codecs.push_back(kVp8Codec);
2186 codecs.push_back(kRedCodec); 2201 parameters.codecs.push_back(kRedCodec);
2187 codecs[1].id = codecs[0].id; 2202 parameters.codecs[1].id = parameters.codecs[0].id;
2188 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); 2203 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
2189 } 2204 }
2190 2205
2191 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectDuplicateCodecPayloads) { 2206 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectDuplicateCodecPayloads) {
2192 std::vector<VideoCodec> codecs; 2207 cricket::VideoRecvParameters parameters;
2193 codecs.push_back(kVp8Codec); 2208 parameters.codecs.push_back(kVp8Codec);
2194 codecs.push_back(kVp9Codec); 2209 parameters.codecs.push_back(kVp9Codec);
2195 codecs[1].id = codecs[0].id; 2210 parameters.codecs[1].id = parameters.codecs[0].id;
2196 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); 2211 EXPECT_FALSE(channel_->SetRecvParameters(parameters));
2197 } 2212 }
2198 2213
2199 TEST_F(WebRtcVideoChannel2Test, 2214 TEST_F(WebRtcVideoChannel2Test,
2200 SetRecvCodecsAcceptSameCodecOnMultiplePayloadTypes) { 2215 SetRecvCodecsAcceptSameCodecOnMultiplePayloadTypes) {
2201 std::vector<VideoCodec> codecs; 2216 cricket::VideoRecvParameters parameters;
2202 codecs.push_back(kVp8Codec); 2217 parameters.codecs.push_back(kVp8Codec);
2203 codecs.push_back(kVp8Codec); 2218 parameters.codecs.push_back(kVp8Codec);
2204 codecs[1].id += 1; 2219 parameters.codecs[1].id += 1;
2205 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2220 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2206 } 2221 }
2207 2222
2208 // Test that setting the same codecs but with a different order and preference 2223 // Test that setting the same codecs but with a different order and preference
2209 // doesn't result in the stream being recreated. 2224 // doesn't result in the stream being recreated.
2210 TEST_F(WebRtcVideoChannel2Test, 2225 TEST_F(WebRtcVideoChannel2Test,
2211 SetRecvCodecsDifferentOrderAndPreferenceDoesntRecreateStream) { 2226 SetRecvCodecsDifferentOrderAndPreferenceDoesntRecreateStream) {
2212 std::vector<VideoCodec> codecs1; 2227 cricket::VideoRecvParameters parameters1;
2213 codecs1.push_back(kVp8Codec); 2228 parameters1.codecs.push_back(kVp8Codec);
2214 codecs1.push_back(kRedCodec); 2229 parameters1.codecs.push_back(kRedCodec);
2215 EXPECT_TRUE(channel_->SetRecvCodecs(codecs1)); 2230 EXPECT_TRUE(channel_->SetRecvParameters(parameters1));
2216 2231
2217 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); 2232 AddRecvStream(cricket::StreamParams::CreateLegacy(123));
2218 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); 2233 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams());
2219 2234
2220 std::vector<VideoCodec> codecs2; 2235 cricket::VideoRecvParameters parameters2;
2221 codecs2.push_back(kRedCodec); 2236 parameters2.codecs.push_back(kRedCodec);
2222 codecs2.push_back(kVp8Codec); 2237 parameters2.codecs.push_back(kVp8Codec);
2223 codecs2[1].preference += 1; 2238 parameters2.codecs[1].preference += 1;
2224 EXPECT_TRUE(channel_->SetRecvCodecs(codecs2)); 2239 EXPECT_TRUE(channel_->SetRecvParameters(parameters2));
2225 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); 2240 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams());
2226 } 2241 }
2227 2242
2228 TEST_F(WebRtcVideoChannel2Test, SendStreamNotSendingByDefault) { 2243 TEST_F(WebRtcVideoChannel2Test, SendStreamNotSendingByDefault) {
2229 EXPECT_FALSE(AddSendStream()->IsSending()); 2244 EXPECT_FALSE(AddSendStream()->IsSending());
2230 } 2245 }
2231 2246
2232 TEST_F(WebRtcVideoChannel2Test, ReceiveStreamReceivingByDefault) { 2247 TEST_F(WebRtcVideoChannel2Test, ReceiveStreamReceivingByDefault) {
2233 EXPECT_TRUE(AddRecvStream()->IsReceiving()); 2248 EXPECT_TRUE(AddRecvStream()->IsReceiving());
2234 } 2249 }
(...skipping 19 matching lines...) Expand all
2254 FakeVideoSendStream* new_stream = AddSendStream(); 2269 FakeVideoSendStream* new_stream = AddSendStream();
2255 EXPECT_TRUE(new_stream->IsSending()) 2270 EXPECT_TRUE(new_stream->IsSending())
2256 << "Send stream created after SetSend(true) not sending initially."; 2271 << "Send stream created after SetSend(true) not sending initially.";
2257 } 2272 }
2258 2273
2259 // This test verifies DSCP settings are properly applied on video media channel. 2274 // This test verifies DSCP settings are properly applied on video media channel.
2260 TEST_F(WebRtcVideoChannel2Test, TestSetDscpOptions) { 2275 TEST_F(WebRtcVideoChannel2Test, TestSetDscpOptions) {
2261 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface( 2276 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface(
2262 new cricket::FakeNetworkInterface); 2277 new cricket::FakeNetworkInterface);
2263 channel_->SetInterface(network_interface.get()); 2278 channel_->SetInterface(network_interface.get());
2264 cricket::VideoOptions options; 2279 cricket::VideoSendParameters parameters;
2265 EXPECT_TRUE(channel_->SetOptions(options)); 2280 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2266 EXPECT_EQ(rtc::DSCP_NO_CHANGE, network_interface->dscp()); 2281 EXPECT_EQ(rtc::DSCP_NO_CHANGE, network_interface->dscp());
2267 options.dscp.Set(true); 2282 parameters.options.dscp.Set(true);
2268 EXPECT_TRUE(channel_->SetOptions(options)); 2283 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2269 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp()); 2284 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp());
2270 // Verify previous value is not modified if dscp option is not set. 2285 // Verify previous value is not modified if dscp option is not set.
2271 cricket::VideoOptions options1; 2286 cricket::VideoSendParameters parameters1;
2272 EXPECT_TRUE(channel_->SetOptions(options1)); 2287 EXPECT_TRUE(channel_->SetSendParameters(parameters1));
2273 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp()); 2288 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp());
2274 options.dscp.Set(false); 2289 parameters1.options.dscp.Set(false);
2275 EXPECT_TRUE(channel_->SetOptions(options)); 2290 EXPECT_TRUE(channel_->SetSendParameters(parameters1));
2276 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp()); 2291 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp());
2277 channel_->SetInterface(NULL); 2292 channel_->SetInterface(NULL);
2278 } 2293 }
2279 2294
2280 TEST_F(WebRtcVideoChannel2Test, OnReadyToSendSignalsNetworkState) { 2295 TEST_F(WebRtcVideoChannel2Test, OnReadyToSendSignalsNetworkState) {
2281 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState()); 2296 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState());
2282 2297
2283 channel_->OnReadyToSend(false); 2298 channel_->OnReadyToSend(false);
2284 EXPECT_EQ(webrtc::kNetworkDown, fake_call_->GetNetworkState()); 2299 EXPECT_EQ(webrtc::kNetworkDown, fake_call_->GetNetworkState());
2285 2300
2286 channel_->OnReadyToSend(true); 2301 channel_->OnReadyToSend(true);
2287 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState()); 2302 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState());
2288 } 2303 }
2289 2304
2290 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsSentCodecName) { 2305 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsSentCodecName) {
2291 std::vector<cricket::VideoCodec> codecs; 2306 cricket::VideoSendParameters parameters;
2292 codecs.push_back(kVp8Codec); 2307 parameters.codecs.push_back(kVp8Codec);
2293 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2308 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2294 2309
2295 AddSendStream(); 2310 AddSendStream();
2296 2311
2297 cricket::VideoMediaInfo info; 2312 cricket::VideoMediaInfo info;
2298 ASSERT_TRUE(channel_->GetStats(&info)); 2313 ASSERT_TRUE(channel_->GetStats(&info));
2299 EXPECT_EQ(kVp8Codec.name, info.senders[0].codec_name); 2314 EXPECT_EQ(kVp8Codec.name, info.senders[0].codec_name);
2300 } 2315 }
2301 2316
2302 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuOveruseMetrics) { 2317 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuOveruseMetrics) {
2303 FakeVideoSendStream* stream = AddSendStream(); 2318 FakeVideoSendStream* stream = AddSendStream();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2336 // Capture format VGA. 2351 // Capture format VGA.
2337 cricket::FakeVideoCapturer video_capturer_vga; 2352 cricket::FakeVideoCapturer video_capturer_vga;
2338 const std::vector<cricket::VideoFormat>* formats = 2353 const std::vector<cricket::VideoFormat>* formats =
2339 video_capturer_vga.GetSupportedFormats(); 2354 video_capturer_vga.GetSupportedFormats();
2340 cricket::VideoFormat capture_format_vga = (*formats)[1]; 2355 cricket::VideoFormat capture_format_vga = (*formats)[1];
2341 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); 2356 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
2342 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_vga)); 2357 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_vga));
2343 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2358 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2344 2359
2345 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0); 2360 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0);
2346 std::vector<cricket::VideoCodec> codecs; 2361 cricket::VideoSendParameters parameters;
2347 codecs.push_back(send_codec); 2362 parameters.codecs.push_back(send_codec);
2348 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); 2363 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2349 EXPECT_TRUE(channel_->SetSend(true)); 2364 EXPECT_TRUE(channel_->SetSend(true));
2350 2365
2351 // Verify that the CpuOveruseObserver is registered and trigger downgrade. 2366 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
2352 cricket::VideoOptions options; 2367 parameters.options.cpu_overuse_detection.Set(true);
2353 options.cpu_overuse_detection.Set(true); 2368 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2354 EXPECT_TRUE(channel_->SetOptions(options));
2355 2369
2356 // Trigger overuse. 2370 // Trigger overuse.
2357 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2371 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2358 webrtc::LoadObserver* overuse_callback = 2372 webrtc::LoadObserver* overuse_callback =
2359 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; 2373 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback;
2360 ASSERT_TRUE(overuse_callback != NULL); 2374 ASSERT_TRUE(overuse_callback != NULL);
2361 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2375 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2362 2376
2363 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2. 2377 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2.
2364 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2378 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
2541 info.bw_estimations[0].target_enc_bitrate); 2555 info.bw_estimations[0].target_enc_bitrate);
2542 EXPECT_EQ(stats.media_bitrate_bps + stats2.media_bitrate_bps, 2556 EXPECT_EQ(stats.media_bitrate_bps + stats2.media_bitrate_bps,
2543 info.bw_estimations[0].actual_enc_bitrate); 2557 info.bw_estimations[0].actual_enc_bitrate);
2544 EXPECT_EQ(1 + 3 + 5 + 7, info.bw_estimations[0].transmit_bitrate) 2558 EXPECT_EQ(1 + 3 + 5 + 7, info.bw_estimations[0].transmit_bitrate)
2545 << "Bandwidth stats should take all streams into account."; 2559 << "Bandwidth stats should take all streams into account.";
2546 EXPECT_EQ(2 + 4 + 6 + 8, info.bw_estimations[0].retransmit_bitrate) 2560 EXPECT_EQ(2 + 4 + 6 + 8, info.bw_estimations[0].retransmit_bitrate)
2547 << "Bandwidth stats should take all streams into account."; 2561 << "Bandwidth stats should take all streams into account.";
2548 } 2562 }
2549 2563
2550 TEST_F(WebRtcVideoChannel2Test, DefaultReceiveStreamReconfiguresToUseRtx) { 2564 TEST_F(WebRtcVideoChannel2Test, DefaultReceiveStreamReconfiguresToUseRtx) {
2551 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 2565 cricket::VideoSendParameters parameters;
2566 parameters.codecs = engine_.codecs();
2567 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2552 2568
2553 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); 2569 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1);
2554 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); 2570 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
2555 2571
2556 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); 2572 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
2557 const size_t kDataLength = 12; 2573 const size_t kDataLength = 12;
2558 uint8_t data[kDataLength]; 2574 uint8_t data[kDataLength];
2559 memset(data, 0, sizeof(data)); 2575 memset(data, 0, sizeof(data));
2560 rtc::SetBE32(&data[8], ssrcs[0]); 2576 rtc::SetBE32(&data[8], ssrcs[0]);
2561 rtc::Buffer packet(data, kDataLength); 2577 rtc::Buffer packet(data, kDataLength);
(...skipping 10 matching lines...) Expand all
2572 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); 2588 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)));
2573 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) 2589 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
2574 << "AddRecvStream should've reconfigured, not added a new receiver."; 2590 << "AddRecvStream should've reconfigured, not added a new receiver.";
2575 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; 2591 recv_stream = fake_call_->GetVideoReceiveStreams()[0];
2576 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.rtx.size()); 2592 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.rtx.size());
2577 EXPECT_EQ(rtx_ssrcs[0], 2593 EXPECT_EQ(rtx_ssrcs[0],
2578 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc); 2594 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc);
2579 } 2595 }
2580 2596
2581 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { 2597 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) {
2582 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 2598 cricket::VideoSendParameters parameters;
2599 parameters.codecs = engine_.codecs();
2600 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2583 2601
2584 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); 2602 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1);
2585 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); 2603 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
2586 2604
2587 StreamParams sp = 2605 StreamParams sp =
2588 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); 2606 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs);
2589 sp.ssrcs = ssrcs; // Without RTXs, this is the important part. 2607 sp.ssrcs = ssrcs; // Without RTXs, this is the important part.
2590 2608
2591 EXPECT_FALSE(channel_->AddSendStream(sp)); 2609 EXPECT_FALSE(channel_->AddSendStream(sp));
2592 EXPECT_FALSE(channel_->AddRecvStream(sp)); 2610 EXPECT_FALSE(channel_->AddRecvStream(sp));
2593 } 2611 }
2594 2612
2595 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithOverlappingRtxSsrcs) { 2613 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithOverlappingRtxSsrcs) {
2596 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 2614 cricket::VideoSendParameters parameters;
2615 parameters.codecs = engine_.codecs();
2616 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2597 2617
2598 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); 2618 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1);
2599 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); 2619 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
2600 2620
2601 StreamParams sp = 2621 StreamParams sp =
2602 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); 2622 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs);
2603 2623
2604 EXPECT_TRUE(channel_->AddSendStream(sp)); 2624 EXPECT_TRUE(channel_->AddSendStream(sp));
2605 EXPECT_TRUE(channel_->AddRecvStream(sp)); 2625 EXPECT_TRUE(channel_->AddRecvStream(sp));
2606 2626
2607 // The RTX SSRC is already used in previous streams, using it should fail. 2627 // The RTX SSRC is already used in previous streams, using it should fail.
2608 sp = cricket::StreamParams::CreateLegacy(rtx_ssrcs[0]); 2628 sp = cricket::StreamParams::CreateLegacy(rtx_ssrcs[0]);
2609 EXPECT_FALSE(channel_->AddSendStream(sp)); 2629 EXPECT_FALSE(channel_->AddSendStream(sp));
2610 EXPECT_FALSE(channel_->AddRecvStream(sp)); 2630 EXPECT_FALSE(channel_->AddRecvStream(sp));
2611 2631
2612 // After removing the original stream this should be fine to add (makes sure 2632 // After removing the original stream this should be fine to add (makes sure
2613 // that RTX ssrcs are not forever taken). 2633 // that RTX ssrcs are not forever taken).
2614 EXPECT_TRUE(channel_->RemoveSendStream(ssrcs[0])); 2634 EXPECT_TRUE(channel_->RemoveSendStream(ssrcs[0]));
2615 EXPECT_TRUE(channel_->RemoveRecvStream(ssrcs[0])); 2635 EXPECT_TRUE(channel_->RemoveRecvStream(ssrcs[0]));
2616 EXPECT_TRUE(channel_->AddSendStream(sp)); 2636 EXPECT_TRUE(channel_->AddSendStream(sp));
2617 EXPECT_TRUE(channel_->AddRecvStream(sp)); 2637 EXPECT_TRUE(channel_->AddRecvStream(sp));
2618 } 2638 }
2619 2639
2620 TEST_F(WebRtcVideoChannel2Test, 2640 TEST_F(WebRtcVideoChannel2Test,
2621 RejectsAddingStreamsWithOverlappingSimulcastSsrcs) { 2641 RejectsAddingStreamsWithOverlappingSimulcastSsrcs) {
2622 static const uint32 kFirstStreamSsrcs[] = {1, 2, 3}; 2642 static const uint32 kFirstStreamSsrcs[] = {1, 2, 3};
2623 static const uint32 kOverlappingStreamSsrcs[] = {4, 3, 5}; 2643 static const uint32 kOverlappingStreamSsrcs[] = {4, 3, 5};
2624 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 2644 cricket::VideoSendParameters parameters;
2645 parameters.codecs = engine_.codecs();
2646 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2625 2647
2626 StreamParams sp = 2648 StreamParams sp =
2627 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kFirstStreamSsrcs)); 2649 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kFirstStreamSsrcs));
2628 2650
2629 EXPECT_TRUE(channel_->AddSendStream(sp)); 2651 EXPECT_TRUE(channel_->AddSendStream(sp));
2630 EXPECT_TRUE(channel_->AddRecvStream(sp)); 2652 EXPECT_TRUE(channel_->AddRecvStream(sp));
2631 2653
2632 // One of the SSRCs is already used in previous streams, using it should fail. 2654 // One of the SSRCs is already used in previous streams, using it should fail.
2633 sp = cricket::CreateSimStreamParams("cname", 2655 sp = cricket::CreateSimStreamParams("cname",
2634 MAKE_VECTOR(kOverlappingStreamSsrcs)); 2656 MAKE_VECTOR(kOverlappingStreamSsrcs));
2635 EXPECT_FALSE(channel_->AddSendStream(sp)); 2657 EXPECT_FALSE(channel_->AddSendStream(sp));
2636 EXPECT_FALSE(channel_->AddRecvStream(sp)); 2658 EXPECT_FALSE(channel_->AddRecvStream(sp));
2637 2659
2638 // After removing the original stream this should be fine to add (makes sure 2660 // After removing the original stream this should be fine to add (makes sure
2639 // that RTX ssrcs are not forever taken). 2661 // that RTX ssrcs are not forever taken).
2640 EXPECT_TRUE(channel_->RemoveSendStream(kFirstStreamSsrcs[0])); 2662 EXPECT_TRUE(channel_->RemoveSendStream(kFirstStreamSsrcs[0]));
2641 EXPECT_TRUE(channel_->RemoveRecvStream(kFirstStreamSsrcs[0])); 2663 EXPECT_TRUE(channel_->RemoveRecvStream(kFirstStreamSsrcs[0]));
2642 EXPECT_TRUE(channel_->AddSendStream(sp)); 2664 EXPECT_TRUE(channel_->AddSendStream(sp));
2643 EXPECT_TRUE(channel_->AddRecvStream(sp)); 2665 EXPECT_TRUE(channel_->AddRecvStream(sp));
2644 } 2666 }
2645 2667
2646 TEST_F(WebRtcVideoChannel2Test, ReportsSsrcGroupsInStats) { 2668 TEST_F(WebRtcVideoChannel2Test, ReportsSsrcGroupsInStats) {
2647 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 2669 cricket::VideoSendParameters parameters;
2670 parameters.codecs = engine_.codecs();
2671 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2648 2672
2649 static const uint32_t kSenderSsrcs[] = {4, 7, 10}; 2673 static const uint32_t kSenderSsrcs[] = {4, 7, 10};
2650 static const uint32_t kSenderRtxSsrcs[] = {5, 8, 11}; 2674 static const uint32_t kSenderRtxSsrcs[] = {5, 8, 11};
2651 2675
2652 StreamParams sender_sp = cricket::CreateSimWithRtxStreamParams( 2676 StreamParams sender_sp = cricket::CreateSimWithRtxStreamParams(
2653 "cname", MAKE_VECTOR(kSenderSsrcs), MAKE_VECTOR(kSenderRtxSsrcs)); 2677 "cname", MAKE_VECTOR(kSenderSsrcs), MAKE_VECTOR(kSenderRtxSsrcs));
2654 2678
2655 EXPECT_TRUE(channel_->AddSendStream(sender_sp)); 2679 EXPECT_TRUE(channel_->AddSendStream(sender_sp));
2656 2680
2657 static const uint32_t kReceiverSsrcs[] = {3}; 2681 static const uint32_t kReceiverSsrcs[] = {3};
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2691 // Report no codec name for unknown playload types. 2715 // Report no codec name for unknown playload types.
2692 stats.current_payload_type = 3; 2716 stats.current_payload_type = 3;
2693 stream->SetStats(stats); 2717 stream->SetStats(stats);
2694 ASSERT_TRUE(channel_->GetStats(&info)); 2718 ASSERT_TRUE(channel_->GetStats(&info));
2695 EXPECT_STREQ("", info.receivers[0].codec_name.c_str()); 2719 EXPECT_STREQ("", info.receivers[0].codec_name.c_str());
2696 } 2720 }
2697 2721
2698 void WebRtcVideoChannel2Test::TestReceiveUnsignalledSsrcPacket( 2722 void WebRtcVideoChannel2Test::TestReceiveUnsignalledSsrcPacket(
2699 uint8_t payload_type, 2723 uint8_t payload_type,
2700 bool expect_created_receive_stream) { 2724 bool expect_created_receive_stream) {
2701 std::vector<VideoCodec> codecs(engine_.codecs()); 2725 cricket::VideoRecvParameters parameters;
2726 parameters.codecs = engine_.codecs();
2702 // Add a RED RTX codec. 2727 // Add a RED RTX codec.
2703 VideoCodec red_rtx_codec = 2728 VideoCodec red_rtx_codec =
2704 VideoCodec::CreateRtxCodec(kRedRtxPayloadType, kDefaultRedPlType); 2729 VideoCodec::CreateRtxCodec(kRedRtxPayloadType, kDefaultRedPlType);
2705 codecs.push_back(red_rtx_codec); 2730 parameters.codecs.push_back(red_rtx_codec);
2706 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); 2731 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
2707 2732
2708 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); 2733 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
2709 const size_t kDataLength = 12; 2734 const size_t kDataLength = 12;
2710 uint8_t data[kDataLength]; 2735 uint8_t data[kDataLength];
2711 memset(data, 0, sizeof(data)); 2736 memset(data, 0, sizeof(data));
2712 2737
2713 rtc::Set8(data, 1, payload_type); 2738 rtc::Set8(data, 1, payload_type);
2714 rtc::SetBE32(&data[8], kIncomingUnsignalledSsrc); 2739 rtc::SetBE32(&data[8], kIncomingUnsignalledSsrc);
2715 rtc::Buffer packet(data, kDataLength); 2740 rtc::Buffer packet(data, kDataLength);
2716 rtc::PacketTime packet_time; 2741 rtc::PacketTime packet_time;
(...skipping 25 matching lines...) Expand all
2742 TEST_F(WebRtcVideoChannel2Test, UlpfecPacketDoesntCreateUnsignalledStream) { 2767 TEST_F(WebRtcVideoChannel2Test, UlpfecPacketDoesntCreateUnsignalledStream) {
2743 TestReceiveUnsignalledSsrcPacket(kDefaultUlpfecType, false); 2768 TestReceiveUnsignalledSsrcPacket(kDefaultUlpfecType, false);
2744 } 2769 }
2745 2770
2746 TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) { 2771 TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) {
2747 TestReceiveUnsignalledSsrcPacket(kRedRtxPayloadType, false); 2772 TestReceiveUnsignalledSsrcPacket(kRedRtxPayloadType, false);
2748 } 2773 }
2749 2774
2750 void WebRtcVideoChannel2Test::TestReceiverLocalSsrcConfiguration( 2775 void WebRtcVideoChannel2Test::TestReceiverLocalSsrcConfiguration(
2751 bool receiver_first) { 2776 bool receiver_first) {
2752 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); 2777 cricket::VideoSendParameters parameters;
2778 parameters.codecs = engine_.codecs();
2779 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2753 2780
2754 const uint32_t kSenderSsrc = 0xC0FFEE; 2781 const uint32_t kSenderSsrc = 0xC0FFEE;
2755 const uint32_t kReceiverSsrc = 0x4711; 2782 const uint32_t kReceiverSsrc = 0x4711;
2756 2783
2757 if (receiver_first) { 2784 if (receiver_first) {
2758 AddRecvStream(StreamParams::CreateLegacy(kReceiverSsrc)); 2785 AddRecvStream(StreamParams::CreateLegacy(kReceiverSsrc));
2759 std::vector<FakeVideoReceiveStream*> receive_streams = 2786 std::vector<FakeVideoReceiveStream*> receive_streams =
2760 fake_call_->GetVideoReceiveStreams(); 2787 fake_call_->GetVideoReceiveStreams();
2761 ASSERT_EQ(1u, receive_streams.size()); 2788 ASSERT_EQ(1u, receive_streams.size());
2762 // Bogus local SSRC when we have no sender. 2789 // Bogus local SSRC when we have no sender.
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2950 DCHECK(fake_call_ == NULL); 2977 DCHECK(fake_call_ == NULL);
2951 fake_call_ = new FakeCall(config); 2978 fake_call_ = new FakeCall(config);
2952 return fake_call_; 2979 return fake_call_;
2953 } 2980 }
2954 2981
2955 void VerifySimulcastSettings(const VideoCodec& codec, 2982 void VerifySimulcastSettings(const VideoCodec& codec,
2956 VideoOptions::HighestBitrate bitrate_mode, 2983 VideoOptions::HighestBitrate bitrate_mode,
2957 size_t num_configured_streams, 2984 size_t num_configured_streams,
2958 size_t expected_num_streams, 2985 size_t expected_num_streams,
2959 SimulcastBitrateMode simulcast_bitrate_mode) { 2986 SimulcastBitrateMode simulcast_bitrate_mode) {
2960 cricket::VideoOptions options; 2987 cricket::VideoSendParameters parameters;
2961 options.video_highest_bitrate.Set(bitrate_mode); 2988 parameters.options.video_highest_bitrate.Set(bitrate_mode);
2962 EXPECT_TRUE(channel_->SetOptions(options)); 2989 parameters.codecs.push_back(codec);
2963 2990 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2964 std::vector<VideoCodec> codecs;
2965 codecs.push_back(codec);
2966 ASSERT_TRUE(channel_->SetSendCodecs(codecs));
2967 2991
2968 std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3); 2992 std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3);
2969 DCHECK(num_configured_streams <= ssrcs.size()); 2993 DCHECK(num_configured_streams <= ssrcs.size());
2970 ssrcs.resize(num_configured_streams); 2994 ssrcs.resize(num_configured_streams);
2971 2995
2972 FakeVideoSendStream* stream = 2996 FakeVideoSendStream* stream =
2973 AddSendStream(CreateSimStreamParams("cname", ssrcs)); 2997 AddSendStream(CreateSimStreamParams("cname", ssrcs));
2974 // Send a full-size frame to trigger a stream reconfiguration to use all 2998 // Send a full-size frame to trigger a stream reconfiguration to use all
2975 // expected simulcast layers. 2999 // expected simulcast layers.
2976 cricket::FakeVideoCapturer capturer; 3000 cricket::FakeVideoCapturer capturer;
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
3190 // Ensures that the correct settings are applied to the codec when two temporal 3214 // Ensures that the correct settings are applied to the codec when two temporal
3191 // layer screencasting is enabled, and that the correct simulcast settings are 3215 // layer screencasting is enabled, and that the correct simulcast settings are
3192 // reapplied when disabling screencasting. 3216 // reapplied when disabling screencasting.
3193 TEST_F(WebRtcVideoChannel2SimulcastTest, 3217 TEST_F(WebRtcVideoChannel2SimulcastTest,
3194 DISABLED_TwoTemporalLayerScreencastSettings) { 3218 DISABLED_TwoTemporalLayerScreencastSettings) {
3195 // TODO(pbos): Implement. 3219 // TODO(pbos): Implement.
3196 FAIL() << "Not implemented."; 3220 FAIL() << "Not implemented.";
3197 } 3221 }
3198 3222
3199 } // namespace cricket 3223 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698