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

Side by Side Diff: content/renderer/media/webrtc_audio_device_unittest.cc

Issue 15979027: start/stop the source of the capturer when 1st audiotrack/last audiotrack is added/removed (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698