OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/environment.h" | 7 #include "base/environment.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 EXPECT_TRUE(CreateAndInitializeCapturer(webrtc_audio_device.get())); | 489 EXPECT_TRUE(CreateAndInitializeCapturer(webrtc_audio_device.get())); |
490 EXPECT_EQ(0, err); | 490 EXPECT_EQ(0, err); |
491 EXPECT_EQ(0, base->Terminate()); | 491 EXPECT_EQ(0, base->Terminate()); |
492 } | 492 } |
493 | 493 |
494 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output | 494 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output |
495 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will | 495 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will |
496 // be utilized to implement the actual audio path. The test registers a | 496 // be utilized to implement the actual audio path. The test registers a |
497 // webrtc::VoEExternalMedia implementation to hijack the output audio and | 497 // webrtc::VoEExternalMedia implementation to hijack the output audio and |
498 // verify that streaming starts correctly. | 498 // verify that streaming starts correctly. |
499 // Disabled when running headless since the bots don't have the required config. | 499 // TODO(henrika): include on Android as well as soon as alla race conditions |
500 // Flaky, http://crbug.com/167299 . | 500 // in OpenSLES are resolved. |
501 TEST_F(MAYBE_WebRTCAudioDeviceTest, DISABLED_StartPlayout) { | 501 #if defined(OS_ANDROID) |
| 502 #define MAYBE_StartPlayout DISABLED_StartPlayout |
| 503 #else |
| 504 #define MAYBE_StartPlayout StartPlayout |
| 505 #endif |
| 506 TEST_F(MAYBE_WebRTCAudioDeviceTest, MAYBE_StartPlayout) { |
502 if (!has_output_devices_) { | 507 if (!has_output_devices_) { |
503 LOG(WARNING) << "No output device detected."; | 508 LOG(WARNING) << "No output device detected."; |
504 return; | 509 return; |
505 } | 510 } |
506 | 511 |
507 scoped_ptr<media::AudioHardwareConfig> config = | 512 scoped_ptr<media::AudioHardwareConfig> config = |
508 CreateRealHardwareConfig(audio_manager_.get()); | 513 CreateRealHardwareConfig(audio_manager_.get()); |
509 SetAudioHardwareConfig(config.get()); | 514 SetAudioHardwareConfig(config.get()); |
| 515 media::AudioParameters params(config->GetOutputConfig()); |
510 | 516 |
511 if (!HardwareSampleRatesAreValid()) | 517 if (!HardwareSampleRatesAreValid()) |
512 return; | 518 return; |
513 | 519 |
514 EXPECT_CALL(media_observer(), | 520 EXPECT_CALL(media_observer(), |
515 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); | 521 OnAudioStreamCreated(_, 1, params, StrEq(""))).Times(1); |
516 EXPECT_CALL(media_observer(), | 522 EXPECT_CALL(media_observer(), |
517 OnSetAudioStreamPlaying(_, 1, true)).Times(1); | 523 OnSetAudioStreamPlaying(_, 1, true)).Times(1); |
518 EXPECT_CALL(media_observer(), | 524 EXPECT_CALL(media_observer(), |
519 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); | 525 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); |
520 EXPECT_CALL(media_observer(), | 526 EXPECT_CALL(media_observer(), |
521 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 527 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
522 | 528 |
523 scoped_refptr<WebRtcAudioRenderer> renderer = | 529 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
524 new WebRtcAudioRenderer(kRenderViewId); | 530 ASSERT_TRUE(engine.valid()); |
| 531 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 532 ASSERT_TRUE(base.valid()); |
| 533 |
525 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 534 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
526 new WebRtcAudioDeviceImpl()); | 535 new WebRtcAudioDeviceImpl()); |
527 EXPECT_TRUE(webrtc_audio_device->SetAudioRenderer(renderer.get())); | |
528 | |
529 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | |
530 ASSERT_TRUE(engine.valid()); | |
531 | |
532 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | |
533 ASSERT_TRUE(base.valid()); | |
534 int err = base->Init(webrtc_audio_device.get()); | 536 int err = base->Init(webrtc_audio_device.get()); |
535 ASSERT_EQ(0, err); | 537 ASSERT_EQ(0, err); |
536 | 538 |
537 int ch = base->CreateChannel(); | |
538 EXPECT_NE(-1, ch); | |
539 | |
540 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); | 539 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); |
541 ASSERT_TRUE(external_media.valid()); | 540 ASSERT_TRUE(external_media.valid()); |
542 | |
543 base::WaitableEvent event(false, false); | 541 base::WaitableEvent event(false, false); |
544 scoped_ptr<WebRTCMediaProcessImpl> media_process( | 542 scoped_ptr<WebRTCMediaProcessImpl> media_process( |
545 new WebRTCMediaProcessImpl(&event)); | 543 new WebRTCMediaProcessImpl(&event)); |
| 544 int ch = base->CreateChannel(); |
| 545 EXPECT_NE(-1, ch); |
546 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( | 546 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( |
547 ch, webrtc::kPlaybackPerChannel, *media_process.get())); | 547 ch, webrtc::kPlaybackPerChannel, *media_process.get())); |
548 | 548 |
549 EXPECT_EQ(0, base->StartPlayout(ch)); | 549 EXPECT_EQ(0, base->StartPlayout(ch)); |
| 550 scoped_refptr<WebRtcAudioRenderer> renderer = |
| 551 new WebRtcAudioRenderer(kRenderViewId); |
| 552 EXPECT_TRUE(webrtc_audio_device->SetAudioRenderer(renderer.get())); |
550 renderer->Play(); | 553 renderer->Play(); |
551 | 554 |
552 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); | 555 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); |
553 WaitForIOThreadCompletion(); | 556 WaitForIOThreadCompletion(); |
554 | 557 |
555 EXPECT_TRUE(webrtc_audio_device->Playing()); | 558 EXPECT_TRUE(webrtc_audio_device->Playing()); |
556 EXPECT_FALSE(webrtc_audio_device->Recording()); | 559 EXPECT_FALSE(webrtc_audio_device->Recording()); |
557 EXPECT_EQ(ch, media_process->channel_id()); | 560 EXPECT_EQ(ch, media_process->channel_id()); |
558 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type()); | 561 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type()); |
559 EXPECT_EQ(80, media_process->packet_size()); | 562 EXPECT_EQ(80, media_process->packet_size()); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( | 670 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( |
668 ch, webrtc::kRecordingPerChannel)); | 671 ch, webrtc::kRecordingPerChannel)); |
669 EXPECT_EQ(0, base->StopSend(ch)); | 672 EXPECT_EQ(0, base->StopSend(ch)); |
670 | 673 |
671 local_audio_track->Stop(); | 674 local_audio_track->Stop(); |
672 EXPECT_EQ(0, base->DeleteChannel(ch)); | 675 EXPECT_EQ(0, base->DeleteChannel(ch)); |
673 EXPECT_EQ(0, base->Terminate()); | 676 EXPECT_EQ(0, base->Terminate()); |
674 } | 677 } |
675 | 678 |
676 // Uses WebRtcAudioDeviceImpl to play a local wave file. | 679 // Uses WebRtcAudioDeviceImpl to play a local wave file. |
677 // Disabled when running headless since the bots don't have the required config. | 680 // TODO(henrika): include on Android as well as soon as alla race conditions |
678 // Flaky, http://crbug.com/167298 . | 681 // in OpenSLES are resolved. |
679 TEST_F(MAYBE_WebRTCAudioDeviceTest, DISABLED_PlayLocalFile) { | 682 #if defined(OS_ANDROID) |
| 683 #define MAYBE_PlayLocalFile DISABLED_PlayLocalFile |
| 684 #else |
| 685 #define MAYBE_PlayLocalFile PlayLocalFile |
| 686 #endif |
| 687 TEST_F(MAYBE_WebRTCAudioDeviceTest, MAYBE_PlayLocalFile) { |
680 if (!has_output_devices_) { | 688 if (!has_output_devices_) { |
681 LOG(WARNING) << "No output device detected."; | 689 LOG(WARNING) << "No output device detected."; |
682 return; | 690 return; |
683 } | 691 } |
684 | 692 |
685 std::string file_path( | 693 std::string file_path( |
686 GetTestDataPath(FILE_PATH_LITERAL("speechmusic_mono_16kHz.pcm"))); | 694 GetTestDataPath(FILE_PATH_LITERAL("speechmusic_mono_16kHz.pcm"))); |
687 | 695 |
688 scoped_ptr<media::AudioHardwareConfig> config = | 696 scoped_ptr<media::AudioHardwareConfig> config = |
689 CreateRealHardwareConfig(audio_manager_.get()); | 697 CreateRealHardwareConfig(audio_manager_.get()); |
690 SetAudioHardwareConfig(config.get()); | 698 SetAudioHardwareConfig(config.get()); |
| 699 media::AudioParameters params(config->GetOutputConfig()); |
691 | 700 |
692 if (!HardwareSampleRatesAreValid()) | 701 if (!HardwareSampleRatesAreValid()) |
693 return; | 702 return; |
694 | 703 |
695 EXPECT_CALL(media_observer(), | 704 EXPECT_CALL(media_observer(), |
696 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); | 705 OnAudioStreamCreated(_, 1, params, StrEq(""))).Times(1); |
697 EXPECT_CALL(media_observer(), | 706 EXPECT_CALL(media_observer(), |
698 OnSetAudioStreamPlaying(_, 1, true)).Times(1); | 707 OnSetAudioStreamPlaying(_, 1, true)).Times(1); |
699 EXPECT_CALL(media_observer(), | 708 EXPECT_CALL(media_observer(), |
700 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); | 709 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); |
701 EXPECT_CALL(media_observer(), | 710 EXPECT_CALL(media_observer(), |
702 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 711 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
703 | 712 |
704 scoped_refptr<WebRtcAudioRenderer> renderer = | 713 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
705 new WebRtcAudioRenderer(kRenderViewId); | 714 ASSERT_TRUE(engine.valid()); |
| 715 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 716 ASSERT_TRUE(base.valid()); |
| 717 |
706 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 718 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
707 new WebRtcAudioDeviceImpl()); | 719 new WebRtcAudioDeviceImpl()); |
708 EXPECT_TRUE(webrtc_audio_device->SetAudioRenderer(renderer.get())); | |
709 | |
710 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | |
711 ASSERT_TRUE(engine.valid()); | |
712 | |
713 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | |
714 ASSERT_TRUE(base.valid()); | |
715 int err = base->Init(webrtc_audio_device.get()); | 720 int err = base->Init(webrtc_audio_device.get()); |
716 ASSERT_EQ(0, err); | 721 ASSERT_EQ(0, err); |
717 | |
718 int ch = base->CreateChannel(); | 722 int ch = base->CreateChannel(); |
719 EXPECT_NE(-1, ch); | 723 EXPECT_NE(-1, ch); |
720 EXPECT_EQ(0, base->StartPlayout(ch)); | 724 EXPECT_EQ(0, base->StartPlayout(ch)); |
| 725 scoped_refptr<WebRtcAudioRenderer> renderer = |
| 726 new WebRtcAudioRenderer(kRenderViewId); |
| 727 EXPECT_TRUE(webrtc_audio_device->SetAudioRenderer(renderer.get())); |
721 renderer->Play(); | 728 renderer->Play(); |
722 | 729 |
723 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get()); | 730 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get()); |
724 ASSERT_TRUE(file.valid()); | 731 ASSERT_TRUE(file.valid()); |
725 int duration = 0; | 732 int duration = 0; |
726 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration, | 733 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration, |
727 webrtc::kFileFormatPcm16kHzFile)); | 734 webrtc::kFileFormatPcm16kHzFile)); |
728 EXPECT_NE(0, duration); | 735 EXPECT_NE(0, duration); |
729 | 736 |
730 EXPECT_EQ(0, file->StartPlayingFileLocally(ch, file_path.c_str(), false, | 737 EXPECT_EQ(0, file->StartPlayingFileLocally(ch, file_path.c_str(), false, |
731 webrtc::kFileFormatPcm16kHzFile)); | 738 webrtc::kFileFormatPcm16kHzFile)); |
732 | 739 |
733 // Play 2 seconds worth of audio and then quit. | 740 // Play 2 seconds worth of audio and then quit. |
734 message_loop_.PostDelayedTask(FROM_HERE, | 741 message_loop_.PostDelayedTask(FROM_HERE, |
735 base::MessageLoop::QuitClosure(), | 742 base::MessageLoop::QuitClosure(), |
736 base::TimeDelta::FromSeconds(6)); | 743 base::TimeDelta::FromSeconds(2)); |
737 message_loop_.Run(); | 744 message_loop_.Run(); |
738 | 745 |
739 renderer->Stop(); | 746 renderer->Stop(); |
740 EXPECT_EQ(0, base->StopSend(ch)); | 747 EXPECT_EQ(0, base->StopSend(ch)); |
741 EXPECT_EQ(0, base->StopPlayout(ch)); | 748 EXPECT_EQ(0, base->StopPlayout(ch)); |
742 EXPECT_EQ(0, base->DeleteChannel(ch)); | 749 EXPECT_EQ(0, base->DeleteChannel(ch)); |
743 EXPECT_EQ(0, base->Terminate()); | 750 EXPECT_EQ(0, base->Terminate()); |
744 } | 751 } |
745 | 752 |
746 // Uses WebRtcAudioDeviceImpl to play out recorded audio in loopback. | 753 // Uses WebRtcAudioDeviceImpl to play out recorded audio in loopback. |
(...skipping 13 matching lines...) Expand all Loading... |
760 #endif | 767 #endif |
761 TEST_F(MAYBE_WebRTCAudioDeviceTest, MAYBE_FullDuplexAudioWithAGC) { | 768 TEST_F(MAYBE_WebRTCAudioDeviceTest, MAYBE_FullDuplexAudioWithAGC) { |
762 if (!has_output_devices_ || !has_input_devices_) { | 769 if (!has_output_devices_ || !has_input_devices_) { |
763 LOG(WARNING) << "Missing audio devices."; | 770 LOG(WARNING) << "Missing audio devices."; |
764 return; | 771 return; |
765 } | 772 } |
766 | 773 |
767 scoped_ptr<media::AudioHardwareConfig> config = | 774 scoped_ptr<media::AudioHardwareConfig> config = |
768 CreateRealHardwareConfig(audio_manager_.get()); | 775 CreateRealHardwareConfig(audio_manager_.get()); |
769 SetAudioHardwareConfig(config.get()); | 776 SetAudioHardwareConfig(config.get()); |
| 777 media::AudioParameters params(config->GetOutputConfig()); |
770 | 778 |
771 if (!HardwareSampleRatesAreValid()) | 779 if (!HardwareSampleRatesAreValid()) |
772 return; | 780 return; |
773 | 781 |
774 EXPECT_CALL(media_observer(), | 782 EXPECT_CALL(media_observer(), |
| 783 OnAudioStreamCreated(_, 1, params, StrEq(""))).Times(1); |
| 784 EXPECT_CALL(media_observer(), |
775 OnSetAudioStreamPlaying(_, 1, true)); | 785 OnSetAudioStreamPlaying(_, 1, true)); |
776 EXPECT_CALL(media_observer(), | 786 EXPECT_CALL(media_observer(), |
777 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); | 787 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); |
778 EXPECT_CALL(media_observer(), | 788 EXPECT_CALL(media_observer(), |
779 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 789 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
780 | 790 |
781 scoped_refptr<WebRtcAudioRenderer> renderer = | 791 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
782 new WebRtcAudioRenderer(kRenderViewId); | 792 ASSERT_TRUE(engine.valid()); |
| 793 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 794 ASSERT_TRUE(base.valid()); |
| 795 |
783 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 796 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
784 new WebRtcAudioDeviceImpl()); | 797 new WebRtcAudioDeviceImpl()); |
785 EXPECT_TRUE(webrtc_audio_device->SetAudioRenderer(renderer.get())); | |
786 | |
787 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | |
788 ASSERT_TRUE(engine.valid()); | |
789 | |
790 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | |
791 ASSERT_TRUE(base.valid()); | |
792 int err = base->Init(webrtc_audio_device.get()); | 798 int err = base->Init(webrtc_audio_device.get()); |
793 ASSERT_EQ(0, err); | 799 ASSERT_EQ(0, err); |
794 | 800 |
795 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); | 801 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); |
796 ASSERT_TRUE(audio_processing.valid()); | 802 ASSERT_TRUE(audio_processing.valid()); |
797 #if defined(OS_ANDROID) | 803 #if defined(OS_ANDROID) |
798 // On Android, by default AGC is off. | 804 // On Android, by default AGC is off. |
799 bool enabled = true; | 805 bool enabled = true; |
800 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; | 806 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; |
801 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); | 807 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); |
(...skipping 17 matching lines...) Expand all Loading... |
819 static_cast<webrtc::AudioTrackInterface*>(local_audio_track.get())-> | 825 static_cast<webrtc::AudioTrackInterface*>(local_audio_track.get())-> |
820 GetRenderer()->AddChannel(ch); | 826 GetRenderer()->AddChannel(ch); |
821 | 827 |
822 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get()); | 828 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get()); |
823 ASSERT_TRUE(network.valid()); | 829 ASSERT_TRUE(network.valid()); |
824 scoped_ptr<WebRTCTransportImpl> transport( | 830 scoped_ptr<WebRTCTransportImpl> transport( |
825 new WebRTCTransportImpl(network.get())); | 831 new WebRTCTransportImpl(network.get())); |
826 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get())); | 832 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get())); |
827 EXPECT_EQ(0, base->StartPlayout(ch)); | 833 EXPECT_EQ(0, base->StartPlayout(ch)); |
828 EXPECT_EQ(0, base->StartSend(ch)); | 834 EXPECT_EQ(0, base->StartSend(ch)); |
| 835 scoped_refptr<WebRtcAudioRenderer> renderer = |
| 836 new WebRtcAudioRenderer(kRenderViewId); |
| 837 EXPECT_TRUE(webrtc_audio_device->SetAudioRenderer(renderer.get())); |
829 renderer->Play(); | 838 renderer->Play(); |
830 | 839 |
831 LOG(INFO) << ">> You should now be able to hear yourself in loopback..."; | 840 LOG(INFO) << ">> You should now be able to hear yourself in loopback..."; |
832 message_loop_.PostDelayedTask(FROM_HERE, | 841 message_loop_.PostDelayedTask(FROM_HERE, |
833 base::MessageLoop::QuitClosure(), | 842 base::MessageLoop::QuitClosure(), |
834 base::TimeDelta::FromSeconds(2)); | 843 base::TimeDelta::FromSeconds(2)); |
835 message_loop_.Run(); | 844 message_loop_.Run(); |
836 | 845 |
837 local_audio_track->Stop(); | 846 local_audio_track->Stop(); |
838 renderer->Stop(); | 847 renderer->Stop(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
893 int delay = (base::Time::Now() - start_time).InMilliseconds(); | 902 int delay = (base::Time::Now() - start_time).InMilliseconds(); |
894 PrintPerfResultMs("webrtc_recording_setup_c", "t", delay); | 903 PrintPerfResultMs("webrtc_recording_setup_c", "t", delay); |
895 | 904 |
896 local_audio_track->RemoveSink(sink.get()); | 905 local_audio_track->RemoveSink(sink.get()); |
897 local_audio_track->Stop(); | 906 local_audio_track->Stop(); |
898 EXPECT_EQ(0, base->StopSend(ch)); | 907 EXPECT_EQ(0, base->StopSend(ch)); |
899 EXPECT_EQ(0, base->DeleteChannel(ch)); | 908 EXPECT_EQ(0, base->DeleteChannel(ch)); |
900 EXPECT_EQ(0, base->Terminate()); | 909 EXPECT_EQ(0, base->Terminate()); |
901 } | 910 } |
902 | 911 |
903 TEST_F(MAYBE_WebRTCAudioDeviceTest, WebRtcPlayoutSetupTime) { | 912 |
| 913 // TODO(henrika): include on Android as well as soon as alla race conditions |
| 914 // in OpenSLES are resolved. |
| 915 #if defined(OS_ANDROID) |
| 916 #define MAYBE_WebRtcPlayoutSetupTime DISABLED_WebRtcPlayoutSetupTime |
| 917 #else |
| 918 #define MAYBE_WebRtcPlayoutSetupTime WebRtcPlayoutSetupTime |
| 919 #endif |
| 920 TEST_F(MAYBE_WebRTCAudioDeviceTest, MAYBE_WebRtcPlayoutSetupTime) { |
904 if (!has_output_devices_) { | 921 if (!has_output_devices_) { |
905 LOG(WARNING) << "No output device detected."; | 922 LOG(WARNING) << "No output device detected."; |
906 return; | 923 return; |
907 } | 924 } |
908 | 925 |
909 scoped_ptr<media::AudioHardwareConfig> config = | 926 scoped_ptr<media::AudioHardwareConfig> config = |
910 CreateRealHardwareConfig(audio_manager_.get()); | 927 CreateRealHardwareConfig(audio_manager_.get()); |
911 SetAudioHardwareConfig(config.get()); | 928 SetAudioHardwareConfig(config.get()); |
| 929 media::AudioParameters params(config->GetOutputConfig()); |
912 | 930 |
913 if (!HardwareSampleRatesAreValid()) | 931 if (!HardwareSampleRatesAreValid()) |
914 return; | 932 return; |
915 | 933 |
916 EXPECT_CALL(media_observer(), | 934 EXPECT_CALL(media_observer(), |
| 935 OnAudioStreamCreated(_, 1, params, StrEq(""))).Times(1); |
| 936 EXPECT_CALL(media_observer(), |
917 OnSetAudioStreamStatus(_, 1, _)).Times(AnyNumber()); | 937 OnSetAudioStreamStatus(_, 1, _)).Times(AnyNumber()); |
918 EXPECT_CALL(media_observer(), | 938 EXPECT_CALL(media_observer(), |
919 OnSetAudioStreamPlaying(_, 1, true)); | 939 OnSetAudioStreamPlaying(_, 1, true)); |
920 EXPECT_CALL(media_observer(), | 940 EXPECT_CALL(media_observer(), |
921 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 941 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
922 | 942 |
923 base::WaitableEvent event(false, false); | 943 base::WaitableEvent event(false, false); |
924 scoped_ptr<MockWebRtcAudioRendererSource> renderer_source( | 944 scoped_ptr<MockWebRtcAudioRendererSource> renderer_source( |
925 new MockWebRtcAudioRendererSource(&event)); | 945 new MockWebRtcAudioRendererSource(&event)); |
926 scoped_refptr<WebRtcAudioRenderer> renderer = | 946 scoped_refptr<WebRtcAudioRenderer> renderer = |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 #endif | 983 #endif |
964 | 984 |
965 TEST_F(MAYBE_WebRTCAudioDeviceTest, | 985 TEST_F(MAYBE_WebRTCAudioDeviceTest, |
966 MAYBE_WebRtcLoopbackTimeWithSignalProcessing) { | 986 MAYBE_WebRtcLoopbackTimeWithSignalProcessing) { |
967 int latency = RunWebRtcLoopbackTimeTest(audio_manager_.get(), true); | 987 int latency = RunWebRtcLoopbackTimeTest(audio_manager_.get(), true); |
968 PrintPerfResultMs("webrtc_loopback_with_signal_processing (100 packets)", | 988 PrintPerfResultMs("webrtc_loopback_with_signal_processing (100 packets)", |
969 "t", latency); | 989 "t", latency); |
970 } | 990 } |
971 | 991 |
972 } // namespace content | 992 } // namespace content |
OLD | NEW |