在功能:Android的JNI:爲什麼ReleaseByteArrayElements不會複製回數據
jint Java_cn_vl_video_Encoder_encode(JNIEnv * env, jobject obj, jlong handle, jbyteArray in, jint in_size, jbyteArray out)
出來是Java的字節數組。
有一些像這樣的代碼:
char * h264Buf = (char*) (*env)->GetByteArrayElements(env, out, &h264Buf_isCopy);
jint out_size = vl_video_encoder_encode(handle_t, FRAME_TYPE_AUTO, buf, in_size, &h264Buf);
(*env)->ReleaseByteArrayElements(env, out, (jbyte*)h264Buf, 0);
我已經印刷了一些日誌中JNI代碼,h264Buf有一些正確的數據。 但是在釋放字節數組之後,out在Java中總共爲0。
爲什麼會發生這種情況?
你確定'h264buf'的內容正在被修改嗎? 「vl_video_encoder_encode()」取指針的地址而不是緩衝區的地址似乎有點奇怪。如果它正在一個單獨的緩衝區中工作,然後返回一個更新的指針,則不會看到從Java代碼分配的緩衝區中的任何更改。 (如果是這種情況,你需要自己將'memcpy()'數據寫入字節數組)。 – fadden 2014-12-07 19:44:48