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

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

Issue 268983002: Revert of Cast: Fix two video freezing problems (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
« no previous file with comments | « media/cast/cast_config.cc ('k') | media/cast/test/sender.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_.rtp_config.ssrc = 1; 469 audio_sender_config_.sender_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_.rtp_config.ssrc; 480 audio_receiver_config_.incoming_ssrc = audio_sender_config_.sender_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_.rtp_config.ssrc = 3; 491 video_sender_config_.sender_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_.rtp_config.ssrc; 509 video_receiver_config_.incoming_ssrc = video_sender_config_.sender_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;
514 } 523 }
515 524
516 void FeedAudioFrames(int count, bool will_be_checked) { 525 void FeedAudioFrames(int count, bool will_be_checked) {
517 for (int i = 0; i < count; ++i) { 526 for (int i = 0; i < count; ++i) {
518 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 527 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
519 base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs))); 528 base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs)));
520 const base::TimeTicks send_time = 529 const base::TimeTicks send_time =
521 testing_clock_sender_->NowTicks() + 530 testing_clock_sender_->NowTicks() +
522 i * base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs); 531 i * base::TimeDelta::FromMilliseconds(kAudioFrameDurationMs);
523 if (will_be_checked) 532 if (will_be_checked)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 net::IPEndPoint dummy_endpoint; 566 net::IPEndPoint dummy_endpoint;
558 transport_sender_.reset(new transport::CastTransportSenderImpl( 567 transport_sender_.reset(new transport::CastTransportSenderImpl(
559 NULL, 568 NULL,
560 testing_clock_sender_, 569 testing_clock_sender_,
561 dummy_endpoint, 570 dummy_endpoint,
562 base::Bind(&UpdateCastTransportStatus), 571 base::Bind(&UpdateCastTransportStatus),
563 base::Bind(&End2EndTest::LogRawEvents, base::Unretained(this)), 572 base::Bind(&End2EndTest::LogRawEvents, base::Unretained(this)),
564 base::TimeDelta::FromSeconds(1), 573 base::TimeDelta::FromSeconds(1),
565 task_runner_, 574 task_runner_,
566 &sender_to_receiver_)); 575 &sender_to_receiver_));
576 transport_sender_->InitializeAudio(transport_audio_config_);
577 transport_sender_->InitializeVideo(transport_video_config_);
567 578
568 cast_sender_ = 579 cast_sender_ =
569 CastSender::Create(cast_environment_sender_, transport_sender_.get()); 580 CastSender::Create(cast_environment_sender_, transport_sender_.get());
570 581
571 // Initializing audio and video senders. 582 // Initializing audio and video senders.
572 cast_sender_->InitializeAudio(audio_sender_config_, 583 cast_sender_->InitializeAudio(audio_sender_config_,
573 base::Bind(&AudioInitializationStatus)); 584 base::Bind(&AudioInitializationStatus));
574 cast_sender_->InitializeVideo(video_sender_config_, 585 cast_sender_->InitializeVideo(video_sender_config_,
575 base::Bind(&VideoInitializationStatus), 586 base::Bind(&VideoInitializationStatus),
576 CreateDefaultVideoEncodeAcceleratorCallback(), 587 CreateDefaultVideoEncodeAcceleratorCallback(),
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 it->packet_id, 654 it->packet_id,
644 it->max_packet_id, 655 it->max_packet_id,
645 it->size); 656 it->size);
646 } 657 }
647 } 658 }
648 659
649 AudioReceiverConfig audio_receiver_config_; 660 AudioReceiverConfig audio_receiver_config_;
650 VideoReceiverConfig video_receiver_config_; 661 VideoReceiverConfig video_receiver_config_;
651 AudioSenderConfig audio_sender_config_; 662 AudioSenderConfig audio_sender_config_;
652 VideoSenderConfig video_sender_config_; 663 VideoSenderConfig video_sender_config_;
664 transport::CastTransportAudioConfig transport_audio_config_;
665 transport::CastTransportVideoConfig transport_video_config_;
653 666
654 base::TimeTicks start_time_; 667 base::TimeTicks start_time_;
655 base::SimpleTestTickClock* testing_clock_sender_; 668 base::SimpleTestTickClock* testing_clock_sender_;
656 base::SimpleTestTickClock* testing_clock_receiver_; 669 base::SimpleTestTickClock* testing_clock_receiver_;
657 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 670 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
658 scoped_refptr<CastEnvironment> cast_environment_sender_; 671 scoped_refptr<CastEnvironment> cast_environment_sender_;
659 scoped_refptr<CastEnvironment> cast_environment_receiver_; 672 scoped_refptr<CastEnvironment> cast_environment_receiver_;
660 673
661 LoopBackTransport receiver_to_sender_; 674 LoopBackTransport receiver_to_sender_;
662 LoopBackTransport sender_to_receiver_; 675 LoopBackTransport sender_to_receiver_;
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 video_start++; 975 video_start++;
963 } 976 }
964 977
965 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 978 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
966 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called()); 979 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called());
967 } 980 }
968 981
969 TEST_F(End2EndTest, CryptoVideo) { 982 TEST_F(End2EndTest, CryptoVideo) {
970 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 983 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
971 984
972 video_sender_config_.rtp_config.aes_iv_mask = 985 transport_video_config_.base.aes_iv_mask =
973 ConvertFromBase16String("1234567890abcdeffedcba0987654321"); 986 ConvertFromBase16String("1234567890abcdeffedcba0987654321");
974 video_sender_config_.rtp_config.aes_key = 987 transport_video_config_.base.aes_key =
975 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef"); 988 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef");
976 989
977 video_receiver_config_.aes_iv_mask = 990 video_receiver_config_.aes_iv_mask = transport_video_config_.base.aes_iv_mask;
978 video_sender_config_.rtp_config.aes_iv_mask; 991 video_receiver_config_.aes_key = transport_video_config_.base.aes_key;
979 video_receiver_config_.aes_key =
980 video_sender_config_.rtp_config.aes_key;
981 992
982 Create(); 993 Create();
983 994
984 int frames_counter = 0; 995 int frames_counter = 0;
985 for (; frames_counter < 3; ++frames_counter) { 996 for (; frames_counter < 3; ++frames_counter) {
986 const base::TimeTicks send_time = testing_clock_sender_->NowTicks(); 997 const base::TimeTicks send_time = testing_clock_sender_->NowTicks();
987 SendVideoFrame(frames_counter, send_time); 998 SendVideoFrame(frames_counter, send_time);
988 999
989 test_receiver_video_callback_->AddExpectedResult( 1000 test_receiver_video_callback_->AddExpectedResult(
990 frames_counter, 1001 frames_counter,
991 video_sender_config_.width, 1002 video_sender_config_.width,
992 video_sender_config_.height, 1003 video_sender_config_.height,
993 send_time, 1004 send_time,
994 true); 1005 true);
995 1006
996 RunTasks(kFrameTimerMs); 1007 RunTasks(kFrameTimerMs);
997 1008
998 frame_receiver_->GetRawVideoFrame( 1009 frame_receiver_->GetRawVideoFrame(
999 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 1010 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
1000 test_receiver_video_callback_)); 1011 test_receiver_video_callback_));
1001 } 1012 }
1002 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1013 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1003 EXPECT_EQ(frames_counter, 1014 EXPECT_EQ(frames_counter,
1004 test_receiver_video_callback_->number_times_called()); 1015 test_receiver_video_callback_->number_times_called());
1005 } 1016 }
1006 1017
1007 TEST_F(End2EndTest, CryptoAudio) { 1018 TEST_F(End2EndTest, CryptoAudio) {
1008 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 1019 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
1009 1020
1010 audio_sender_config_.rtp_config.aes_iv_mask = 1021 transport_audio_config_.base.aes_iv_mask =
1011 ConvertFromBase16String("abcdeffedcba12345678900987654321"); 1022 ConvertFromBase16String("abcdeffedcba12345678900987654321");
1012 audio_sender_config_.rtp_config.aes_key = 1023 transport_audio_config_.base.aes_key =
1013 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0"); 1024 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0");
1014 1025
1015 audio_receiver_config_.aes_iv_mask = 1026 audio_receiver_config_.aes_iv_mask = transport_audio_config_.base.aes_iv_mask;
1016 audio_sender_config_.rtp_config.aes_iv_mask; 1027 audio_receiver_config_.aes_key = transport_audio_config_.base.aes_key;
1017 audio_receiver_config_.aes_key =
1018 audio_sender_config_.rtp_config.aes_key;
1019 1028
1020 Create(); 1029 Create();
1021 1030
1022 const int kNumIterations = 3; 1031 const int kNumIterations = 3;
1023 const int kNumAudioFramesPerIteration = 2; 1032 const int kNumAudioFramesPerIteration = 2;
1024 for (int i = 0; i < kNumIterations; ++i) { 1033 for (int i = 0; i < kNumIterations; ++i) {
1025 FeedAudioFrames(kNumAudioFramesPerIteration, true); 1034 FeedAudioFrames(kNumAudioFramesPerIteration, true);
1026 RunTasks(kNumAudioFramesPerIteration * kAudioFrameDurationMs); 1035 RunTasks(kNumAudioFramesPerIteration * kAudioFrameDurationMs);
1027 RequestAudioFrames(kNumAudioFramesPerIteration, true); 1036 RequestAudioFrames(kNumAudioFramesPerIteration, true);
1028 } 1037 }
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 EXPECT_EQ(1000, received_counter); 1269 EXPECT_EQ(1000, received_counter);
1261 } 1270 }
1262 1271
1263 // TODO(pwestin): Add repeatable packet loss test. 1272 // TODO(pwestin): Add repeatable packet loss test.
1264 // TODO(pwestin): Add test for misaligned send get calls. 1273 // TODO(pwestin): Add test for misaligned send get calls.
1265 // TODO(pwestin): Add more tests that does not resample. 1274 // TODO(pwestin): Add more tests that does not resample.
1266 // TODO(pwestin): Add test when we have starvation for our RunTask. 1275 // TODO(pwestin): Add test when we have starvation for our RunTask.
1267 1276
1268 } // namespace cast 1277 } // namespace cast
1269 } // namespace media 1278 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/cast_config.cc ('k') | media/cast/test/sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698