Index: media/audio/android/opensles_output.cc |
=================================================================== |
--- media/audio/android/opensles_output.cc (revision 186971) |
+++ media/audio/android/opensles_output.cc (working copy) |
@@ -49,6 +49,46 @@ |
DCHECK(!audio_data_[0]); |
} |
+void OpenSLESOutputStream::SetAudioMode() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ DCHECK(env); |
+ |
+ jobject j_context = base::android::GetApplicationContext(); |
+ DCHECK(j_context); |
+ |
+ // context.getSystemService(Context.AUDIO_SERVICE). |
Yaron
2013/03/09 00:31:18
We're no longer taking patches with hand-written J
|
+ jstring audio_service_string = env->NewStringUTF("audio"); |
+ jclass context_class = env->GetObjectClass(j_context); |
Yaron
2013/03/09 00:31:18
Examle for why we say this: you're currently leaki
|
+ CHECK(context_class); |
+ jmethodID method = env->GetMethodID( |
+ context_class, "getSystemService", |
+ "(Ljava/lang/String;)Ljava/lang/Object;"); |
+ CHECK(method); |
+ jobject j_am = env->CallObjectMethod(j_context, method, |
+ audio_service_string); |
+ CHECK(j_am); |
+ jclass j_am_class = env->GetObjectClass(j_am); |
+ CHECK(j_am_class); |
+ |
+ // AudioManager.MODE_IN_COMMUNICATION. |
+ jclass cls = env->FindClass("android/media/AudioManager"); |
+ CHECK(cls); |
+ jfieldID field = env->GetStaticFieldID( |
+ cls, |
+ "MODE_IN_COMMUNICATION", |
+ "I"); |
+ CHECK(field); |
+ jint am_mode = env->GetStaticIntField(cls, field); |
+ CHECK(am_mode); |
+ env->DeleteLocalRef(cls); |
+ |
+ // audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION) |
+ jmethodID setmode_method = env->GetMethodID(j_am_class, "setMode", "(I)V"); |
+ CHECK(setmode_method); |
+ env->CallVoidMethod(j_am, setmode_method, am_mode); |
+ base::android::CheckException(env); |
+} |
+ |
bool OpenSLESOutputStream::Open() { |
if (engine_object_.Get()) |
return false; |
@@ -56,6 +96,8 @@ |
if (!CreatePlayer()) |
return false; |
+ SetAudioMode(); |
+ |
SetupAudioBuffer(); |
return true; |