diff options
author | satish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-01 07:02:00 +0000 |
---|---|---|
committer | satish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-01 07:02:00 +0000 |
commit | 1784ad6252e50a5ca1a67026f53cb139490009cd (patch) | |
tree | 99a60deb561d5ff4db1b6dee6bf86b3499d6f914 /media/audio | |
parent | 07f63c6bba7e33160fc54af7f2cf4cf207e0831b (diff) | |
download | chromium_src-1784ad6252e50a5ca1a67026f53cb139490009cd.zip chromium_src-1784ad6252e50a5ca1a67026f53cb139490009cd.tar.gz chromium_src-1784ad6252e50a5ca1a67026f53cb139490009cd.tar.bz2 |
Adds method to invoke platform provided audio input UI.
This will be used in a future CL by the speech input feature.
BUG=69886
TEST=none
Review URL: http://codereview.chromium.org/6602012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76363 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio')
-rw-r--r-- | media/audio/audio_manager.h | 13 | ||||
-rw-r--r-- | media/audio/audio_manager_base.cc | 7 | ||||
-rw-r--r-- | media/audio/audio_manager_base.h | 3 | ||||
-rw-r--r-- | media/audio/audio_output_proxy_unittest.cc | 2 | ||||
-rw-r--r-- | media/audio/linux/audio_manager_linux.cc | 21 | ||||
-rw-r--r-- | media/audio/linux/audio_manager_linux.h | 2 | ||||
-rw-r--r-- | media/audio/win/audio_manager_win.cc | 28 | ||||
-rw-r--r-- | media/audio/win/audio_manager_win.h | 2 |
8 files changed, 78 insertions, 0 deletions
diff --git a/media/audio/audio_manager.h b/media/audio/audio_manager.h index 2afc789..370fd8e 100644 --- a/media/audio/audio_manager.h +++ b/media/audio/audio_manager.h @@ -7,6 +7,7 @@ #include "base/basictypes.h" #include "base/string16.h" +#include "base/task.h" #include "media/audio/audio_parameters.h" class AudioInputStream; @@ -34,6 +35,16 @@ class AudioManager { // input device for this computer. virtual string16 GetAudioInputDeviceModel() = 0; + // Returns true if the platform specific audio input settings UI is known + // and can be shown. + virtual bool CanShowAudioInputSettings() = 0; + + // Opens the platform default audio input settings UI. + // Note: This could invoke an external application/preferences pane, so + // ideally must not be called from the UI thread or other time sensitive + // threads to avoid blocking the rest of the application. + virtual void ShowAudioInputSettings() = 0; + // Factory for all the supported stream formats. |params| defines parameters // of the audio stream to be created. // @@ -103,4 +114,6 @@ class AudioManager { static AudioManager* CreateAudioManager(); }; +DISABLE_RUNNABLE_METHOD_REFCOUNT(AudioManager); + #endif // MEDIA_AUDIO_AUDIO_MANAGER_H_ diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc index 73a97ba..024aff3 100644 --- a/media/audio/audio_manager_base.cc +++ b/media/audio/audio_manager_base.cc @@ -51,3 +51,10 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStreamProxy( return new AudioOutputProxy(dispatcher); } + +bool AudioManagerBase::CanShowAudioInputSettings() { + return false; +} + +void AudioManagerBase::ShowAudioInputSettings() { +} diff --git a/media/audio/audio_manager_base.h b/media/audio/audio_manager_base.h index 51364b7..a5140a2 100644 --- a/media/audio/audio_manager_base.h +++ b/media/audio/audio_manager_base.h @@ -24,6 +24,9 @@ class AudioManagerBase : public AudioManager { virtual string16 GetAudioInputDeviceModel(); + virtual bool CanShowAudioInputSettings(); + virtual void ShowAudioInputSettings(); + virtual AudioOutputStream* MakeAudioOutputStreamProxy( const AudioParameters& params); diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc index 2f308bd..8ffb70b 100644 --- a/media/audio/audio_output_proxy_unittest.cc +++ b/media/audio/audio_output_proxy_unittest.cc @@ -50,6 +50,8 @@ class MockAudioManager : public AudioManager { AudioParameters params)); MOCK_METHOD0(MuteAll, void()); MOCK_METHOD0(UnMuteAll, void()); + MOCK_METHOD0(CanShowAudioInputSettings, bool()); + MOCK_METHOD0(ShowAudioInputSettings, void()); MOCK_METHOD0(GetMessageLoop, MessageLoop*()); }; diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc index 4c92a6f..09c8625 100644 --- a/media/audio/linux/audio_manager_linux.cc +++ b/media/audio/linux/audio_manager_linux.cc @@ -5,7 +5,10 @@ #include "media/audio/linux/audio_manager_linux.h" #include "base/command_line.h" +#include "base/environment.h" #include "base/logging.h" +#include "base/nix/xdg_util.h" +#include "base/process_util.h" #include "media/audio/audio_output_dispatcher.h" #include "media/audio/fake_audio_input_stream.h" #include "media/audio/fake_audio_output_stream.h" @@ -130,6 +133,24 @@ void AudioManagerLinux::ReleaseOutputStream(AlsaPcmOutputStream* stream) { } } +bool AudioManagerLinux::CanShowAudioInputSettings() { + scoped_ptr<base::Environment> env(base::Environment::Create()); + base::nix::DesktopEnvironment desktop = base::nix::GetDesktopEnvironment( + env.get()); + return (desktop == base::nix::DESKTOP_ENVIRONMENT_GNOME || + desktop == base::nix::DESKTOP_ENVIRONMENT_KDE3 || + desktop == base::nix::DESKTOP_ENVIRONMENT_KDE4); +} + +void AudioManagerLinux::ShowAudioInputSettings() { + scoped_ptr<base::Environment> env(base::Environment::Create()); + base::nix::DesktopEnvironment desktop = base::nix::GetDesktopEnvironment( + env.get()); + std::string command((desktop == base::nix::DESKTOP_ENVIRONMENT_GNOME) ? + "gnome-volume-control" : "kmix"); + base::LaunchApp(CommandLine(FilePath(command)), false, false, NULL); +} + // static AudioManager* AudioManager::CreateAudioManager() { return new AudioManagerLinux(); diff --git a/media/audio/linux/audio_manager_linux.h b/media/audio/linux/audio_manager_linux.h index b657966..ca759f0 100644 --- a/media/audio/linux/audio_manager_linux.h +++ b/media/audio/linux/audio_manager_linux.h @@ -28,6 +28,8 @@ class AudioManagerLinux : public AudioManagerBase { virtual bool HasAudioInputDevices(); virtual AudioOutputStream* MakeAudioOutputStream(AudioParameters params); virtual AudioInputStream* MakeAudioInputStream(AudioParameters params); + virtual bool CanShowAudioInputSettings(); + virtual void ShowAudioInputSettings(); virtual void MuteAll(); virtual void UnMuteAll(); diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc index 0c896d1..7b3d6fa 100644 --- a/media/audio/win/audio_manager_win.cc +++ b/media/audio/win/audio_manager_win.cc @@ -11,9 +11,14 @@ #include <setupapi.h> #include "base/basictypes.h" +#include "base/command_line.h" +#include "base/file_path.h" +#include "base/path_service.h" +#include "base/process_util.h" #include "base/scoped_ptr.h" #include "base/string_number_conversions.h" #include "base/string_util.h" +#include "base/win/windows_version.h" #include "media/audio/fake_audio_input_stream.h" #include "media/audio/fake_audio_output_stream.h" #include "media/audio/win/audio_manager_win.h" @@ -229,6 +234,29 @@ string16 AudioManagerWin::GetAudioInputDeviceModel() { return string16(); } +bool AudioManagerWin::CanShowAudioInputSettings() { + return true; +} + +void AudioManagerWin::ShowAudioInputSettings() { + std::wstring program; + std::string argument; + if (base::win::GetVersion() <= base::win::VERSION_XP) { + program = L"sndvol32.exe"; + argument = "-R"; + } else { + program = L"control.exe"; + argument = "mmsys.cpl,,1"; + } + + FilePath path; + PathService::Get(base::DIR_SYSTEM, &path); + path = path.Append(program); + CommandLine command_line(path); + command_line.AppendArg(argument); + base::LaunchApp(command_line, false, false, NULL); +} + // static AudioManager* AudioManager::CreateAudioManager() { return new AudioManagerWin(); diff --git a/media/audio/win/audio_manager_win.h b/media/audio/win/audio_manager_win.h index d6ff37f..1edd6a6 100644 --- a/media/audio/win/audio_manager_win.h +++ b/media/audio/win/audio_manager_win.h @@ -27,6 +27,8 @@ class AudioManagerWin : public AudioManagerBase { virtual void MuteAll(); virtual void UnMuteAll(); virtual string16 GetAudioInputDeviceModel(); + virtual bool CanShowAudioInputSettings(); + virtual void ShowAudioInputSettings(); // Windows-only methods to free a stream created in MakeAudioStream. These // are called internally by the audio stream when it has been closed. |