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

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

Issue 145443005: Fixes for memory and threading issues in cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix compile Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/test/encode_decode_test.cc ('k') | media/cast/test/receiver.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 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 config.enable_raw_data_collection = true; 333 config.enable_raw_data_collection = true;
334 config.enable_stats_data_collection = true; 334 config.enable_stats_data_collection = true;
335 return config; 335 return config;
336 } 336 }
337 // The actual test class, generate synthetic data for both audio and video and 337 // The actual test class, generate synthetic data for both audio and video and
338 // send those through the sender and receiver and analyzes the result. 338 // send those through the sender and receiver and analyzes the result.
339 class End2EndTest : public ::testing::Test { 339 class End2EndTest : public ::testing::Test {
340 protected: 340 protected:
341 End2EndTest() 341 End2EndTest()
342 : start_time_(), 342 : start_time_(),
343 task_runner_(new test::FakeTaskRunner(&testing_clock_)), 343 testing_clock_(new base::SimpleTestTickClock()),
344 transport_task_runner_(new test::FakeTaskRunner(&testing_clock_)), 344 task_runner_(new test::FakeTaskRunner(testing_clock_)),
345 cast_environment_sender_(new CastEnvironment(&testing_clock_, 345 transport_task_runner_(new test::FakeTaskRunner(testing_clock_)),
346 cast_environment_(new CastEnvironment(
347 scoped_ptr<base::TickClock>(testing_clock_).Pass(),
346 task_runner_, task_runner_, task_runner_, task_runner_, 348 task_runner_, task_runner_, task_runner_, task_runner_,
347 task_runner_, task_runner_, EnableCastLoggingConfig(true))), 349 task_runner_, task_runner_, EnableCastLoggingConfig(true))),
348 cast_environment_receiver_(new CastEnvironment(&testing_clock_, 350 receiver_to_sender_(cast_environment_),
349 task_runner_, task_runner_, task_runner_, task_runner_, 351 sender_to_receiver_(cast_environment_),
350 task_runner_, task_runner_, EnableCastLoggingConfig(false))),
351 receiver_to_sender_(cast_environment_receiver_),
352 sender_to_receiver_(cast_environment_sender_),
353 test_receiver_audio_callback_(new TestReceiverAudioCallback()), 352 test_receiver_audio_callback_(new TestReceiverAudioCallback()),
354 test_receiver_video_callback_(new TestReceiverVideoCallback()) { 353 test_receiver_video_callback_(new TestReceiverVideoCallback()) {
355 testing_clock_.Advance( 354 testing_clock_->Advance(
356 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 355 base::TimeDelta::FromMilliseconds(kStartMillisecond));
357 } 356 }
358 357
359 void SetupConfig(transport::AudioCodec audio_codec, 358 void SetupConfig(transport::AudioCodec audio_codec,
360 int audio_sampling_frequency, 359 int audio_sampling_frequency,
361 // TODO(miu): 3rd arg is meaningless?!? 360 // TODO(miu): 3rd arg is meaningless?!?
362 bool external_audio_decoder, 361 bool external_audio_decoder,
363 int max_number_of_video_buffers_used) { 362 int max_number_of_video_buffers_used) {
364 audio_sender_config_.sender_ssrc = 1; 363 audio_sender_config_.sender_ssrc = 1;
365 audio_sender_config_.incoming_feedback_ssrc = 2; 364 audio_sender_config_.incoming_feedback_ssrc = 2;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 transport_config_.audio_frequency = audio_sender_config_.frequency; 420 transport_config_.audio_frequency = audio_sender_config_.frequency;
422 transport_config_.audio_channels = audio_sender_config_.channels; 421 transport_config_.audio_channels = audio_sender_config_.channels;
423 transport_config_.video_rtp_max_delay_ms = 422 transport_config_.video_rtp_max_delay_ms =
424 video_sender_config_.rtp_max_delay_ms; 423 video_sender_config_.rtp_max_delay_ms;
425 transport_config_.audio_rtp_max_delay_ms = 424 transport_config_.audio_rtp_max_delay_ms =
426 audio_sender_config_.rtp_max_delay_ms; 425 audio_sender_config_.rtp_max_delay_ms;
427 } 426 }
428 427
429 void Create() { 428 void Create() {
430 cast_receiver_.reset(CastReceiver::CreateCastReceiver( 429 cast_receiver_.reset(CastReceiver::CreateCastReceiver(
431 cast_environment_receiver_, 430 cast_environment_,
432 audio_receiver_config_, 431 audio_receiver_config_,
433 video_receiver_config_, 432 video_receiver_config_,
434 &receiver_to_sender_)); 433 &receiver_to_sender_));
435 transport_sender_.reset(new transport::CastTransportSenderImpl( 434 transport_sender_.reset(new transport::CastTransportSenderImpl(
436 &testing_clock_, 435 testing_clock_,
437 transport_config_, 436 transport_config_,
438 base::Bind(&UpdateCastTransportStatus), 437 base::Bind(&UpdateCastTransportStatus),
439 transport_task_runner_)); 438 transport_task_runner_));
440 transport_sender_->InsertFakeTransportForTesting(&sender_to_receiver_); 439 transport_sender_->InsertFakeTransportForTesting(&sender_to_receiver_);
441 440
442 cast_sender_.reset(CastSender::CreateCastSender(cast_environment_sender_, 441 cast_sender_.reset(CastSender::CreateCastSender(cast_environment_,
443 audio_sender_config_, 442 audio_sender_config_,
444 video_sender_config_, 443 video_sender_config_,
445 NULL, 444 NULL,
446 transport_sender_.get())); 445 transport_sender_.get()));
447 446
448 receiver_to_sender_.SetPacketReceiver(cast_sender_->packet_receiver()); 447 receiver_to_sender_.SetPacketReceiver(cast_sender_->packet_receiver());
449 sender_to_receiver_.SetPacketReceiver(cast_receiver_->packet_receiver()); 448 sender_to_receiver_.SetPacketReceiver(cast_receiver_->packet_receiver());
450 449
451 frame_input_ = cast_sender_->frame_input(); 450 frame_input_ = cast_sender_->frame_input();
452 frame_receiver_ = cast_receiver_->frame_receiver(); 451 frame_receiver_ = cast_receiver_->frame_receiver();
453 452
454 audio_bus_factory_.reset(new TestAudioBusFactory( 453 audio_bus_factory_.reset(new TestAudioBusFactory(
455 audio_sender_config_.channels, audio_sender_config_.frequency, 454 audio_sender_config_.channels, audio_sender_config_.frequency,
456 kSoundFrequency, kSoundVolume)); 455 kSoundFrequency, kSoundVolume));
457 } 456 }
458 457
459 virtual ~End2EndTest() {} 458 virtual ~End2EndTest() {}
460 459
461 void SendVideoFrame(int start_value, const base::TimeTicks& capture_time) { 460 void SendVideoFrame(int start_value, const base::TimeTicks& capture_time) {
462 if (start_time_.is_null()) 461 if (start_time_.is_null())
463 start_time_ = testing_clock_.NowTicks(); 462 start_time_ = testing_clock_->NowTicks();
464 start_time_ = testing_clock_.NowTicks(); 463 start_time_ = testing_clock_->NowTicks();
465 base::TimeDelta time_diff = testing_clock_.NowTicks() - start_time_; 464 base::TimeDelta time_diff = testing_clock_->NowTicks() - start_time_;
466 gfx::Size size(kVideoWidth, kVideoHeight); 465 gfx::Size size(kVideoWidth, kVideoHeight);
467 EXPECT_TRUE(VideoFrame::IsValidConfig(VideoFrame::I420, 466 EXPECT_TRUE(VideoFrame::IsValidConfig(VideoFrame::I420,
468 size, gfx::Rect(size), size)); 467 size, gfx::Rect(size), size));
469 scoped_refptr<media::VideoFrame> video_frame = 468 scoped_refptr<media::VideoFrame> video_frame =
470 media::VideoFrame::CreateFrame( 469 media::VideoFrame::CreateFrame(
471 VideoFrame::I420, size, gfx::Rect(size), size, time_diff); 470 VideoFrame::I420, size, gfx::Rect(size), size, time_diff);
472 PopulateVideoFrame(video_frame, start_value); 471 PopulateVideoFrame(video_frame, start_value);
473 frame_input_->InsertRawVideoFrame(video_frame, capture_time); 472 frame_input_->InsertRawVideoFrame(video_frame, capture_time);
474 } 473 }
475 474
476 void RunTasks(int during_ms) { 475 void RunTasks(int during_ms) {
477 for (int i = 0; i < during_ms; ++i) { 476 for (int i = 0; i < during_ms; ++i) {
478 // Call process the timers every 1 ms. 477 // Call process the timers every 1 ms.
479 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(1)); 478 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(1));
480 task_runner_->RunTasks(); 479 task_runner_->RunTasks();
481 transport_task_runner_->RunTasks(); 480 transport_task_runner_->RunTasks();
482 } 481 }
483 } 482 }
484 483
485 AudioReceiverConfig audio_receiver_config_; 484 AudioReceiverConfig audio_receiver_config_;
486 VideoReceiverConfig video_receiver_config_; 485 VideoReceiverConfig video_receiver_config_;
487 AudioSenderConfig audio_sender_config_; 486 AudioSenderConfig audio_sender_config_;
488 VideoSenderConfig video_sender_config_; 487 VideoSenderConfig video_sender_config_;
489 transport::CastTransportConfig transport_config_; 488 transport::CastTransportConfig transport_config_;
490 489
491 base::SimpleTestTickClock testing_clock_;
492 base::TimeTicks start_time_; 490 base::TimeTicks start_time_;
491 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
493 scoped_refptr<test::FakeTaskRunner> task_runner_; 492 scoped_refptr<test::FakeTaskRunner> task_runner_;
494 scoped_refptr<test::FakeTaskRunner> transport_task_runner_; 493 scoped_refptr<test::FakeTaskRunner> transport_task_runner_;
495 scoped_refptr<CastEnvironment> cast_environment_sender_; 494 scoped_refptr<CastEnvironment> cast_environment_;
496 scoped_refptr<CastEnvironment> cast_environment_receiver_;
497 495
498 LoopBackTransport receiver_to_sender_; 496 LoopBackTransport receiver_to_sender_;
499 LoopBackTransport sender_to_receiver_; 497 LoopBackTransport sender_to_receiver_;
500 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_; 498 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_;
501 499
502 scoped_ptr<CastReceiver> cast_receiver_; 500 scoped_ptr<CastReceiver> cast_receiver_;
503 scoped_ptr<CastSender> cast_sender_; 501 scoped_ptr<CastSender> cast_sender_;
504 scoped_refptr<FrameInput> frame_input_; 502 scoped_refptr<FrameInput> frame_input_;
505 scoped_refptr<FrameReceiver> frame_receiver_; 503 scoped_refptr<FrameReceiver> frame_receiver_;
506 504
507 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; 505 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_;
508 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; 506 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_;
509 507
510 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; 508 scoped_ptr<TestAudioBusFactory> audio_bus_factory_;
511 }; 509 };
512 510
513 // Audio and video test without packet loss using raw PCM 16 audio "codec"; 511 // Audio and video test without packet loss using raw PCM 16 audio "codec";
514 // This test is too slow. Disabled for now: crbug.com/329333. 512 // This test is too slow. Disabled for now: crbug.com/329333.
515 TEST_F(End2EndTest, DISABLED_LoopNoLossPcm16) { 513 TEST_F(End2EndTest, DISABLED_LoopNoLossPcm16) {
516 SetupConfig(transport::kPcm16, 32000, false, 1); 514 SetupConfig(transport::kPcm16, 32000, false, 1);
517 Create(); 515 Create();
518 516
519 int video_start = 1; 517 int video_start = 1;
520 int audio_diff = kFrameTimerMs; 518 int audio_diff = kFrameTimerMs;
521 int i = 0; 519 int i = 0;
522 520
523 for (; i < 10; ++i) { 521 for (; i < 10; ++i) {
524 int num_10ms_blocks = audio_diff / 10; 522 int num_10ms_blocks = audio_diff / 10;
525 audio_diff -= num_10ms_blocks * 10; 523 audio_diff -= num_10ms_blocks * 10;
526 base::TimeTicks send_time = testing_clock_.NowTicks(); 524 base::TimeTicks send_time = testing_clock_->NowTicks();
527 525
528 test_receiver_video_callback_->AddExpectedResult(video_start, 526 test_receiver_video_callback_->AddExpectedResult(video_start,
529 video_sender_config_.width, video_sender_config_.height, send_time); 527 video_sender_config_.width, video_sender_config_.height, send_time);
530 528
531 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 529 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
532 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); 530 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks));
533 531
534 if (i != 0) { 532 if (i != 0) {
535 // Due to the re-sampler and NetEq in the webrtc AudioCodingModule the 533 // Due to the re-sampler and NetEq in the webrtc AudioCodingModule the
536 // first samples will be 0 and then slowly ramp up to its real amplitude; 534 // first samples will be 0 and then slowly ramp up to its real amplitude;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 #define MAYBE_LoopNoLossPcm16ExternalDecoder LoopNoLossPcm16ExternalDecoder 580 #define MAYBE_LoopNoLossPcm16ExternalDecoder LoopNoLossPcm16ExternalDecoder
583 #endif 581 #endif
584 // This tests our external decoder interface for Audio. 582 // This tests our external decoder interface for Audio.
585 // Audio test without packet loss using raw PCM 16 audio "codec"; 583 // Audio test without packet loss using raw PCM 16 audio "codec";
586 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16ExternalDecoder) { 584 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16ExternalDecoder) {
587 SetupConfig(transport::kPcm16, 32000, true, 1); 585 SetupConfig(transport::kPcm16, 32000, true, 1);
588 Create(); 586 Create();
589 587
590 int i = 0; 588 int i = 0;
591 for (; i < 10; ++i) { 589 for (; i < 10; ++i) {
592 base::TimeTicks send_time = testing_clock_.NowTicks(); 590 base::TimeTicks send_time = testing_clock_->NowTicks();
593 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 591 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
594 base::TimeDelta::FromMilliseconds(10))); 592 base::TimeDelta::FromMilliseconds(10)));
595 test_receiver_audio_callback_->AddExpectedResult( 593 test_receiver_audio_callback_->AddExpectedResult(
596 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), 594 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency),
597 1, send_time); 595 1, send_time);
598 596
599 AudioBus* const audio_bus_ptr = audio_bus.get(); 597 AudioBus* const audio_bus_ptr = audio_bus.get();
600 frame_input_->InsertAudio(audio_bus_ptr, send_time, 598 frame_input_->InsertAudio(audio_bus_ptr, send_time,
601 base::Bind(&OwnThatAudioBus, base::Passed(&audio_bus))); 599 base::Bind(&OwnThatAudioBus, base::Passed(&audio_bus)));
602 600
(...skipping 13 matching lines...) Expand all
616 #define MAYBE_LoopNoLossOpus LoopNoLossOpus 614 #define MAYBE_LoopNoLossOpus LoopNoLossOpus
617 #endif 615 #endif
618 // This tests our Opus audio codec without video. 616 // This tests our Opus audio codec without video.
619 TEST_F(End2EndTest, MAYBE_LoopNoLossOpus) { 617 TEST_F(End2EndTest, MAYBE_LoopNoLossOpus) {
620 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 1); 618 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 1);
621 Create(); 619 Create();
622 620
623 int i = 0; 621 int i = 0;
624 for (; i < 10; ++i) { 622 for (; i < 10; ++i) {
625 int num_10ms_blocks = 3; 623 int num_10ms_blocks = 3;
626 base::TimeTicks send_time = testing_clock_.NowTicks(); 624 base::TimeTicks send_time = testing_clock_->NowTicks();
627 625
628 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 626 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
629 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); 627 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks));
630 628
631 if (i != 0) { 629 if (i != 0) {
632 test_receiver_audio_callback_->AddExpectedResult( 630 test_receiver_audio_callback_->AddExpectedResult(
633 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), 631 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency),
634 num_10ms_blocks, send_time); 632 num_10ms_blocks, send_time);
635 } 633 }
636 634
(...skipping 29 matching lines...) Expand all
666 664
667 int video_start = 1; 665 int video_start = 1;
668 int audio_diff = kFrameTimerMs; 666 int audio_diff = kFrameTimerMs;
669 667
670 sender_to_receiver_.SetSendPackets(false); 668 sender_to_receiver_.SetSendPackets(false);
671 669
672 for (int i = 0; i < 3; ++i) { 670 for (int i = 0; i < 3; ++i) {
673 int num_10ms_blocks = audio_diff / 10; 671 int num_10ms_blocks = audio_diff / 10;
674 audio_diff -= num_10ms_blocks * 10; 672 audio_diff -= num_10ms_blocks * 10;
675 673
676 base::TimeTicks send_time = testing_clock_.NowTicks(); 674 base::TimeTicks send_time = testing_clock_->NowTicks();
677 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 675 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
678 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); 676 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks));
679 677
680 AudioBus* const audio_bus_ptr = audio_bus.get(); 678 AudioBus* const audio_bus_ptr = audio_bus.get();
681 frame_input_->InsertAudio(audio_bus_ptr, send_time, 679 frame_input_->InsertAudio(audio_bus_ptr, send_time,
682 base::Bind(&OwnThatAudioBus, base::Passed(&audio_bus))); 680 base::Bind(&OwnThatAudioBus, base::Passed(&audio_bus)));
683 681
684 SendVideoFrame(video_start, send_time); 682 SendVideoFrame(video_start, send_time);
685 RunTasks(kFrameTimerMs); 683 RunTasks(kFrameTimerMs);
686 audio_diff += kFrameTimerMs; 684 audio_diff += kFrameTimerMs;
687 video_start++; 685 video_start++;
688 } 686 }
689 RunTasks(100); 687 RunTasks(100);
690 sender_to_receiver_.SetSendPackets(true); 688 sender_to_receiver_.SetSendPackets(true);
691 689
692 int j = 0; 690 int j = 0;
693 const int number_of_audio_frames_to_ignore = 3; 691 const int number_of_audio_frames_to_ignore = 3;
694 for (; j < 10; ++j) { 692 for (; j < 10; ++j) {
695 int num_10ms_blocks = audio_diff / 10; 693 int num_10ms_blocks = audio_diff / 10;
696 audio_diff -= num_10ms_blocks * 10; 694 audio_diff -= num_10ms_blocks * 10;
697 base::TimeTicks send_time = testing_clock_.NowTicks(); 695 base::TimeTicks send_time = testing_clock_->NowTicks();
698 696
699 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 697 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
700 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); 698 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks));
701 699
702 if (j >= number_of_audio_frames_to_ignore) { 700 if (j >= number_of_audio_frames_to_ignore) {
703 test_receiver_audio_callback_->AddExpectedResult( 701 test_receiver_audio_callback_->AddExpectedResult(
704 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), 702 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency),
705 num_10ms_blocks, send_time); 703 num_10ms_blocks, send_time);
706 } 704 }
707 705
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 } 737 }
740 738
741 // This tests a network glitch lasting for 10 video frames. 739 // This tests a network glitch lasting for 10 video frames.
742 TEST_F(End2EndTest, GlitchWith3Buffers) { 740 TEST_F(End2EndTest, GlitchWith3Buffers) {
743 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); 741 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3);
744 video_sender_config_.rtp_max_delay_ms = 67; 742 video_sender_config_.rtp_max_delay_ms = 67;
745 video_receiver_config_.rtp_max_delay_ms = 67; 743 video_receiver_config_.rtp_max_delay_ms = 67;
746 Create(); 744 Create();
747 745
748 int video_start = 50; 746 int video_start = 50;
749 base::TimeTicks send_time = testing_clock_.NowTicks(); 747 base::TimeTicks send_time = testing_clock_->NowTicks();
750 SendVideoFrame(video_start, send_time); 748 SendVideoFrame(video_start, send_time);
751 RunTasks(kFrameTimerMs); 749 RunTasks(kFrameTimerMs);
752 750
753 test_receiver_video_callback_->AddExpectedResult(video_start, 751 test_receiver_video_callback_->AddExpectedResult(video_start,
754 video_sender_config_.width, video_sender_config_.height, send_time); 752 video_sender_config_.width, video_sender_config_.height, send_time);
755 frame_receiver_->GetRawVideoFrame( 753 frame_receiver_->GetRawVideoFrame(
756 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 754 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
757 test_receiver_video_callback_)); 755 test_receiver_video_callback_));
758 756
759 RunTasks(750); // Make sure that we send a RTCP packet. 757 RunTasks(750); // Make sure that we send a RTCP packet.
760 758
761 video_start++; 759 video_start++;
762 760
763 // Introduce a glitch lasting for 10 frames. 761 // Introduce a glitch lasting for 10 frames.
764 sender_to_receiver_.SetSendPackets(false); 762 sender_to_receiver_.SetSendPackets(false);
765 for (int i = 0; i < 10; ++i) { 763 for (int i = 0; i < 10; ++i) {
766 send_time = testing_clock_.NowTicks(); 764 send_time = testing_clock_->NowTicks();
767 // First 3 will be sent and lost. 765 // First 3 will be sent and lost.
768 SendVideoFrame(video_start, send_time); 766 SendVideoFrame(video_start, send_time);
769 RunTasks(kFrameTimerMs); 767 RunTasks(kFrameTimerMs);
770 video_start++; 768 video_start++;
771 } 769 }
772 sender_to_receiver_.SetSendPackets(true); 770 sender_to_receiver_.SetSendPackets(true);
773 RunTasks(100); 771 RunTasks(100);
774 send_time = testing_clock_.NowTicks(); 772 send_time = testing_clock_->NowTicks();
775 773
776 // Frame 1 should be acked by now and we should have an opening to send 4. 774 // Frame 1 should be acked by now and we should have an opening to send 4.
777 SendVideoFrame(video_start, send_time); 775 SendVideoFrame(video_start, send_time);
778 RunTasks(kFrameTimerMs); 776 RunTasks(kFrameTimerMs);
779 777
780 test_receiver_video_callback_->AddExpectedResult(video_start, 778 test_receiver_video_callback_->AddExpectedResult(video_start,
781 video_sender_config_.width, video_sender_config_.height, send_time); 779 video_sender_config_.width, video_sender_config_.height, send_time);
782 780
783 frame_receiver_->GetRawVideoFrame( 781 frame_receiver_->GetRawVideoFrame(
784 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 782 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
785 test_receiver_video_callback_)); 783 test_receiver_video_callback_));
786 784
787 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 785 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
788 EXPECT_EQ(2, test_receiver_video_callback_->number_times_called()); 786 EXPECT_EQ(2, test_receiver_video_callback_->number_times_called());
789 } 787 }
790 788
791 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) { 789 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) {
792 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); 790 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3);
793 video_sender_config_.rtp_max_delay_ms = 67; 791 video_sender_config_.rtp_max_delay_ms = 67;
794 video_receiver_config_.rtp_max_delay_ms = 67; 792 video_receiver_config_.rtp_max_delay_ms = 67;
795 Create(); 793 Create();
796 sender_to_receiver_.DropAllPacketsBelongingToOddFrames(); 794 sender_to_receiver_.DropAllPacketsBelongingToOddFrames();
797 795
798 int video_start = 50; 796 int video_start = 50;
799 base::TimeTicks send_time; 797 base::TimeTicks send_time;
800 798
801 int i = 0; 799 int i = 0;
802 for (; i < 20; ++i) { 800 for (; i < 20; ++i) {
803 send_time = testing_clock_.NowTicks(); 801 send_time = testing_clock_->NowTicks();
804 SendVideoFrame(video_start, send_time); 802 SendVideoFrame(video_start, send_time);
805 803
806 if (i % 2 == 0) { 804 if (i % 2 == 0) {
807 test_receiver_video_callback_->AddExpectedResult(video_start, 805 test_receiver_video_callback_->AddExpectedResult(video_start,
808 video_sender_config_.width, video_sender_config_.height, send_time); 806 video_sender_config_.width, video_sender_config_.height, send_time);
809 807
810 // GetRawVideoFrame will not return the frame until we are close in 808 // GetRawVideoFrame will not return the frame until we are close in
811 // time before we should render the frame. 809 // time before we should render the frame.
812 frame_receiver_->GetRawVideoFrame( 810 frame_receiver_->GetRawVideoFrame(
813 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 811 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
814 test_receiver_video_callback_)); 812 test_receiver_video_callback_));
815 } 813 }
816 RunTasks(kFrameTimerMs); 814 RunTasks(kFrameTimerMs);
817 video_start++; 815 video_start++;
818 } 816 }
819 std::cout << std::endl; 817 std::cout << std::endl;
820 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 818 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
821 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called()); 819 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called());
822 } 820 }
823 821
824 TEST_F(End2EndTest, ResetReferenceFrameId) { 822 TEST_F(End2EndTest, ResetReferenceFrameId) {
825 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); 823 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3);
826 video_sender_config_.rtp_max_delay_ms = 67; 824 video_sender_config_.rtp_max_delay_ms = 67;
827 video_receiver_config_.rtp_max_delay_ms = 67; 825 video_receiver_config_.rtp_max_delay_ms = 67;
828 Create(); 826 Create();
829 sender_to_receiver_.AlwaysResetReferenceFrameId(); 827 sender_to_receiver_.AlwaysResetReferenceFrameId();
830 828
831 int frames_counter = 0; 829 int frames_counter = 0;
832 for (; frames_counter < 20; ++frames_counter) { 830 for (; frames_counter < 20; ++frames_counter) {
833 const base::TimeTicks send_time = testing_clock_.NowTicks(); 831 const base::TimeTicks send_time = testing_clock_->NowTicks();
834 SendVideoFrame(frames_counter, send_time); 832 SendVideoFrame(frames_counter, send_time);
835 833
836 test_receiver_video_callback_->AddExpectedResult(frames_counter, 834 test_receiver_video_callback_->AddExpectedResult(frames_counter,
837 video_sender_config_.width, video_sender_config_.height, send_time); 835 video_sender_config_.width, video_sender_config_.height, send_time);
838 836
839 // GetRawVideoFrame will not return the frame until we are close to the 837 // GetRawVideoFrame will not return the frame until we are close to the
840 // time in which we should render the frame. 838 // time in which we should render the frame.
841 frame_receiver_->GetRawVideoFrame( 839 frame_receiver_->GetRawVideoFrame(
842 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 840 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
843 test_receiver_video_callback_)); 841 test_receiver_video_callback_));
(...skipping 12 matching lines...) Expand all
856 transport_config_.aes_key = 854 transport_config_.aes_key =
857 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef"); 855 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef");
858 856
859 video_receiver_config_.aes_iv_mask = transport_config_.aes_iv_mask; 857 video_receiver_config_.aes_iv_mask = transport_config_.aes_iv_mask;
860 video_receiver_config_.aes_key = transport_config_.aes_key; 858 video_receiver_config_.aes_key = transport_config_.aes_key;
861 859
862 Create(); 860 Create();
863 861
864 int frames_counter = 0; 862 int frames_counter = 0;
865 for (; frames_counter < 3; ++frames_counter) { 863 for (; frames_counter < 3; ++frames_counter) {
866 const base::TimeTicks send_time = testing_clock_.NowTicks(); 864 const base::TimeTicks send_time = testing_clock_->NowTicks();
867 865
868 SendVideoFrame(frames_counter, send_time); 866 SendVideoFrame(frames_counter, send_time);
869 867
870 test_receiver_video_callback_->AddExpectedResult(frames_counter, 868 test_receiver_video_callback_->AddExpectedResult(frames_counter,
871 video_sender_config_.width, video_sender_config_.height, send_time); 869 video_sender_config_.width, video_sender_config_.height, send_time);
872 870
873 // GetRawVideoFrame will not return the frame until we are close to the 871 // GetRawVideoFrame will not return the frame until we are close to the
874 // time in which we should render the frame. 872 // time in which we should render the frame.
875 frame_receiver_->GetRawVideoFrame( 873 frame_receiver_->GetRawVideoFrame(
876 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 874 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
(...skipping 21 matching lines...) Expand all
898 896
899 audio_receiver_config_.aes_iv_mask = transport_config_.aes_iv_mask; 897 audio_receiver_config_.aes_iv_mask = transport_config_.aes_iv_mask;
900 audio_receiver_config_.aes_key = transport_config_.aes_key; 898 audio_receiver_config_.aes_key = transport_config_.aes_key;
901 899
902 Create(); 900 Create();
903 901
904 int frames_counter = 0; 902 int frames_counter = 0;
905 for (; frames_counter < 3; ++frames_counter) { 903 for (; frames_counter < 3; ++frames_counter) {
906 int num_10ms_blocks = 2; 904 int num_10ms_blocks = 2;
907 905
908 const base::TimeTicks send_time = testing_clock_.NowTicks(); 906 const base::TimeTicks send_time = testing_clock_->NowTicks();
909 907
910 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 908 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
911 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); 909 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks));
912 910
913 if (frames_counter != 0) { 911 if (frames_counter != 0) {
914 // Due to the re-sampler and NetEq in the webrtc AudioCodingModule the 912 // Due to the re-sampler and NetEq in the webrtc AudioCodingModule the
915 // first samples will be 0 and then slowly ramp up to its real amplitude; 913 // first samples will be 0 and then slowly ramp up to its real amplitude;
916 // ignore the first frame. 914 // ignore the first frame.
917 test_receiver_audio_callback_->AddExpectedResult( 915 test_receiver_audio_callback_->AddExpectedResult(
918 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), 916 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency),
(...skipping 24 matching lines...) Expand all
943 941
944 // Video test without packet loss; This test is targeted at testing the logging 942 // Video test without packet loss; This test is targeted at testing the logging
945 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. 943 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16.
946 TEST_F(End2EndTest, VideoLogging) { 944 TEST_F(End2EndTest, VideoLogging) {
947 SetupConfig(transport::kPcm16, 32000, false, 1); 945 SetupConfig(transport::kPcm16, 32000, false, 1);
948 Create(); 946 Create();
949 947
950 int video_start = 1; 948 int video_start = 1;
951 int i = 0; 949 int i = 0;
952 for (; i < 1; ++i) { 950 for (; i < 1; ++i) {
953 base::TimeTicks send_time = testing_clock_.NowTicks(); 951 base::TimeTicks send_time = testing_clock_->NowTicks();
954 test_receiver_video_callback_->AddExpectedResult(video_start, 952 test_receiver_video_callback_->AddExpectedResult(video_start,
955 video_sender_config_.width, video_sender_config_.height, send_time); 953 video_sender_config_.width, video_sender_config_.height, send_time);
956 954
957 SendVideoFrame(video_start, send_time); 955 SendVideoFrame(video_start, send_time);
958 RunTasks(kFrameTimerMs); 956 RunTasks(kFrameTimerMs);
959 957
960 frame_receiver_->GetRawVideoFrame( 958 frame_receiver_->GetRawVideoFrame(
961 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 959 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
962 test_receiver_video_callback_)); 960 test_receiver_video_callback_));
963 961
964 video_start++; 962 video_start++;
965 } 963 }
966 964
967 // Basic tests. 965 // Basic tests.
968 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 966 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
969 EXPECT_EQ(i, test_receiver_video_callback_->number_times_called()); 967 EXPECT_EQ(i, test_receiver_video_callback_->number_times_called());
970 968
971 // Sender logging tests. 969 // Sender logging tests.
972 LoggingImpl* sender_log = cast_environment_sender_->Logging(); 970 LoggingImpl* sender_log = cast_environment_->Logging();
973 971
974 // Verify that all frames and all required events were logged. 972 // Verify that all frames and all required events were logged.
975 FrameRawMap frame_raw_log = sender_log->GetFrameRawData(); 973 FrameRawMap frame_raw_log = sender_log->GetFrameRawData();
976 974
977 // Every frame should have only one entry. 975 // Every frame should have only one entry.
978 EXPECT_EQ(static_cast<unsigned int>(i), frame_raw_log.size()); 976 EXPECT_EQ(static_cast<unsigned int>(i), frame_raw_log.size());
979 FrameRawMap::const_iterator frame_it = frame_raw_log.begin(); 977 FrameRawMap::const_iterator frame_it = frame_raw_log.begin();
980 978
981 // Choose a video frame, and verify that all events were logged. 979 // Choose a video frame, and verify that all events were logged.
982 std::vector<CastLoggingEvent> event_log = frame_it->second.type; 980 std::vector<CastLoggingEvent> event_log = frame_it->second.type;
(...skipping 29 matching lines...) Expand all
1012 // Packet logging. 1010 // Packet logging.
1013 // Verify that all packet related events were logged. 1011 // Verify that all packet related events were logged.
1014 PacketRawMap packet_raw_log = sender_log->GetPacketRawData(); 1012 PacketRawMap packet_raw_log = sender_log->GetPacketRawData();
1015 // Every rtp_timestamp should have only one entry. 1013 // Every rtp_timestamp should have only one entry.
1016 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size()); 1014 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size());
1017 PacketRawMap::const_iterator packet_it = packet_raw_log.begin(); 1015 PacketRawMap::const_iterator packet_it = packet_raw_log.begin();
1018 // Choose a packet, and verify that all events were logged. 1016 // Choose a packet, and verify that all events were logged.
1019 event_log = (++(packet_it->second.packet_map.begin()))->second.type; 1017 event_log = (++(packet_it->second.packet_map.begin()))->second.type;
1020 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 1018 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
1021 kVideoPacketReceived)) != event_log.end()); 1019 kVideoPacketReceived)) != event_log.end());
1022 // Verify that there were no other events logged with respect to this frame.
1023 EXPECT_EQ(1u, event_log.size());
1024 1020
1025 RunTasks(750); // Make sure that we send a RTCP message with the log. 1021 RunTasks(750); // Make sure that we send a RTCP message with the log.
1026 1022
1027 // Receiver logging tests. 1023 // Receiver logging tests.
1028 LoggingImpl* receiver_log = cast_environment_receiver_->Logging(); 1024 LoggingImpl* receiver_log = cast_environment_->Logging();
1029 1025
1030 // Verify that all frames and all required events were logged. 1026 // Verify that all frames and all required events were logged.
1031 frame_raw_log = receiver_log->GetFrameRawData(); 1027 frame_raw_log = receiver_log->GetFrameRawData();
1032 EXPECT_EQ(static_cast<unsigned int>(i), frame_raw_log.size()); 1028 EXPECT_EQ(static_cast<unsigned int>(i), frame_raw_log.size());
1033 frame_it = frame_raw_log.begin(); 1029 frame_it = frame_raw_log.begin();
1034 1030
1035 // Choose a video frame, and verify that all events were logged. 1031 // Choose a video frame, and verify that all events were logged.
1036 event_log = frame_it->second.type; 1032 event_log = frame_it->second.type;
1037 1033
1038 event_it = std::find(event_log.begin(), event_log.end(), 1034 event_it = std::find(event_log.begin(), event_log.end(),
1039 kVideoFrameEncoded); 1035 kVideoFrameEncoded);
1040 EXPECT_TRUE(event_it != event_log.end()); 1036 EXPECT_TRUE(event_it != event_log.end());
1041 1037
1042 event_it = std::find(event_log.begin(), event_log.end(), 1038 event_it = std::find(event_log.begin(), event_log.end(),
1043 kVideoRenderDelay); 1039 kVideoRenderDelay);
1044 1040
1045 EXPECT_TRUE(event_it != event_log.end()); 1041 EXPECT_TRUE(event_it != event_log.end());
1046 EXPECT_EQ(2u, event_log.size());
1047 } 1042 }
1048 1043
1049 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 1044 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563
1050 #if defined(OS_WIN) 1045 #if defined(OS_WIN)
1051 #define MAYBE_AudioLogging DISABLED_AudioLogging 1046 #define MAYBE_AudioLogging DISABLED_AudioLogging
1052 #else 1047 #else
1053 #define MAYBE_AudioLogging AudioLogging 1048 #define MAYBE_AudioLogging AudioLogging
1054 #endif 1049 #endif
1055 // Audio test without packet loss; This test is targeted at testing the logging 1050 // Audio test without packet loss; This test is targeted at testing the logging
1056 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. 1051 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16.
1057 TEST_F(End2EndTest, MAYBE_AudioLogging) { 1052 TEST_F(End2EndTest, MAYBE_AudioLogging) {
1058 SetupConfig(transport::kPcm16, 32000, false, 1); 1053 SetupConfig(transport::kPcm16, 32000, false, 1);
1059 Create(); 1054 Create();
1060 1055
1061 int audio_diff = kFrameTimerMs; 1056 int audio_diff = kFrameTimerMs;
1062 int i = 0; 1057 int i = 0;
1063 1058
1064 for (; i < 10; ++i) { 1059 for (; i < 10; ++i) {
1065 int num_10ms_blocks = audio_diff / 10; 1060 int num_10ms_blocks = audio_diff / 10;
1066 audio_diff -= num_10ms_blocks * 10; 1061 audio_diff -= num_10ms_blocks * 10;
1067 base::TimeTicks send_time = testing_clock_.NowTicks(); 1062 base::TimeTicks send_time = testing_clock_->NowTicks();
1068 1063
1069 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 1064 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
1070 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); 1065 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks));
1071 1066
1072 if (i != 0) { 1067 if (i != 0) {
1073 // Due to the re-sampler and NetEq in the webrtc AudioCodingModule the 1068 // Due to the re-sampler and NetEq in the webrtc AudioCodingModule the
1074 // first samples will be 0 and then slowly ramp up to its real amplitude; 1069 // first samples will be 0 and then slowly ramp up to its real amplitude;
1075 // ignore the first frame. 1070 // ignore the first frame.
1076 test_receiver_audio_callback_->AddExpectedResult( 1071 test_receiver_audio_callback_->AddExpectedResult(
1077 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), 1072 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency),
(...skipping 18 matching lines...) Expand all
1096 base::Bind(&TestReceiverAudioCallback::CheckPcmAudioFrame, 1091 base::Bind(&TestReceiverAudioCallback::CheckPcmAudioFrame,
1097 test_receiver_audio_callback_)); 1092 test_receiver_audio_callback_));
1098 } 1093 }
1099 } 1094 }
1100 1095
1101 // Basic tests. 1096 // Basic tests.
1102 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 1097 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
1103 //EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called()); 1098 //EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called());
1104 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called()); 1099 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called());
1105 // Logging tests. 1100 // Logging tests.
1106 LoggingImpl* sender_log = cast_environment_sender_->Logging(); 1101 LoggingImpl* sender_log = cast_environment_->Logging();
1107 // Verify that all frames and all required events were logged. 1102 // Verify that all frames and all required events were logged.
1108 FrameRawMap frame_raw_log = sender_log->GetFrameRawData(); 1103 FrameRawMap frame_raw_log = sender_log->GetFrameRawData();
1109 // TODO(mikhal): Results are wrong. Need to resolve passing/calculation of 1104 // TODO(mikhal): Results are wrong. Need to resolve passing/calculation of
1110 // rtp_timestamp for audio for this to work. 1105 // rtp_timestamp for audio for this to work.
1111 // Should have logged both audio and video. Every frame should have only one 1106 // Should have logged both audio and video. Every frame should have only one
1112 // entry. 1107 // entry.
1113 //EXPECT_EQ(static_cast<unsigned int>(i - 1), frame_raw_log.size()); 1108 //EXPECT_EQ(static_cast<unsigned int>(i - 1), frame_raw_log.size());
1114 FrameRawMap::const_iterator frame_it = frame_raw_log.begin(); 1109 FrameRawMap::const_iterator frame_it = frame_raw_log.begin();
1115 // Choose a video frame, and verify that all events were logged. 1110 // Choose a video frame, and verify that all events were logged.
1116 std::vector<CastLoggingEvent> event_log = frame_it->second.type; 1111 std::vector<CastLoggingEvent> event_log = frame_it->second.type;
(...skipping 11 matching lines...) Expand all
1128 } 1123 }
1129 1124
1130 1125
1131 // TODO(pwestin): Add repeatable packet loss test. 1126 // TODO(pwestin): Add repeatable packet loss test.
1132 // TODO(pwestin): Add test for misaligned send get calls. 1127 // TODO(pwestin): Add test for misaligned send get calls.
1133 // TODO(pwestin): Add more tests that does not resample. 1128 // TODO(pwestin): Add more tests that does not resample.
1134 // TODO(pwestin): Add test when we have starvation for our RunTask. 1129 // TODO(pwestin): Add test when we have starvation for our RunTask.
1135 1130
1136 } // namespace cast 1131 } // namespace cast
1137 } // namespace media 1132 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/test/encode_decode_test.cc ('k') | media/cast/test/receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698