大家好:
请问下, 我想把 java层的 byte[]的二进制数据,传递到native层使用,然后解码后再 memcpy到surface中。
1,转换如下:
jint Java_com_testJni_setData(JNIEnv* env, jobject thiz, jbyteArray in, jint length)
{
char* data = NULL;
if (NULL != in) {
if (0 < length) {
void *data = malloc(length);
(*env)->GetByteArrayRegion(env,in, (jint)0, length, (jbyte *) data);
............////这里把数据投递到一个C代码的一个内存池里
}
}
return 0;
}
2,可是这样我感觉没有什么问题,可是当有数据传递过来时, native层的把解码后的数据传递到surface的时候就出现
08-01 11:33:54.685: A/libc(11713): Fatal signal 11 (SIGSEGV) at 0x4ce6d000 (code=1)其问下为什么???
3,如果不把数据传递到上层,则没有这个错误提醒!!!请教下大牛,这个是为什么,谢谢!
请问下, 我想把 java层的 byte[]的二进制数据,传递到native层使用,然后解码后再 memcpy到surface中。
1,转换如下:
jint Java_com_testJni_setData(JNIEnv* env, jobject thiz, jbyteArray in, jint length)
{
char* data = NULL;
if (NULL != in) {
if (0 < length) {
void *data = malloc(length);
(*env)->GetByteArrayRegion(env,in, (jint)0, length, (jbyte *) data);
............////这里把数据投递到一个C代码的一个内存池里
}
}
return 0;
}
2,可是这样我感觉没有什么问题,可是当有数据传递过来时, native层的把解码后的数据传递到surface的时候就出现
08-01 11:33:54.685: A/libc(11713): Fatal signal 11 (SIGSEGV) at 0x4ce6d000 (code=1)其问下为什么???
3,如果不把数据传递到上层,则没有这个错误提醒!!!请教下大牛,这个是为什么,谢谢!
我是直接这样写的.jbyteArray ucData
void *data = malloc(length);
这样是否定义了两个data呢?
我是这样写的:unsigned char *byteArrayToByte(JNIEnv* env, jbyteArray byteArray) {
jbyte *pjb = (jbyte *) (*env)->GetByteArrayElements(env, byteArray, 0);
jsize jlen = (*env)->GetArrayLength(env, byteArray);
INT len = (INT) jlen;
UINT8 *byBuf = NULL; if (len > 0) {
byBuf = (char*) malloc(len + 1);
memcpy(byBuf, pjb, len);
byBuf[len] = '\0';
}
else {
byBuf = (char*) malloc(1);
byBuf[0] = '\0';
} (*env)->ReleaseByteArrayElements(env, byteArray, pjb, 0);
return byBuf;
}