读书人

jni中char[]怎么转成ByteBuffer

发布时间: 2012-03-25 20:55:17 作者: rapoo

jni中char[]如何转成ByteBuffer
在jni中,给out赋值之后,如何把Out里的内容再拷贝到pOutBuffer中,我现在的方法返回到java中pOutBuffer是空的。

[code=C/C++][/code]
jmethodID ArrayMethodId = env->GetMethodID(ByteBufferClass,"array","()[B");
jmethodID ClearMethodId = env->GetMethodID(ByteBufferClass,"clear","()Ljava/nio/Buffer;");

// clear output buffer
env->CallObjectMethod(pOutBuffer,ClearMethodId);

OutByteArray = (jbyteArray)env->CallObjectMethod(pOutBuffer, ArrayMethodId);
OutJbyte = env->GetByteArrayElements(OutByteArray,0);

Out = (unsigned char *)OutJbyte;

DecodeSize = AVDecode(m_pVideoDecode, (unsigned char *)In, inputSize, (unsigned char **)&Out, (int *)&pBFrameKey);

//把Out设置到pOutBuffer?????????????
jclass ByteBufferClass = env->GetObjectClass(pOutBuffer);
jmethodID SetPositionMethodId = env->GetMethodID(ByteBufferClass,"position","(I)Ljava/nio/Buffer;");?
env->CallObjectMethod(pOutBuffer,SetPositionMethodId,OutSize);


[解决办法]
楼主发错地方了吧。。。
代码帮你整理了下

C/C++ code
jmethodID ArrayMethodId = env->GetMethodID(ByteBufferClass,"array","()[B");jmethodID ClearMethodId = env->GetMethodID(ByteBufferClass,"clear","()Ljava/nio/Buffer;");// clear output bufferenv->CallObjectMethod(pOutBuffer,ClearMethodId);OutByteArray = (jbyteArray)env->CallObjectMethod(pOutBuffer, ArrayMethodId);OutJbyte = env->GetByteArrayElements(OutByteArray,0);Out = (unsigned char *)OutJbyte;DecodeSize = AVDecode(m_pVideoDecode, (unsigned char *)In, inputSize, (unsigned char **)&Out, (int *)&pBFrameKey);//把Out设置到pOutBuffer?????????????jclass ByteBufferClass = env->GetObjectClass(pOutBuffer);jmethodID SetPositionMethodId = env->GetMethodID(ByteBufferClass,"position","(I)Ljava/nio/Buffer;");  env->CallObjectMethod(pOutBuffer,SetPositionMethodId,OutSize); 

读书人网 >C++

热点推荐