Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Unified Diff: media/audio/android/opensles_output.cc

Issue 12571006: Add MODIFY_AUDIO_SETTINGS permission in Android manifest and implementation in audio manager. (Closed) Base URL: https://src.chromium.org/svn/trunk/src/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/android/opensles_output.h ('k') | testing/android/AndroidManifest.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « media/audio/android/opensles_output.h ('k') | testing/android/AndroidManifest.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698