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

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

Issue 562653004: Cast: First stab at implementing adaptive latency (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: refine formula, add comments Created 6 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 // 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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698