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..629535163102dd7ddd473bf3dc060abf730ab89f 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,6 +17,11 @@ |
#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) { |
@@ -42,9 +51,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 +79,30 @@ void AudioManagerAndroid::GetAudioInputDeviceNames( |
void AudioManagerAndroid::GetAudioOutputDeviceNames( |
AudioDeviceNames* device_names) { |
+ // Always add default device parameters as first element. |
+ // TODO(henrika): figure out how we shall handle the term "default" |
+ // on Android. |
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); |
Jói
2013/11/25 13:09:35
Not sure you want to add the default device again
henrika (OOO until Aug 14)
2013/11/25 13:28:14
oops
|
+ } else { |
+ ScopedJavaLocalRef<jobjectArray> j_device_array = |
+ Java_AudioManagerAndroid_getAudioOutputDeviceNames( |
+ env, j_audio_manager_.obj()); |
+ 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; |
+ } |
+ } |
} |
AudioParameters AudioManagerAndroid::GetInputStreamParameters( |
@@ -90,8 +129,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 +146,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); |
} |
} |