| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |