Merge "fix problem in AudioEffect JNI setup." into gingerbread
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 9d215b7..8409adc 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -252,21 +252,23 @@
lpJniStorage->mCallbackData.audioTrack_ref = env->NewGlobalRef(weak_this);
lpJniStorage->mStreamType = atStreamType;
-
- jint* nSession = NULL;
- if (jSession) {
- nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL);
- if (nSession == NULL) {
- LOGE("Error creating AudioTrack: Error retrieving session id pointer");
- delete lpJniStorage;
- return AUDIOTRACK_ERROR;
- }
- } else {
+
+ if (jSession == NULL) {
LOGE("Error creating AudioTrack: invalid session ID pointer");
delete lpJniStorage;
return AUDIOTRACK_ERROR;
}
+ jint* nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL);
+ if (nSession == NULL) {
+ LOGE("Error creating AudioTrack: Error retrieving session id pointer");
+ delete lpJniStorage;
+ return AUDIOTRACK_ERROR;
+ }
+ int sessionId = nSession[0];
+ env->ReleasePrimitiveArrayCritical(jSession, nSession, 0);
+ nSession = NULL;
+
// create the native AudioTrack object
AudioTrack* lpTrack = new AudioTrack();
if (lpTrack == NULL) {
@@ -288,7 +290,7 @@
0,// notificationFrames == 0 since not using EVENT_MORE_DATA to feed the AudioTrack
0,// shared mem
true,// thread can call Java
- nSession[0]);// audio session ID
+ sessionId);// audio session ID
} else if (memoryMode == javaAudioTrackFields.MODE_STATIC) {
// AudioTrack is using shared memory
@@ -309,7 +311,7 @@
0,// notificationFrames == 0 since not using EVENT_MORE_DATA to feed the AudioTrack
lpJniStorage->mMemBase,// shared mem
true,// thread can call Java
- nSession[0]);// audio session ID
+ sessionId);// audio session ID
}
if (lpTrack->initCheck() != NO_ERROR) {
@@ -317,9 +319,13 @@
goto native_init_failure;
}
+ nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL);
+ if (nSession == NULL) {
+ LOGE("Error creating AudioTrack: Error retrieving session id pointer");
+ goto native_init_failure;
+ }
// read the audio session ID back from AudioTrack in case we create a new session
nSession[0] = lpTrack->getSessionId();
-
env->ReleasePrimitiveArrayCritical(jSession, nSession, 0);
nSession = NULL;
diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp
index b16372d..cb2f0f9 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -304,14 +304,7 @@
lpJniStorage->mCallbackData.audioEffect_class,
&lpJniStorage->mCallbackData);
- if (jId) {
- nId = (jint *) env->GetPrimitiveArrayCritical(jId, NULL);
- if (nId == NULL) {
- LOGE("setup: Error retrieving id pointer");
- lStatus = AUDIOEFFECT_ERROR_BAD_VALUE;
- goto setup_failure;
- }
- } else {
+ if (jId == NULL) {
LOGE("setup: NULL java array for id pointer");
lStatus = AUDIOEFFECT_ERROR_BAD_VALUE;
goto setup_failure;
@@ -336,8 +329,13 @@
goto setup_failure;
}
+ nId = (jint *) env->GetPrimitiveArrayCritical(jId, NULL);
+ if (nId == NULL) {
+ LOGE("setup: Error retrieving id pointer");
+ lStatus = AUDIOEFFECT_ERROR_BAD_VALUE;
+ goto setup_failure;
+ }
nId[0] = lpAudioEffect->id();
-
env->ReleasePrimitiveArrayCritical(jId, nId, 0);
nId = NULL;
diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp
index 7b271ce..57cafd4 100644
--- a/media/jni/audioeffect/android_media_Visualizer.cpp
+++ b/media/jni/audioeffect/android_media_Visualizer.cpp
@@ -246,14 +246,7 @@
lpJniStorage->mCallbackData.visualizer_class,
&lpJniStorage->mCallbackData);
- if (jId) {
- nId = (jint *) env->GetPrimitiveArrayCritical(jId, NULL);
- if (nId == NULL) {
- LOGE("setup: Error retrieving id pointer");
- lStatus = VISUALIZER_ERROR_BAD_VALUE;
- goto setup_failure;
- }
- } else {
+ if (jId == NULL) {
LOGE("setup: NULL java array for id pointer");
lStatus = VISUALIZER_ERROR_BAD_VALUE;
goto setup_failure;
@@ -275,8 +268,13 @@
goto setup_failure;
}
+ nId = (jint *) env->GetPrimitiveArrayCritical(jId, NULL);
+ if (nId == NULL) {
+ LOGE("setup: Error retrieving id pointer");
+ lStatus = VISUALIZER_ERROR_BAD_VALUE;
+ goto setup_failure;
+ }
nId[0] = lpVisualizer->id();
-
env->ReleasePrimitiveArrayCritical(jId, nId, 0);
nId = NULL;
@@ -424,7 +422,6 @@
jint status = translateError(lpVisualizer->getWaveForm((uint8_t *)nWaveform));
env->ReleasePrimitiveArrayCritical(jWaveform, nWaveform, 0);
-
return status;
}