Chromium Code Reviews| 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 |