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 "base/environment.h" | 5 #include "base/environment.h" |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
10 #include "base/test/test_timeouts.h" | 10 #include "base/test/test_timeouts.h" |
11 #include "content/renderer/media/webrtc_audio_capturer.h" | 11 #include "content/renderer/media/webrtc_audio_capturer.h" |
12 #include "content/renderer/media/webrtc_audio_device_impl.h" | 12 #include "content/renderer/media/webrtc_audio_device_impl.h" |
13 #include "content/renderer/media/webrtc_audio_renderer.h" | 13 #include "content/renderer/media/webrtc_audio_renderer.h" |
14 #include "content/renderer/media/webrtc_local_audio_track.h" | |
14 #include "content/renderer/render_thread_impl.h" | 15 #include "content/renderer/render_thread_impl.h" |
15 #include "content/test/webrtc_audio_device_test.h" | 16 #include "content/test/webrtc_audio_device_test.h" |
16 #include "media/audio/audio_manager_base.h" | 17 #include "media/audio/audio_manager_base.h" |
17 #include "media/base/audio_hardware_config.h" | 18 #include "media/base/audio_hardware_config.h" |
18 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
19 #include "third_party/webrtc/voice_engine/include/voe_audio_processing.h" | 20 #include "third_party/webrtc/voice_engine/include/voe_audio_processing.h" |
20 #include "third_party/webrtc/voice_engine/include/voe_base.h" | 21 #include "third_party/webrtc/voice_engine/include/voe_base.h" |
21 #include "third_party/webrtc/voice_engine/include/voe_codec.h" | 22 #include "third_party/webrtc/voice_engine/include/voe_codec.h" |
22 #include "third_party/webrtc/voice_engine/include/voe_external_media.h" | 23 #include "third_party/webrtc/voice_engine/include/voe_external_media.h" |
23 #include "third_party/webrtc/voice_engine/include/voe_file.h" | 24 #include "third_party/webrtc/voice_engine/include/voe_file.h" |
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
575 | 576 |
576 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 577 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
577 ASSERT_TRUE(engine.valid()); | 578 ASSERT_TRUE(engine.valid()); |
578 | 579 |
579 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 580 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
580 ASSERT_TRUE(base.valid()); | 581 ASSERT_TRUE(base.valid()); |
581 int err = base->Init(webrtc_audio_device.get()); | 582 int err = base->Init(webrtc_audio_device.get()); |
582 ASSERT_EQ(0, err); | 583 ASSERT_EQ(0, err); |
583 | 584 |
584 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); | 585 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); |
585 webrtc_audio_device->capturer()->Start(); | 586 |
587 // Adds a local audio track to trigger starting the capturer. | |
henrika (OOO until Aug 14)
2013/06/05 09:09:20
Could you make this comment a bit more clear. "..t
no longer working on chromium
2013/06/05 16:29:45
Done.
| |
588 scoped_refptr<WebRtcLocalAudioTrack> local_audio_track( | |
589 WebRtcLocalAudioTrack::Create(std::string(), | |
590 webrtc_audio_device->capturer(), | |
591 NULL)); | |
592 local_audio_track->Start(); | |
henrika (OOO until Aug 14)
2013/06/05 09:09:20
No EXPECT?
no longer working on chromium
2013/06/05 16:29:45
It is void
| |
586 | 593 |
587 int ch = base->CreateChannel(); | 594 int ch = base->CreateChannel(); |
588 EXPECT_NE(-1, ch); | 595 EXPECT_NE(-1, ch); |
589 | 596 |
590 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); | 597 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); |
591 ASSERT_TRUE(external_media.valid()); | 598 ASSERT_TRUE(external_media.valid()); |
592 | 599 |
593 base::WaitableEvent event(false, false); | 600 base::WaitableEvent event(false, false); |
594 scoped_ptr<WebRTCMediaProcessImpl> media_process( | 601 scoped_ptr<WebRTCMediaProcessImpl> media_process( |
595 new WebRTCMediaProcessImpl(&event)); | 602 new WebRTCMediaProcessImpl(&event)); |
(...skipping 16 matching lines...) Expand all Loading... | |
612 EXPECT_TRUE(webrtc_audio_device->Recording()); | 619 EXPECT_TRUE(webrtc_audio_device->Recording()); |
613 EXPECT_EQ(ch, media_process->channel_id()); | 620 EXPECT_EQ(ch, media_process->channel_id()); |
614 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type()); | 621 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type()); |
615 EXPECT_EQ(80, media_process->packet_size()); | 622 EXPECT_EQ(80, media_process->packet_size()); |
616 EXPECT_EQ(8000, media_process->sample_rate()); | 623 EXPECT_EQ(8000, media_process->sample_rate()); |
617 | 624 |
618 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( | 625 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( |
619 ch, webrtc::kRecordingPerChannel)); | 626 ch, webrtc::kRecordingPerChannel)); |
620 EXPECT_EQ(0, base->StopSend(ch)); | 627 EXPECT_EQ(0, base->StopSend(ch)); |
621 | 628 |
622 webrtc_audio_device->capturer()->Stop(); | 629 local_audio_track->Stop(); |
623 EXPECT_EQ(0, base->DeleteChannel(ch)); | 630 EXPECT_EQ(0, base->DeleteChannel(ch)); |
624 EXPECT_EQ(0, base->Terminate()); | 631 EXPECT_EQ(0, base->Terminate()); |
625 } | 632 } |
626 | 633 |
627 // Uses WebRtcAudioDeviceImpl to play a local wave file. | 634 // Uses WebRtcAudioDeviceImpl to play a local wave file. |
628 // Disabled when running headless since the bots don't have the required config. | 635 // Disabled when running headless since the bots don't have the required config. |
629 // Flaky, http://crbug.com/167298 . | 636 // Flaky, http://crbug.com/167298 . |
630 TEST_F(WebRTCAudioDeviceTest, DISABLED_PlayLocalFile) { | 637 TEST_F(WebRTCAudioDeviceTest, DISABLED_PlayLocalFile) { |
631 if (!has_output_devices_) { | 638 if (!has_output_devices_) { |
632 LOG(WARNING) << "No output device detected."; | 639 LOG(WARNING) << "No output device detected."; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
738 | 745 |
739 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 746 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
740 ASSERT_TRUE(engine.valid()); | 747 ASSERT_TRUE(engine.valid()); |
741 | 748 |
742 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 749 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
743 ASSERT_TRUE(base.valid()); | 750 ASSERT_TRUE(base.valid()); |
744 int err = base->Init(webrtc_audio_device.get()); | 751 int err = base->Init(webrtc_audio_device.get()); |
745 ASSERT_EQ(0, err); | 752 ASSERT_EQ(0, err); |
746 | 753 |
747 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); | 754 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); |
748 webrtc_audio_device->capturer()->Start(); | 755 // Adds a local audio track to trigger starting the capturer. |
henrika (OOO until Aug 14)
2013/06/05 09:09:20
dito
no longer working on chromium
2013/06/05 16:29:45
Done.
| |
756 scoped_refptr<WebRtcLocalAudioTrack> local_audio_track( | |
757 WebRtcLocalAudioTrack::Create(std::string(), | |
758 webrtc_audio_device->capturer(), | |
759 NULL)); | |
760 local_audio_track->Start(); | |
749 | 761 |
750 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); | 762 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); |
751 ASSERT_TRUE(audio_processing.valid()); | 763 ASSERT_TRUE(audio_processing.valid()); |
752 #if defined(OS_ANDROID) | 764 #if defined(OS_ANDROID) |
753 // On Android, by default AGC is off. | 765 // On Android, by default AGC is off. |
754 bool enabled = true; | 766 bool enabled = true; |
755 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; | 767 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; |
756 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); | 768 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); |
757 EXPECT_FALSE(enabled); | 769 EXPECT_FALSE(enabled); |
758 #else | 770 #else |
(...skipping 15 matching lines...) Expand all Loading... | |
774 EXPECT_EQ(0, base->StartPlayout(ch)); | 786 EXPECT_EQ(0, base->StartPlayout(ch)); |
775 EXPECT_EQ(0, base->StartSend(ch)); | 787 EXPECT_EQ(0, base->StartSend(ch)); |
776 renderer->Play(); | 788 renderer->Play(); |
777 | 789 |
778 LOG(INFO) << ">> You should now be able to hear yourself in loopback..."; | 790 LOG(INFO) << ">> You should now be able to hear yourself in loopback..."; |
779 message_loop_.PostDelayedTask(FROM_HERE, | 791 message_loop_.PostDelayedTask(FROM_HERE, |
780 base::MessageLoop::QuitClosure(), | 792 base::MessageLoop::QuitClosure(), |
781 base::TimeDelta::FromSeconds(2)); | 793 base::TimeDelta::FromSeconds(2)); |
782 message_loop_.Run(); | 794 message_loop_.Run(); |
783 | 795 |
784 webrtc_audio_device->capturer()->Stop(); | 796 local_audio_track->Stop(); |
785 renderer->Stop(); | 797 renderer->Stop(); |
786 EXPECT_EQ(0, base->StopSend(ch)); | 798 EXPECT_EQ(0, base->StopSend(ch)); |
787 EXPECT_EQ(0, base->StopPlayout(ch)); | 799 EXPECT_EQ(0, base->StopPlayout(ch)); |
788 | 800 |
789 EXPECT_EQ(0, base->DeleteChannel(ch)); | 801 EXPECT_EQ(0, base->DeleteChannel(ch)); |
790 EXPECT_EQ(0, base->Terminate()); | 802 EXPECT_EQ(0, base->Terminate()); |
791 } | 803 } |
792 | 804 |
793 TEST_F(WebRTCAudioDeviceTest, WebRtcRecordingSetupTime) { | 805 TEST_F(WebRTCAudioDeviceTest, WebRtcRecordingSetupTime) { |
794 if (!has_input_devices_) { | 806 if (!has_input_devices_) { |
(...skipping 13 matching lines...) Expand all Loading... | |
808 | 820 |
809 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 821 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
810 ASSERT_TRUE(engine.valid()); | 822 ASSERT_TRUE(engine.valid()); |
811 | 823 |
812 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 824 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
813 ASSERT_TRUE(base.valid()); | 825 ASSERT_TRUE(base.valid()); |
814 int err = base->Init(webrtc_audio_device.get()); | 826 int err = base->Init(webrtc_audio_device.get()); |
815 ASSERT_EQ(0, err); | 827 ASSERT_EQ(0, err); |
816 | 828 |
817 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); | 829 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); |
818 webrtc_audio_device->capturer()->Start(); | 830 // Adds a local audio track to trigger starting the capturer. |
henrika (OOO until Aug 14)
2013/06/05 09:09:20
same here
no longer working on chromium
2013/06/05 16:29:45
Done.
| |
831 scoped_refptr<WebRtcLocalAudioTrack> local_audio_track( | |
832 WebRtcLocalAudioTrack::Create(std::string(), | |
833 webrtc_audio_device->capturer(), | |
834 NULL)); | |
835 local_audio_track->Start(); | |
819 | 836 |
820 base::WaitableEvent event(false, false); | 837 base::WaitableEvent event(false, false); |
821 scoped_ptr<MockWebRtcAudioCapturerSink> capturer_sink( | 838 scoped_ptr<MockWebRtcAudioCapturerSink> capturer_sink( |
822 new MockWebRtcAudioCapturerSink(&event)); | 839 new MockWebRtcAudioCapturerSink(&event)); |
823 WebRtcAudioCapturer* capturer = webrtc_audio_device->capturer().get(); | 840 WebRtcAudioCapturer* capturer = webrtc_audio_device->capturer().get(); |
824 capturer->AddSink(capturer_sink.get()); | 841 capturer->AddSink(capturer_sink.get()); |
825 | 842 |
826 int ch = base->CreateChannel(); | 843 int ch = base->CreateChannel(); |
827 EXPECT_NE(-1, ch); | 844 EXPECT_NE(-1, ch); |
828 | 845 |
829 base::Time start_time = base::Time::Now(); | 846 base::Time start_time = base::Time::Now(); |
830 EXPECT_EQ(0, base->StartSend(ch)); | 847 EXPECT_EQ(0, base->StartSend(ch)); |
831 | 848 |
832 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); | 849 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); |
833 int delay = (base::Time::Now() - start_time).InMilliseconds(); | 850 int delay = (base::Time::Now() - start_time).InMilliseconds(); |
834 PrintPerfResultMs("webrtc_recording_setup_c", "t", delay); | 851 PrintPerfResultMs("webrtc_recording_setup_c", "t", delay); |
835 | 852 |
836 capturer->RemoveSink(capturer_sink.get()); | 853 capturer->RemoveSink(capturer_sink.get()); |
837 webrtc_audio_device->capturer()->Stop(); | 854 local_audio_track->Stop(); |
838 EXPECT_EQ(0, base->StopSend(ch)); | 855 EXPECT_EQ(0, base->StopSend(ch)); |
839 EXPECT_EQ(0, base->DeleteChannel(ch)); | 856 EXPECT_EQ(0, base->DeleteChannel(ch)); |
840 EXPECT_EQ(0, base->Terminate()); | 857 EXPECT_EQ(0, base->Terminate()); |
841 } | 858 } |
842 | 859 |
843 TEST_F(WebRTCAudioDeviceTest, WebRtcPlayoutSetupTime) { | 860 TEST_F(WebRTCAudioDeviceTest, WebRtcPlayoutSetupTime) { |
844 if (!has_output_devices_) { | 861 if (!has_output_devices_) { |
845 LOG(WARNING) << "No output device detected."; | 862 LOG(WARNING) << "No output device detected."; |
846 return; | 863 return; |
847 } | 864 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
883 "t", latency); | 900 "t", latency); |
884 } | 901 } |
885 | 902 |
886 TEST_F(WebRTCAudioDeviceTest, WebRtcLoopbackTimeWithSignalProcessing) { | 903 TEST_F(WebRTCAudioDeviceTest, WebRtcLoopbackTimeWithSignalProcessing) { |
887 int latency = RunWebRtcLoopbackTimeTest(audio_manager_.get(), true); | 904 int latency = RunWebRtcLoopbackTimeTest(audio_manager_.get(), true); |
888 PrintPerfResultMs("webrtc_loopback_with_signal_processing (100 packets)", | 905 PrintPerfResultMs("webrtc_loopback_with_signal_processing (100 packets)", |
889 "t", latency); | 906 "t", latency); |
890 } | 907 } |
891 | 908 |
892 } // namespace content | 909 } // namespace content |
OLD | NEW |