Chromium Code Reviews| Index: media/audio/android/audio_manager_android.cc |
| diff --git a/media/audio/android/audio_manager_android.cc b/media/audio/android/audio_manager_android.cc |
| index dc77a4c3eec6a2c6e5310ecd0dec5a0a88cb7ec6..e27a5fac8abbda903ac035d211a47cb2f9783db6 100644 |
| --- a/media/audio/android/audio_manager_android.cc |
| +++ b/media/audio/android/audio_manager_android.cc |
| @@ -4,6 +4,10 @@ |
| #include "media/audio/android/audio_manager_android.h" |
| +#include "base/android/build_info.h" |
| +#include "base/android/jni_array.h" |
| +#include "base/android/jni_string.h" |
| +#include "base/android/scoped_java_ref.h" |
| #include "base/logging.h" |
| #include "jni/AudioManagerAndroid_jni.h" |
| #include "media/audio/android/opensles_input.h" |
| @@ -13,10 +17,14 @@ |
| #include "media/audio/fake_audio_input_stream.h" |
| #include "media/base/channel_layout.h" |
| +using base::android::AppendJavaStringArrayToStringVector; |
| +using base::android::AttachCurrentThread; |
| +using base::android::ConvertJavaStringToUTF8; |
| +using base::android::ScopedJavaLocalRef; |
| + |
| namespace media { |
| static void AddDefaultDevice(AudioDeviceNames* device_names) { |
| - DCHECK(device_names->empty()); |
|
tommi (sloooow) - chröme
2013/11/22 14:59:10
nit: maybe just dcheck instead that the default de
henrika (OOO until Aug 14)
2013/11/25 09:38:31
Fixed based on you comment below ;-)
|
| device_names->push_front( |
| AudioDeviceName(AudioManagerBase::kDefaultDeviceName, |
| AudioManagerBase::kDefaultDeviceId)); |
| @@ -42,9 +50,16 @@ AudioManagerAndroid::AudioManagerAndroid() { |
| Java_AudioManagerAndroid_createAudioManagerAndroid( |
| base::android::AttachCurrentThread(), |
| base::android::GetApplicationContext())); |
| + |
| + Java_AudioManagerAndroid_init( |
| + base::android::AttachCurrentThread(), |
| + j_audio_manager_.obj()); |
| } |
| AudioManagerAndroid::~AudioManagerAndroid() { |
| + Java_AudioManagerAndroid_close( |
| + base::android::AttachCurrentThread(), |
| + j_audio_manager_.obj()); |
| Shutdown(); |
| } |
| @@ -63,7 +78,30 @@ void AudioManagerAndroid::GetAudioInputDeviceNames( |
| void AudioManagerAndroid::GetAudioOutputDeviceNames( |
| AudioDeviceNames* device_names) { |
| - AddDefaultDevice(device_names); |
| + JNIEnv* env = AttachCurrentThread(); |
| + int sdk = base::android::BuildInfo::GetInstance()->sdk_int(); |
| + if (sdk <= 16) { |
| + // TODO(henrika): figure out where/if we must draw a limit here. |
| + AddDefaultDevice(device_names); |
| + } else { |
| + ScopedJavaLocalRef<jobjectArray> j_device_array = |
| + Java_AudioManagerAndroid_getAudioOutputDeviceNames( |
| + env, j_audio_manager_.obj()); |
|
tommi (sloooow) - chröme
2013/11/22 14:59:10
nit: indent
henrika (OOO until Aug 14)
2013/11/25 09:38:31
Done.
|
| + std::vector<std::string> devices; |
| + AppendJavaStringArrayToStringVector(env, j_device_array.obj(), &devices); |
| + |
| + std::vector<std::string>::iterator it = devices.begin(); |
| + while (it != devices.end()) { |
| + device_names->push_back(AudioDeviceName(*it, *it)); |
| + DVLOG(1) << "ouput device name: " << *it; |
| + ++it; |
| + } |
| + |
| + // Always add default device parameters as first element. |
| + // TODO(henrika): figure out how we shall handle the term "default" |
| + // on Android. |
| + AddDefaultDevice(device_names); |
|
tommi (sloooow) - chröme
2013/11/22 14:59:10
couldn't you call this method before enumerating t
henrika (OOO until Aug 14)
2013/11/25 09:38:31
Thanks ;-)
|
| + } |
| } |
| AudioParameters AudioManagerAndroid::GetInputStreamParameters( |
| @@ -90,8 +128,9 @@ AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( |
| AudioManagerBase::MakeAudioOutputStream(params, std::string(), |
| std::string()); |
| if (stream && output_stream_count() == 1) { |
| - SetAudioMode(kAudioModeInCommunication); |
| - RegisterHeadsetReceiver(); |
| + SetAudioMode(kAudioModeInCommunication); |
| + // TODO(henrika): resolve conflict with device enumeration. |
| + // RegisterHeadsetReceiver(); |
| } |
| return stream; |
| } |
| @@ -106,7 +145,8 @@ AudioInputStream* AudioManagerAndroid::MakeAudioInputStream( |
| void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) { |
| AudioManagerBase::ReleaseOutputStream(stream); |
| if (!output_stream_count()) { |
| - UnregisterHeadsetReceiver(); |
| + // TODO(henrika): resolve conflict with device enumeration. |
| + // UnregisterHeadsetReceiver(); |
| SetAudioMode(kAudioModeNormal); |
| } |
| } |