summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiza Sulistyo <riza@teluu.com>2014-08-20 12:38:43 +0000
committerRiza Sulistyo <riza@teluu.com>2014-08-20 12:38:43 +0000
commitf49d4d7c66253966f97abbf6864d32cde754662f (patch)
tree8cd2fcc89a4f6d7afe48ab9dc3ad3eec1db982cd
parent5c5c855b8ada79dd79237dcb7e68f413eba47339 (diff)
Misc (re #1751): fixed sound issue on Android L(using PJMEDIA_AUDIO_DEV_HAS_ANDROID_JNI), caused by the difference in JNI array handling. (Thanks Miguel Penades for the report).
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4896 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia-audiodev/android_jni_dev.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/pjmedia/src/pjmedia-audiodev/android_jni_dev.c b/pjmedia/src/pjmedia-audiodev/android_jni_dev.c
index 255663a4..1ee46224 100644
--- a/pjmedia/src/pjmedia-audiodev/android_jni_dev.c
+++ b/pjmedia/src/pjmedia-audiodev/android_jni_dev.c
@@ -261,7 +261,6 @@ static int AndroidRecorderCallback(void *userData)
PJ_LOG(3, (THIS_FILE, "Unable to allocate input buffer"));
goto on_return;
}
- buf = (*jni_env)->GetByteArrayElements(jni_env, inputBuffer, 0);
/* Start recording
* setpriority(PRIO_PROCESS, 0, -19); //ANDROID_PRIORITY_AUDIO
@@ -296,6 +295,7 @@ static int AndroidRecorderCallback(void *userData)
continue;
}
+ buf = (*jni_env)->GetByteArrayElements(jni_env, inputBuffer, 0);
frame.type = PJMEDIA_FRAME_TYPE_AUDIO;
frame.size = size;
frame.bit_info = 0;
@@ -303,12 +303,13 @@ static int AndroidRecorderCallback(void *userData)
frame.timestamp.u64 = stream->rec_timestamp.u64;
status = (*stream->rec_cb)(stream->user_data, &frame);
+ (*jni_env)->ReleaseByteArrayElements(jni_env, inputBuffer, buf,
+ JNI_ABORT);
stream->rec_timestamp.u64 += stream->param.samples_per_frame /
stream->param.channel_count;
}
- (*jni_env)->ReleaseByteArrayElements(jni_env, inputBuffer, buf, 0);
(*jni_env)->DeleteLocalRef(jni_env, inputBuffer);
on_return:
@@ -390,6 +391,9 @@ static int AndroidTrackCallback(void *userData)
if (frame.type != PJMEDIA_FRAME_TYPE_AUDIO)
pj_bzero(frame.buf, frame.size);
+ (*jni_env)->ReleaseByteArrayElements(jni_env, outputBuffer, buf,
+ JNI_COMMIT);
+
/* Write to the device output. */
bytesWritten = (*jni_env)->CallIntMethod(jni_env, stream->track,
write_method, outputBuffer,