diff options
author | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-20 06:18:49 +0000 |
---|---|---|
committer | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-20 06:18:49 +0000 |
commit | e2ca3d4a927a09809dd1d4a4669eeecd778ae0ce (patch) | |
tree | 390777cbc92a31830f290a5f35bbbba2c3218943 /media/audio/audio_manager_base.cc | |
parent | 0567733b5a7e5a8e2e771c9ea83a7cd53403988c (diff) | |
download | chromium_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.cc | 34 |
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 |