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

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: addressed Henrik's comments. 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 // Create and start a local audio track. Starting the audio track will connect
588 // the audio track to the capturer and also start the source of the capturer.
589 scoped_refptr<WebRtcLocalAudioTrack> local_audio_track(
590 WebRtcLocalAudioTrack::Create(std::string(),
591 webrtc_audio_device->capturer(),
592 NULL));
593 local_audio_track->Start();
586 594
587 int ch = base->CreateChannel(); 595 int ch = base->CreateChannel();
588 EXPECT_NE(-1, ch); 596 EXPECT_NE(-1, ch);
589 597
590 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); 598 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get());
591 ASSERT_TRUE(external_media.valid()); 599 ASSERT_TRUE(external_media.valid());
592 600
593 base::WaitableEvent event(false, false); 601 base::WaitableEvent event(false, false);
594 scoped_ptr<WebRTCMediaProcessImpl> media_process( 602 scoped_ptr<WebRTCMediaProcessImpl> media_process(
595 new WebRTCMediaProcessImpl(&event)); 603 new WebRTCMediaProcessImpl(&event));
(...skipping 16 matching lines...) Expand all
612 EXPECT_TRUE(webrtc_audio_device->Recording()); 620 EXPECT_TRUE(webrtc_audio_device->Recording());
613 EXPECT_EQ(ch, media_process->channel_id()); 621 EXPECT_EQ(ch, media_process->channel_id());
614 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type()); 622 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type());
615 EXPECT_EQ(80, media_process->packet_size()); 623 EXPECT_EQ(80, media_process->packet_size());
616 EXPECT_EQ(8000, media_process->sample_rate()); 624 EXPECT_EQ(8000, media_process->sample_rate());
617 625
618 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( 626 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing(
619 ch, webrtc::kRecordingPerChannel)); 627 ch, webrtc::kRecordingPerChannel));
620 EXPECT_EQ(0, base->StopSend(ch)); 628 EXPECT_EQ(0, base->StopSend(ch));
621 629
622 webrtc_audio_device->capturer()->Stop(); 630 local_audio_track->Stop();
623 EXPECT_EQ(0, base->DeleteChannel(ch)); 631 EXPECT_EQ(0, base->DeleteChannel(ch));
624 EXPECT_EQ(0, base->Terminate()); 632 EXPECT_EQ(0, base->Terminate());
625 } 633 }
626 634
627 // Uses WebRtcAudioDeviceImpl to play a local wave file. 635 // Uses WebRtcAudioDeviceImpl to play a local wave file.
628 // Disabled when running headless since the bots don't have the required config. 636 // Disabled when running headless since the bots don't have the required config.
629 // Flaky, http://crbug.com/167298 . 637 // Flaky, http://crbug.com/167298 .
630 TEST_F(WebRTCAudioDeviceTest, DISABLED_PlayLocalFile) { 638 TEST_F(WebRTCAudioDeviceTest, DISABLED_PlayLocalFile) {
631 if (!has_output_devices_) { 639 if (!has_output_devices_) {
632 LOG(WARNING) << "No output device detected."; 640 LOG(WARNING) << "No output device detected.";
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 746
739 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 747 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
740 ASSERT_TRUE(engine.valid()); 748 ASSERT_TRUE(engine.valid());
741 749
742 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 750 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
743 ASSERT_TRUE(base.valid()); 751 ASSERT_TRUE(base.valid());
744 int err = base->Init(webrtc_audio_device.get()); 752 int err = base->Init(webrtc_audio_device.get());
745 ASSERT_EQ(0, err); 753 ASSERT_EQ(0, err);
746 754
747 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); 755 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get()));
748 webrtc_audio_device->capturer()->Start(); 756 // Create and start a local audio track. Starting the audio track will connect
757 // the audio track to the capturer and also start the source of the capturer.
758 scoped_refptr<WebRtcLocalAudioTrack> local_audio_track(
759 WebRtcLocalAudioTrack::Create(std::string(),
760 webrtc_audio_device->capturer(),
761 NULL));
762 local_audio_track->Start();
749 763
750 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); 764 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get());
751 ASSERT_TRUE(audio_processing.valid()); 765 ASSERT_TRUE(audio_processing.valid());
752 #if defined(OS_ANDROID) 766 #if defined(OS_ANDROID)
753 // On Android, by default AGC is off. 767 // On Android, by default AGC is off.
754 bool enabled = true; 768 bool enabled = true;
755 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; 769 webrtc::AgcModes agc_mode = webrtc::kAgcDefault;
756 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); 770 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode));
757 EXPECT_FALSE(enabled); 771 EXPECT_FALSE(enabled);
758 #else 772 #else
(...skipping 15 matching lines...) Expand all
774 EXPECT_EQ(0, base->StartPlayout(ch)); 788 EXPECT_EQ(0, base->StartPlayout(ch));
775 EXPECT_EQ(0, base->StartSend(ch)); 789 EXPECT_EQ(0, base->StartSend(ch));
776 renderer->Play(); 790 renderer->Play();
777 791
778 LOG(INFO) << ">> You should now be able to hear yourself in loopback..."; 792 LOG(INFO) << ">> You should now be able to hear yourself in loopback...";
779 message_loop_.PostDelayedTask(FROM_HERE, 793 message_loop_.PostDelayedTask(FROM_HERE,
780 base::MessageLoop::QuitClosure(), 794 base::MessageLoop::QuitClosure(),
781 base::TimeDelta::FromSeconds(2)); 795 base::TimeDelta::FromSeconds(2));
782 message_loop_.Run(); 796 message_loop_.Run();
783 797
784 webrtc_audio_device->capturer()->Stop(); 798 local_audio_track->Stop();
785 renderer->Stop(); 799 renderer->Stop();
786 EXPECT_EQ(0, base->StopSend(ch)); 800 EXPECT_EQ(0, base->StopSend(ch));
787 EXPECT_EQ(0, base->StopPlayout(ch)); 801 EXPECT_EQ(0, base->StopPlayout(ch));
788 802
789 EXPECT_EQ(0, base->DeleteChannel(ch)); 803 EXPECT_EQ(0, base->DeleteChannel(ch));
790 EXPECT_EQ(0, base->Terminate()); 804 EXPECT_EQ(0, base->Terminate());
791 } 805 }
792 806
793 TEST_F(WebRTCAudioDeviceTest, WebRtcRecordingSetupTime) { 807 TEST_F(WebRTCAudioDeviceTest, WebRtcRecordingSetupTime) {
794 if (!has_input_devices_) { 808 if (!has_input_devices_) {
(...skipping 13 matching lines...) Expand all
808 822
809 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 823 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
810 ASSERT_TRUE(engine.valid()); 824 ASSERT_TRUE(engine.valid());
811 825
812 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 826 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
813 ASSERT_TRUE(base.valid()); 827 ASSERT_TRUE(base.valid());
814 int err = base->Init(webrtc_audio_device.get()); 828 int err = base->Init(webrtc_audio_device.get());
815 ASSERT_EQ(0, err); 829 ASSERT_EQ(0, err);
816 830
817 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get())); 831 EXPECT_TRUE(InitializeCapturer(webrtc_audio_device.get()));
818 webrtc_audio_device->capturer()->Start(); 832 // Create and start a local audio track. Starting the audio track will connect
833 // the audio track to the capturer and also start the source of the capturer.
834 scoped_refptr<WebRtcLocalAudioTrack> local_audio_track(
835 WebRtcLocalAudioTrack::Create(std::string(),
836 webrtc_audio_device->capturer(),
837 NULL));
838 local_audio_track->Start();
819 839
820 base::WaitableEvent event(false, false); 840 base::WaitableEvent event(false, false);
821 scoped_ptr<MockWebRtcAudioCapturerSink> capturer_sink( 841 scoped_ptr<MockWebRtcAudioCapturerSink> capturer_sink(
822 new MockWebRtcAudioCapturerSink(&event)); 842 new MockWebRtcAudioCapturerSink(&event));
823 WebRtcAudioCapturer* capturer = webrtc_audio_device->capturer().get(); 843 WebRtcAudioCapturer* capturer = webrtc_audio_device->capturer().get();
824 capturer->AddSink(capturer_sink.get()); 844 capturer->AddSink(capturer_sink.get());
825 845
826 int ch = base->CreateChannel(); 846 int ch = base->CreateChannel();
827 EXPECT_NE(-1, ch); 847 EXPECT_NE(-1, ch);
828 848
829 base::Time start_time = base::Time::Now(); 849 base::Time start_time = base::Time::Now();
830 EXPECT_EQ(0, base->StartSend(ch)); 850 EXPECT_EQ(0, base->StartSend(ch));
831 851
832 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); 852 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout()));
833 int delay = (base::Time::Now() - start_time).InMilliseconds(); 853 int delay = (base::Time::Now() - start_time).InMilliseconds();
834 PrintPerfResultMs("webrtc_recording_setup_c", "t", delay); 854 PrintPerfResultMs("webrtc_recording_setup_c", "t", delay);
835 855
836 capturer->RemoveSink(capturer_sink.get()); 856 capturer->RemoveSink(capturer_sink.get());
837 webrtc_audio_device->capturer()->Stop(); 857 local_audio_track->Stop();
838 EXPECT_EQ(0, base->StopSend(ch)); 858 EXPECT_EQ(0, base->StopSend(ch));
839 EXPECT_EQ(0, base->DeleteChannel(ch)); 859 EXPECT_EQ(0, base->DeleteChannel(ch));
840 EXPECT_EQ(0, base->Terminate()); 860 EXPECT_EQ(0, base->Terminate());
841 } 861 }
842 862
843 TEST_F(WebRTCAudioDeviceTest, WebRtcPlayoutSetupTime) { 863 TEST_F(WebRTCAudioDeviceTest, WebRtcPlayoutSetupTime) {
844 if (!has_output_devices_) { 864 if (!has_output_devices_) {
845 LOG(WARNING) << "No output device detected."; 865 LOG(WARNING) << "No output device detected.";
846 return; 866 return;
847 } 867 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 "t", latency); 903 "t", latency);
884 } 904 }
885 905
886 TEST_F(WebRTCAudioDeviceTest, WebRtcLoopbackTimeWithSignalProcessing) { 906 TEST_F(WebRTCAudioDeviceTest, WebRtcLoopbackTimeWithSignalProcessing) {
887 int latency = RunWebRtcLoopbackTimeTest(audio_manager_.get(), true); 907 int latency = RunWebRtcLoopbackTimeTest(audio_manager_.get(), true);
888 PrintPerfResultMs("webrtc_loopback_with_signal_processing (100 packets)", 908 PrintPerfResultMs("webrtc_loopback_with_signal_processing (100 packets)",
889 "t", latency); 909 "t", latency);
890 } 910 }
891 911
892 } // namespace content 912 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webrtc_audio_device_impl.cc ('k') | content/renderer/media/webrtc_local_audio_track.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698