summaryrefslogtreecommitdiffstats
path: root/media/audio
diff options
context:
space:
mode:
authorsatish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 07:02:00 +0000
committersatish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 07:02:00 +0000
commit1784ad6252e50a5ca1a67026f53cb139490009cd (patch)
tree99a60deb561d5ff4db1b6dee6bf86b3499d6f914 /media/audio
parent07f63c6bba7e33160fc54af7f2cf4cf207e0831b (diff)
downloadchromium_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.h13
-rw-r--r--media/audio/audio_manager_base.cc7
-rw-r--r--media/audio/audio_manager_base.h3
-rw-r--r--media/audio/audio_output_proxy_unittest.cc2
-rw-r--r--media/audio/linux/audio_manager_linux.cc21
-rw-r--r--media/audio/linux/audio_manager_linux.h2
-rw-r--r--media/audio/win/audio_manager_win.cc28
-rw-r--r--media/audio/win/audio_manager_win.h2
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.