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

Side by Side Diff: media/cast/test/end2end_unittest.cc

Issue 252923007: Cast: Fix two video freezing problems (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more comments adressed Created 6 years, 7 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 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // This test generate synthetic data. For audio it's a sinusoid waveform with 5 // This test generate synthetic data. For audio it's a sinusoid waveform with
6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern 6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern
7 // that is shifting by one pixel per frame, each pixels neighbors right and down 7 // that is shifting by one pixel per frame, each pixels neighbors right and down
8 // is this pixels value +1, since the pixel value is 8 bit it will wrap 8 // is this pixels value +1, since the pixel value is 8 bit it will wrap
9 // frequently within the image. Visually this will create diagonally color bands 9 // frequently within the image. Visually this will create diagonally color bands
10 // that moves across the screen 10 // that moves across the screen
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 459 base::TimeDelta::FromMilliseconds(kStartMillisecond));
460 cast_environment_sender_->Logging()->AddRawEventSubscriber( 460 cast_environment_sender_->Logging()->AddRawEventSubscriber(
461 &event_subscriber_sender_); 461 &event_subscriber_sender_);
462 } 462 }
463 463
464 void Configure(transport::VideoCodec video_codec, 464 void Configure(transport::VideoCodec video_codec,
465 transport::AudioCodec audio_codec, 465 transport::AudioCodec audio_codec,
466 int audio_sampling_frequency, 466 int audio_sampling_frequency,
467 bool external_audio_decoder, 467 bool external_audio_decoder,
468 int max_number_of_video_buffers_used) { 468 int max_number_of_video_buffers_used) {
469 audio_sender_config_.sender_ssrc = 1; 469 audio_sender_config_.rtp_config.ssrc = 1;
470 audio_sender_config_.incoming_feedback_ssrc = 2; 470 audio_sender_config_.incoming_feedback_ssrc = 2;
471 audio_sender_config_.rtp_config.payload_type = 96; 471 audio_sender_config_.rtp_config.payload_type = 96;
472 audio_sender_config_.use_external_encoder = false; 472 audio_sender_config_.use_external_encoder = false;
473 audio_sender_config_.frequency = audio_sampling_frequency; 473 audio_sender_config_.frequency = audio_sampling_frequency;
474 audio_sender_config_.channels = kAudioChannels; 474 audio_sender_config_.channels = kAudioChannels;
475 audio_sender_config_.bitrate = kDefaultAudioEncoderBitrate; 475 audio_sender_config_.bitrate = kDefaultAudioEncoderBitrate;
476 audio_sender_config_.codec = audio_codec; 476 audio_sender_config_.codec = audio_codec;
477 477
478 audio_receiver_config_.feedback_ssrc = 478 audio_receiver_config_.feedback_ssrc =
479 audio_sender_config_.incoming_feedback_ssrc; 479 audio_sender_config_.incoming_feedback_ssrc;
480 audio_receiver_config_.incoming_ssrc = audio_sender_config_.sender_ssrc; 480 audio_receiver_config_.incoming_ssrc = audio_sender_config_.rtp_config.ssrc;
481 audio_receiver_config_.rtp_payload_type = 481 audio_receiver_config_.rtp_payload_type =
482 audio_sender_config_.rtp_config.payload_type; 482 audio_sender_config_.rtp_config.payload_type;
483 audio_receiver_config_.use_external_decoder = external_audio_decoder; 483 audio_receiver_config_.use_external_decoder = external_audio_decoder;
484 audio_receiver_config_.frequency = audio_sender_config_.frequency; 484 audio_receiver_config_.frequency = audio_sender_config_.frequency;
485 audio_receiver_config_.channels = kAudioChannels; 485 audio_receiver_config_.channels = kAudioChannels;
486 audio_receiver_config_.codec = audio_sender_config_.codec; 486 audio_receiver_config_.codec = audio_sender_config_.codec;
487 487
488 test_receiver_audio_callback_->SetExpectedSamplingFrequency( 488 test_receiver_audio_callback_->SetExpectedSamplingFrequency(
489 audio_receiver_config_.frequency); 489 audio_receiver_config_.frequency);
490 490
491 video_sender_config_.sender_ssrc = 3; 491 video_sender_config_.rtp_config.ssrc = 3;
492 video_sender_config_.incoming_feedback_ssrc = 4; 492 video_sender_config_.incoming_feedback_ssrc = 4;
493 video_sender_config_.rtp_config.payload_type = 97; 493 video_sender_config_.rtp_config.payload_type = 97;
494 video_sender_config_.use_external_encoder = false; 494 video_sender_config_.use_external_encoder = false;
495 video_sender_config_.width = kVideoHdWidth; 495 video_sender_config_.width = kVideoHdWidth;
496 video_sender_config_.height = kVideoHdHeight; 496 video_sender_config_.height = kVideoHdHeight;
497 video_sender_config_.max_bitrate = 5000000; 497 video_sender_config_.max_bitrate = 5000000;
498 video_sender_config_.min_bitrate = 1000000; 498 video_sender_config_.min_bitrate = 1000000;
499 video_sender_config_.start_bitrate = 5000000; 499 video_sender_config_.start_bitrate = 5000000;
500 video_sender_config_.max_qp = 30; 500 video_sender_config_.max_qp = 30;
501 video_sender_config_.min_qp = 4; 501 video_sender_config_.min_qp = 4;
502 video_sender_config_.max_frame_rate = 30; 502 video_sender_config_.max_frame_rate = 30;
503 video_sender_config_.max_number_of_video_buffers_used = 503 video_sender_config_.max_number_of_video_buffers_used =
504 max_number_of_video_buffers_used; 504 max_number_of_video_buffers_used;
505 video_sender_config_.codec = video_codec; 505 video_sender_config_.codec = video_codec;
506 506
507 video_receiver_config_.feedback_ssrc = 507 video_receiver_config_.feedback_ssrc =
508 video_sender_config_.incoming_feedback_ssrc; 508 video_sender_config_.incoming_feedback_ssrc;
509 video_receiver_config_.incoming_ssrc = video_sender_config_.sender_ssrc; 509 video_receiver_config_.incoming_ssrc = video_sender_config_.rtp_config.ssrc;
510 video_receiver_config_.rtp_payload_type = 510 video_receiver_config_.rtp_payload_type =
511 video_sender_config_.rtp_config.payload_type; 511 video_sender_config_.rtp_config.payload_type;
512 video_receiver_config_.use_external_decoder = false; 512 video_receiver_config_.use_external_decoder = false;
513 video_receiver_config_.codec = video_sender_config_.codec; 513 video_receiver_config_.codec = video_sender_config_.codec;
514
515 transport_audio_config_.base.ssrc = audio_sender_config_.sender_ssrc;
516 transport_audio_config_.codec = audio_sender_config_.codec;
517 transport_audio_config_.base.rtp_config = audio_sender_config_.rtp_config;
518 transport_audio_config_.frequency = audio_sender_config_.frequency;
519 transport_audio_config_.channels = audio_sender_config_.channels;
520 transport_video_config_.base.ssrc = video_sender_config_.sender_ssrc;
521 transport_video_config_.codec = video_sender_config_.codec;
522 transport_video_config_.base.rtp_config = video_sender_config_.rtp_config;
523 } 514 }
524 515
525 void FeedAudioFrames(int count, bool will_be_checked) { 516 void FeedAudioFrames(int count, bool will_be_checked) {
526 for (int i = 0; i < count; ++i) { 517 for (int i = 0; i < count; ++i) {
527 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 518 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
528 base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs))); 519 base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs)));
529 const base::TimeTicks send_time = 520 const base::TimeTicks send_time =
530 testing_clock_sender_->NowTicks() + 521 testing_clock_sender_->NowTicks() +
531 i * base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs); 522 i * base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs);
532 if (will_be_checked) 523 if (will_be_checked)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 net::IPEndPoint dummy_endpoint; 557 net::IPEndPoint dummy_endpoint;
567 transport_sender_.reset(new transport::CastTransportSenderImpl( 558 transport_sender_.reset(new transport::CastTransportSenderImpl(
568 NULL, 559 NULL,
569 testing_clock_sender_, 560 testing_clock_sender_,
570 dummy_endpoint, 561 dummy_endpoint,
571 base::Bind(&UpdateCastTransportStatus), 562 base::Bind(&UpdateCastTransportStatus),
572 base::Bind(&End2EndTest::LogRawEvents, base::Unretained(this)), 563 base::Bind(&End2EndTest::LogRawEvents, base::Unretained(this)),
573 base::TimeDelta::FromSeconds(1), 564 base::TimeDelta::FromSeconds(1),
574 task_runner_, 565 task_runner_,
575 &sender_to_receiver_)); 566 &sender_to_receiver_));
576 transport_sender_->InitializeAudio(transport_audio_config_);
577 transport_sender_->InitializeVideo(transport_video_config_);
578 567
579 cast_sender_ = 568 cast_sender_ =
580 CastSender::Create(cast_environment_sender_, transport_sender_.get()); 569 CastSender::Create(cast_environment_sender_, transport_sender_.get());
581 570
582 // Initializing audio and video senders. 571 // Initializing audio and video senders.
583 cast_sender_->InitializeAudio(audio_sender_config_, 572 cast_sender_->InitializeAudio(audio_sender_config_,
584 base::Bind(&AudioInitializationStatus)); 573 base::Bind(&AudioInitializationStatus));
585 cast_sender_->InitializeVideo(video_sender_config_, 574 cast_sender_->InitializeVideo(video_sender_config_,
586 base::Bind(&VideoInitializationStatus), 575 base::Bind(&VideoInitializationStatus),
587 CreateDefaultVideoEncodeAcceleratorCallback(), 576 CreateDefaultVideoEncodeAcceleratorCallback(),
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 it->packet_id, 643 it->packet_id,
655 it->max_packet_id, 644 it->max_packet_id,
656 it->size); 645 it->size);
657 } 646 }
658 } 647 }
659 648
660 AudioReceiverConfig audio_receiver_config_; 649 AudioReceiverConfig audio_receiver_config_;
661 VideoReceiverConfig video_receiver_config_; 650 VideoReceiverConfig video_receiver_config_;
662 AudioSenderConfig audio_sender_config_; 651 AudioSenderConfig audio_sender_config_;
663 VideoSenderConfig video_sender_config_; 652 VideoSenderConfig video_sender_config_;
664 transport::CastTransportAudioConfig transport_audio_config_;
665 transport::CastTransportVideoConfig transport_video_config_;
666 653
667 base::TimeTicks start_time_; 654 base::TimeTicks start_time_;
668 base::SimpleTestTickClock* testing_clock_sender_; 655 base::SimpleTestTickClock* testing_clock_sender_;
669 base::SimpleTestTickClock* testing_clock_receiver_; 656 base::SimpleTestTickClock* testing_clock_receiver_;
670 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 657 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
671 scoped_refptr<CastEnvironment> cast_environment_sender_; 658 scoped_refptr<CastEnvironment> cast_environment_sender_;
672 scoped_refptr<CastEnvironment> cast_environment_receiver_; 659 scoped_refptr<CastEnvironment> cast_environment_receiver_;
673 660
674 LoopBackTransport receiver_to_sender_; 661 LoopBackTransport receiver_to_sender_;
675 LoopBackTransport sender_to_receiver_; 662 LoopBackTransport sender_to_receiver_;
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 video_start++; 962 video_start++;
976 } 963 }
977 964
978 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 965 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
979 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called()); 966 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called());
980 } 967 }
981 968
982 TEST_F(End2EndTest, CryptoVideo) { 969 TEST_F(End2EndTest, CryptoVideo) {
983 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 970 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
984 971
985 transport_video_config_.base.aes_iv_mask = 972 video_sender_config_.rtp_config.aes_iv_mask =
986 ConvertFromBase16String("1234567890abcdeffedcba0987654321"); 973 ConvertFromBase16String("1234567890abcdeffedcba0987654321");
987 transport_video_config_.base.aes_key = 974 video_sender_config_.rtp_config.aes_key =
988 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef"); 975 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef");
989 976
990 video_receiver_config_.aes_iv_mask = transport_video_config_.base.aes_iv_mask; 977 video_receiver_config_.aes_iv_mask =
991 video_receiver_config_.aes_key = transport_video_config_.base.aes_key; 978 video_sender_config_.rtp_config.aes_iv_mask;
979 video_receiver_config_.aes_key =
980 video_sender_config_.rtp_config.aes_key;
992 981
993 Create(); 982 Create();
994 983
995 int frames_counter = 0; 984 int frames_counter = 0;
996 for (; frames_counter < 3; ++frames_counter) { 985 for (; frames_counter < 3; ++frames_counter) {
997 const base::TimeTicks send_time = testing_clock_sender_->NowTicks(); 986 const base::TimeTicks send_time = testing_clock_sender_->NowTicks();
998 SendVideoFrame(frames_counter, send_time); 987 SendVideoFrame(frames_counter, send_time);
999 988
1000 test_receiver_video_callback_->AddExpectedResult( 989 test_receiver_video_callback_->AddExpectedResult(
1001 frames_counter, 990 frames_counter,
1002 video_sender_config_.width, 991 video_sender_config_.width,
1003 video_sender_config_.height, 992 video_sender_config_.height,
1004 send_time, 993 send_time,
1005 true); 994 true);
1006 995
1007 RunTasks(kFrameTimerMs); 996 RunTasks(kFrameTimerMs);
1008 997
1009 frame_receiver_->GetRawVideoFrame( 998 frame_receiver_->GetRawVideoFrame(
1010 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 999 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
1011 test_receiver_video_callback_)); 1000 test_receiver_video_callback_));
1012 } 1001 }
1013 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1002 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1014 EXPECT_EQ(frames_counter, 1003 EXPECT_EQ(frames_counter,
1015 test_receiver_video_callback_->number_times_called()); 1004 test_receiver_video_callback_->number_times_called());
1016 } 1005 }
1017 1006
1018 TEST_F(End2EndTest, CryptoAudio) { 1007 TEST_F(End2EndTest, CryptoAudio) {
1019 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 1008 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
1020 1009
1021 transport_audio_config_.base.aes_iv_mask = 1010 audio_sender_config_.rtp_config.aes_iv_mask =
1022 ConvertFromBase16String("abcdeffedcba12345678900987654321"); 1011 ConvertFromBase16String("abcdeffedcba12345678900987654321");
1023 transport_audio_config_.base.aes_key = 1012 audio_sender_config_.rtp_config.aes_key =
1024 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0"); 1013 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0");
1025 1014
1026 audio_receiver_config_.aes_iv_mask = transport_audio_config_.base.aes_iv_mask; 1015 audio_receiver_config_.aes_iv_mask =
1027 audio_receiver_config_.aes_key = transport_audio_config_.base.aes_key; 1016 audio_sender_config_.rtp_config.aes_iv_mask;
1017 audio_receiver_config_.aes_key =
1018 audio_sender_config_.rtp_config.aes_key;
1028 1019
1029 Create(); 1020 Create();
1030 1021
1031 const int kNumIterations = 3; 1022 const int kNumIterations = 3;
1032 const int kNumAudioFramesPerIteration = 2; 1023 const int kNumAudioFramesPerIteration = 2;
1033 for (int i = 0; i < kNumIterations; ++i) { 1024 for (int i = 0; i < kNumIterations; ++i) {
1034 FeedAudioFrames(kNumAudioFramesPerIteration, true); 1025 FeedAudioFrames(kNumAudioFramesPerIteration, true);
1035 RunTasks(kNumAudioFramesPerIteration * kAudioFrameDurationMs); 1026 RunTasks(kNumAudioFramesPerIteration * kAudioFrameDurationMs);
1036 RequestAudioFrames(kNumAudioFramesPerIteration, true); 1027 RequestAudioFrames(kNumAudioFramesPerIteration, true);
1037 } 1028 }
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1269 EXPECT_EQ(1000, received_counter); 1260 EXPECT_EQ(1000, received_counter);
1270 } 1261 }
1271 1262
1272 // TODO(pwestin): Add repeatable packet loss test. 1263 // TODO(pwestin): Add repeatable packet loss test.
1273 // TODO(pwestin): Add test for misaligned send get calls. 1264 // TODO(pwestin): Add test for misaligned send get calls.
1274 // TODO(pwestin): Add more tests that does not resample. 1265 // TODO(pwestin): Add more tests that does not resample.
1275 // TODO(pwestin): Add test when we have starvation for our RunTask. 1266 // TODO(pwestin): Add test when we have starvation for our RunTask.
1276 1267
1277 } // namespace cast 1268 } // namespace cast
1278 } // namespace media 1269 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698