summaryrefslogtreecommitdiffstats
path: root/media/audio/audio_manager_base.cc
diff options
context:
space:
mode:
authorwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-20 06:18:49 +0000
committerwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-20 06:18:49 +0000
commite2ca3d4a927a09809dd1d4a4669eeecd778ae0ce (patch)
tree390777cbc92a31830f290a5f35bbbba2c3218943 /media/audio/audio_manager_base.cc
parent0567733b5a7e5a8e2e771c9ea83a7cd53403988c (diff)
downloadchromium_src-e2ca3d4a927a09809dd1d4a4669eeecd778ae0ce.zip
chromium_src-e2ca3d4a927a09809dd1d4a4669eeecd778ae0ce.tar.gz
chromium_src-e2ca3d4a927a09809dd1d4a4669eeecd778ae0ce.tar.bz2
Add MODIFY_AUDIO_SETTINGS permission in Android manifest and implementation in android audio manager.
MODIFY_AUDIO_SETTINGS allows application to be able to configure audio settings. In android audio manager, a function SetAudioMode is added to set audio mode. BUG=180328 Contributed by leozwang@chromium.org (https://codereview.chromium.org/12571006/). Review URL: https://codereview.chromium.org/12843015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189210 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/audio_manager_base.cc')
-rw-r--r--media/audio/audio_manager_base.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 2a65f82..0daf266 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -9,6 +9,9 @@
#include "base/command_line.h"
#include "base/message_loop_proxy.h"
#include "base/threading/thread.h"
+#if defined(OS_ANDROID)
+#include "jni/AudioManagerAndroid_jni.h"
+#endif
#include "media/audio/audio_output_dispatcher_impl.h"
#include "media/audio/audio_output_proxy.h"
#include "media/audio/audio_output_resampler.h"
@@ -31,6 +34,11 @@ static const int kDefaultMaxInputStreams = 16;
static const int kMaxInputChannels = 2;
+#if defined(OS_ANDROID)
+static const int kAudioModeNormal = 0x00000000;
+static const int kAudioModeInCommunication = 0x00000003;
+#endif
+
const char AudioManagerBase::kDefaultDeviceName[] = "Default";
const char AudioManagerBase::kDefaultDeviceId[] = "default";
@@ -161,6 +169,11 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream(
if (stream)
++num_input_streams_;
+#if defined(OS_ANDROID)
+ if (num_input_streams_ == 1)
+ SetAudioMode(kAudioModeInCommunication);
+#endif
+
return stream;
}
@@ -250,6 +263,10 @@ void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) {
// TODO(xians) : Have a clearer destruction path for the AudioInputStream.
--num_input_streams_;
delete stream;
+#if defined(OS_ANDROID)
+ if (!num_input_streams_)
+ SetAudioMode(kAudioModeNormal);
+#endif
}
void AudioManagerBase::IncreaseActiveInputStreamCount() {
@@ -317,6 +334,13 @@ void AudioManagerBase::ShutdownOnAudioThread() {
#endif // defined(OS_IOS)
}
+#if defined(OS_ANDROID)
+// static
+bool AudioManagerBase::RegisterAudioManager(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+#endif
+
void AudioManagerBase::AddOutputDeviceChangeListener(
AudioDeviceListener* listener) {
DCHECK(message_loop_->BelongsToCurrentThread());
@@ -345,4 +369,14 @@ AudioParameters AudioManagerBase::GetInputStreamParameters(
return AudioParameters();
}
+#if defined(OS_ANDROID)
+void AudioManagerBase::SetAudioMode(int mode) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ jobject context = base::android::GetApplicationContext();
+ DCHECK(context);
+
+ Java_AudioManagerAndroid_setMode(env, context, mode);
+}
+#endif
+
} // namespace media