aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/android/jni.cpp
diff options
context:
space:
mode:
authordhewg2011-02-26 18:44:17 +0100
committerdhewg2011-02-27 09:04:37 +0100
commit0e869a5cf0e455f7cd5ce5c39192f3433b931e97 (patch)
tree992bc587994ce7fd3bf9048438b1881dcf3b94be /backends/platform/android/jni.cpp
parentbea57f695064c6f084ff26405d91b812848fee33 (diff)
downloadscummvm-rg350-0e869a5cf0e455f7cd5ce5c39192f3433b931e97.tar.gz
scummvm-rg350-0e869a5cf0e455f7cd5ce5c39192f3433b931e97.tar.bz2
scummvm-rg350-0e869a5cf0e455f7cd5ce5c39192f3433b931e97.zip
ANDROID: Pause the AudioTrack when possible
Only works in situations without any registered channels (or all paused) at the mixer (like on the launcher or GMM). CPU usage before (Galaxy Tab): ~5% scummvm ~15% mediaserver After: ~2% scummvm 0% mediaserver ;)
Diffstat (limited to 'backends/platform/android/jni.cpp')
-rw-r--r--backends/platform/android/jni.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/backends/platform/android/jni.cpp b/backends/platform/android/jni.cpp
index 5e11203db8..8964fe63d8 100644
--- a/backends/platform/android/jni.cpp
+++ b/backends/platform/android/jni.cpp
@@ -64,6 +64,7 @@ jmethodID JNI::_MID_setupScummVMSurface = 0;
jmethodID JNI::_MID_destroyScummVMSurface = 0;
jmethodID JNI::_MID_swapBuffers = 0;
+jmethodID JNI::_MID_AudioTrack_flush = 0;
jmethodID JNI::_MID_AudioTrack_pause = 0;
jmethodID JNI::_MID_AudioTrack_play = 0;
jmethodID JNI::_MID_AudioTrack_stop = 0;
@@ -332,6 +333,15 @@ void JNI::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
void JNI::setAudioPause() {
JNIEnv *env = JNI::getEnv();
+ env->CallVoidMethod(_jobj_audio_track, _MID_AudioTrack_flush);
+
+ if (env->ExceptionCheck()) {
+ warning("Error flushing AudioTrack");
+
+ env->ExceptionDescribe();
+ env->ExceptionClear();
+ }
+
env->CallVoidMethod(_jobj_audio_track, _MID_AudioTrack_pause);
if (env->ExceptionCheck()) {
@@ -417,6 +427,7 @@ void JNI::create(JNIEnv *env, jobject self, jobject am, jobject at,
return; \
} while (0)
+ FIND_METHOD(flush, "()V");
FIND_METHOD(pause, "()V");
FIND_METHOD(play, "()V");
FIND_METHOD(stop, "()V");