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 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 cast_environment_sender_->Logging()->AddRawEventSubscriber( | 467 cast_environment_sender_->Logging()->AddRawEventSubscriber( |
468 &event_subscriber_sender_); | 468 &event_subscriber_sender_); |
469 } | 469 } |
470 | 470 |
471 void Configure(Codec video_codec, | 471 void Configure(Codec video_codec, |
472 Codec audio_codec, | 472 Codec audio_codec, |
473 int audio_sampling_frequency, | 473 int audio_sampling_frequency, |
474 int max_number_of_video_buffers_used) { | 474 int max_number_of_video_buffers_used) { |
475 audio_sender_config_.ssrc = 1; | 475 audio_sender_config_.ssrc = 1; |
476 audio_sender_config_.incoming_feedback_ssrc = 2; | 476 audio_sender_config_.incoming_feedback_ssrc = 2; |
477 audio_sender_config_.target_playout_delay = | 477 audio_sender_config_.max_playout_delay = |
478 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); | 478 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); |
479 audio_sender_config_.rtp_payload_type = 96; | 479 audio_sender_config_.rtp_payload_type = 96; |
480 audio_sender_config_.use_external_encoder = false; | 480 audio_sender_config_.use_external_encoder = false; |
481 audio_sender_config_.frequency = audio_sampling_frequency; | 481 audio_sender_config_.frequency = audio_sampling_frequency; |
482 audio_sender_config_.channels = kAudioChannels; | 482 audio_sender_config_.channels = kAudioChannels; |
483 audio_sender_config_.bitrate = kDefaultAudioEncoderBitrate; | 483 audio_sender_config_.bitrate = kDefaultAudioEncoderBitrate; |
484 audio_sender_config_.codec = audio_codec; | 484 audio_sender_config_.codec = audio_codec; |
485 | 485 |
486 audio_receiver_config_.feedback_ssrc = | 486 audio_receiver_config_.feedback_ssrc = |
487 audio_sender_config_.incoming_feedback_ssrc; | 487 audio_sender_config_.incoming_feedback_ssrc; |
488 audio_receiver_config_.incoming_ssrc = audio_sender_config_.ssrc; | 488 audio_receiver_config_.incoming_ssrc = audio_sender_config_.ssrc; |
489 audio_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; | 489 audio_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; |
490 audio_receiver_config_.rtp_payload_type = | 490 audio_receiver_config_.rtp_payload_type = |
491 audio_sender_config_.rtp_payload_type; | 491 audio_sender_config_.rtp_payload_type; |
492 audio_receiver_config_.frequency = audio_sender_config_.frequency; | 492 audio_receiver_config_.frequency = audio_sender_config_.frequency; |
493 audio_receiver_config_.channels = kAudioChannels; | 493 audio_receiver_config_.channels = kAudioChannels; |
494 audio_receiver_config_.max_frame_rate = 100; | 494 audio_receiver_config_.max_frame_rate = 100; |
495 audio_receiver_config_.codec = audio_sender_config_.codec; | 495 audio_receiver_config_.codec = audio_sender_config_.codec; |
496 | 496 |
497 test_receiver_audio_callback_->SetExpectedSamplingFrequency( | 497 test_receiver_audio_callback_->SetExpectedSamplingFrequency( |
498 audio_receiver_config_.frequency); | 498 audio_receiver_config_.frequency); |
499 | 499 |
500 video_sender_config_.ssrc = 3; | 500 video_sender_config_.ssrc = 3; |
501 video_sender_config_.incoming_feedback_ssrc = 4; | 501 video_sender_config_.incoming_feedback_ssrc = 4; |
502 video_sender_config_.target_playout_delay = | 502 video_sender_config_.max_playout_delay = |
503 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); | 503 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); |
504 video_sender_config_.rtp_payload_type = 97; | 504 video_sender_config_.rtp_payload_type = 97; |
505 video_sender_config_.use_external_encoder = false; | 505 video_sender_config_.use_external_encoder = false; |
506 video_sender_config_.width = kVideoHdWidth; | 506 video_sender_config_.width = kVideoHdWidth; |
507 video_sender_config_.height = kVideoHdHeight; | 507 video_sender_config_.height = kVideoHdHeight; |
508 video_sender_config_.max_bitrate = 50000; | 508 video_sender_config_.max_bitrate = 50000; |
509 video_sender_config_.min_bitrate = 10000; | 509 video_sender_config_.min_bitrate = 10000; |
510 video_sender_config_.start_bitrate = 10000; | 510 video_sender_config_.start_bitrate = 10000; |
511 video_sender_config_.max_qp = 30; | 511 video_sender_config_.max_qp = 30; |
512 video_sender_config_.min_qp = 4; | 512 video_sender_config_.min_qp = 4; |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 } | 988 } |
989 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. | 989 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. |
990 EXPECT_EQ(num_audio_frames_requested, | 990 EXPECT_EQ(num_audio_frames_requested, |
991 test_receiver_audio_callback_->number_times_called()); | 991 test_receiver_audio_callback_->number_times_called()); |
992 EXPECT_EQ(10, test_receiver_video_callback_->number_times_called()); | 992 EXPECT_EQ(10, test_receiver_video_callback_->number_times_called()); |
993 } | 993 } |
994 | 994 |
995 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) { | 995 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) { |
996 Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS, kDefaultAudioSamplingRate, 3); | 996 Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS, kDefaultAudioSamplingRate, 3); |
997 int target_delay = 300; | 997 int target_delay = 300; |
998 video_sender_config_.target_playout_delay = | 998 video_sender_config_.max_playout_delay = |
999 base::TimeDelta::FromMilliseconds(target_delay); | 999 base::TimeDelta::FromMilliseconds(target_delay); |
1000 audio_sender_config_.target_playout_delay = | 1000 audio_sender_config_.max_playout_delay = |
1001 base::TimeDelta::FromMilliseconds(target_delay); | 1001 base::TimeDelta::FromMilliseconds(target_delay); |
1002 video_receiver_config_.rtp_max_delay_ms = target_delay; | 1002 video_receiver_config_.rtp_max_delay_ms = target_delay; |
1003 Create(); | 1003 Create(); |
1004 sender_to_receiver_.DropAllPacketsBelongingToOddFrames(); | 1004 sender_to_receiver_.DropAllPacketsBelongingToOddFrames(); |
1005 | 1005 |
1006 int video_start = kVideoStart; | 1006 int video_start = kVideoStart; |
1007 base::TimeTicks capture_time; | 1007 base::TimeTicks capture_time; |
1008 | 1008 |
1009 int i = 0; | 1009 int i = 0; |
1010 for (; i < 20; ++i) { | 1010 for (; i < 20; ++i) { |
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1429 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); | 1429 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); |
1430 RunTasks(kFrameTimerMs); | 1430 RunTasks(kFrameTimerMs); |
1431 } | 1431 } |
1432 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. | 1432 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. |
1433 | 1433 |
1434 EXPECT_EQ(10000ul, video_ticks_.size()); | 1434 EXPECT_EQ(10000ul, video_ticks_.size()); |
1435 } | 1435 } |
1436 | 1436 |
1437 TEST_F(End2EndTest, TestSetPlayoutDelay) { | 1437 TEST_F(End2EndTest, TestSetPlayoutDelay) { |
1438 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1); | 1438 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16, 32000, 1); |
| 1439 video_sender_config_.min_playout_delay = |
| 1440 video_sender_config_.max_playout_delay; |
| 1441 audio_sender_config_.min_playout_delay = |
| 1442 audio_sender_config_.max_playout_delay; |
| 1443 video_sender_config_.max_playout_delay = base::TimeDelta::FromSeconds(1); |
| 1444 audio_sender_config_.max_playout_delay = base::TimeDelta::FromSeconds(1); |
1439 Create(); | 1445 Create(); |
1440 StartBasicPlayer(); | 1446 StartBasicPlayer(); |
1441 const int kNewDelay = 600; | 1447 const int kNewDelay = 600; |
1442 | 1448 |
1443 int frames_counter = 0; | 1449 int frames_counter = 0; |
1444 for (; frames_counter < 200; ++frames_counter) { | 1450 for (; frames_counter < 200; ++frames_counter) { |
1445 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); | 1451 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); |
1446 RunTasks(kFrameTimerMs); | 1452 RunTasks(kFrameTimerMs); |
1447 } | 1453 } |
1448 cast_sender_->SetTargetPlayoutDelay( | 1454 cast_sender_->SetTargetPlayoutDelay( |
(...skipping 17 matching lines...) Expand all Loading... |
1466 EXPECT_LT(jump, 220u); | 1472 EXPECT_LT(jump, 220u); |
1467 } | 1473 } |
1468 | 1474 |
1469 // TODO(pwestin): Add repeatable packet loss test. | 1475 // TODO(pwestin): Add repeatable packet loss test. |
1470 // TODO(pwestin): Add test for misaligned send get calls. | 1476 // TODO(pwestin): Add test for misaligned send get calls. |
1471 // TODO(pwestin): Add more tests that does not resample. | 1477 // TODO(pwestin): Add more tests that does not resample. |
1472 // TODO(pwestin): Add test when we have starvation for our RunTask. | 1478 // TODO(pwestin): Add test when we have starvation for our RunTask. |
1473 | 1479 |
1474 } // namespace cast | 1480 } // namespace cast |
1475 } // namespace media | 1481 } // namespace media |
OLD | NEW |