在函数中:
jint Java_cn_vl_video_Encoder_encode(JNIEnv * env, jobject obj, jlong handle, jbyteArray in, jint in_size, jbyteArray out)
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有一些正确的数据。但是释放字节数组后,Java中out总共为0。
为什么会发生这种情况?
当你说“out
istotal 0”时,你似乎期望数组中的元素数量会神奇地改变。这不是、也不可能是它的运作方式。请注意,您没有将 out_size
传递给 ReleaseByteArrayElements()
,也不是可以,那么它如何知道数组的大小已更改?
我是一名优秀的程序员,十分优秀!