Chromium Code Reviews| 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 (output_stream_count() == 1) |
|
DaleCurtis
2013/04/15 21:49:09
Sorry, just noticed this should be (stream && outp
leozwang1
2013/04/15 21:59:22
Done.
leozwang1
2013/04/15 21:59:22
Done.
|
| + RegisterHeadsetReceiver(); |
| + return stream; |
| +} |
| + |
| +AudioInputStream* AudioManagerAndroid::MakeAudioInputStream( |
| + const AudioParameters& params, const std::string& device_id) { |
| + AudioInputStream* stream = |
| + AudioManagerBase::MakeAudioInputStream(params, device_id); |
| + if (input_stream_count() == 1) |
| + SetAudioMode(kAudioModeInCommunication); |
| + return stream; |
| +} |
| + |
| +void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) { |
| + AudioManagerBase::ReleaseOutputStream(stream); |
| + if (!output_stream_count()) |
| + UnregisterHeadsetReceiver(); |
| +} |
| + |
| +void AudioManagerAndroid::ReleaseInputStream(AudioInputStream* stream) { |
| + AudioManagerBase::ReleaseInputStream(stream); |
| + if (!input_stream_count()) |
| + 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 |