diff options
author | Riza Sulistyo <riza@teluu.com> | 2014-08-20 12:38:43 +0000 |
---|---|---|
committer | Riza Sulistyo <riza@teluu.com> | 2014-08-20 12:38:43 +0000 |
commit | f49d4d7c66253966f97abbf6864d32cde754662f (patch) | |
tree | 8cd2fcc89a4f6d7afe48ab9dc3ad3eec1db982cd | |
parent | 5c5c855b8ada79dd79237dcb7e68f413eba47339 (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.c | 8 |
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, |