| Index: media/audio/android/audio_manager_android.cc
|
| ===================================================================
|
| --- media/audio/android/audio_manager_android.cc (revision 194203)
|
| +++ media/audio/android/audio_manager_android.cc (working copy)
|
| @@ -5,6 +5,7 @@
|
| #include "media/audio/android/audio_manager_android.h"
|
|
|
| #include "base/logging.h"
|
| +#include "jni/AudioManagerAndroid_jni.h"
|
| #include "media/audio/android/opensles_input.h"
|
| #include "media/audio/android/opensles_output.h"
|
| #include "media/audio/audio_manager.h"
|
| @@ -18,12 +19,20 @@
|
| // Maximum number of output streams that can be open simultaneously.
|
| static const int kMaxOutputStreams = 10;
|
|
|
| +static const int kAudioModeNormal = 0x00000000;
|
| +static const int kAudioModeInCommunication = 0x00000003;
|
| +
|
| AudioManager* CreateAudioManager() {
|
| return new AudioManagerAndroid();
|
| }
|
|
|
| AudioManagerAndroid::AudioManagerAndroid() {
|
| SetMaxOutputStreamsAllowed(kMaxOutputStreams);
|
| +
|
| + j_audio_manager_.Reset(
|
| + Java_AudioManagerAndroid_createAudioManagerAndroid(
|
| + base::android::AttachCurrentThread(),
|
| + base::android::GetApplicationContext()));
|
| }
|
|
|
| AudioManagerAndroid::~AudioManagerAndroid() {
|
| @@ -57,6 +66,36 @@
|
| kDefaultSampleRate, 16, kDefaultBufferSize);
|
| }
|
|
|
| +AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream(
|
| + const AudioParameters& params) {
|
| + AudioOutputStream* stream =
|
| + AudioManagerBase::MakeAudioOutputStream(params);
|
| + if (GetNumOutputStreams() == 1)
|
| + RegisterHeadsetReceiver();
|
| + return stream;
|
| +}
|
| +
|
| +AudioInputStream* AudioManagerAndroid::MakeAudioInputStream(
|
| + const AudioParameters& params, const std::string& device_id) {
|
| + AudioInputStream* stream =
|
| + AudioManagerBase::MakeAudioInputStream(params, device_id);
|
| + if (GetNumInputStreams() == 1)
|
| + SetAudioMode(kAudioModeInCommunication);
|
| + return stream;
|
| +}
|
| +
|
| +void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) {
|
| + AudioManagerBase::ReleaseOutputStream(stream);
|
| + if (!GetNumOutputStreams())
|
| + UnregisterHeadsetReceiver();
|
| +}
|
| +
|
| +void AudioManagerAndroid::ReleaseInputStream(AudioInputStream* stream) {
|
| + AudioManagerBase::ReleaseInputStream(stream);
|
| + if (!GetNumInputStreams())
|
| + SetAudioMode(kAudioModeNormal);
|
| +}
|
| +
|
| AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream(
|
| const AudioParameters& params) {
|
| DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
|
| @@ -116,4 +155,27 @@
|
| sample_rate, bits_per_sample, buffer_size);
|
| }
|
|
|
| +// static
|
| +bool AudioManagerAndroid::RegisterAudioManager(JNIEnv* env) {
|
| + return RegisterNativesImpl(env);
|
| +}
|
| +
|
| +void AudioManagerAndroid::SetAudioMode(int mode) {
|
| + Java_AudioManagerAndroid_setMode(
|
| + base::android::AttachCurrentThread(),
|
| + j_audio_manager_.obj(), mode);
|
| +}
|
| +
|
| +void AudioManagerAndroid::RegisterHeadsetReceiver() {
|
| + Java_AudioManagerAndroid_registerHeadsetReceiver(
|
| + base::android::AttachCurrentThread(),
|
| + j_audio_manager_.obj());
|
| +}
|
| +
|
| +void AudioManagerAndroid::UnregisterHeadsetReceiver() {
|
| + Java_AudioManagerAndroid_unregisterHeadsetReceiver(
|
| + base::android::AttachCurrentThread(),
|
| + j_audio_manager_.obj());
|
| +}
|
| +
|
| } // namespace media
|
|
|