Как конвертировать char [] в ByteBuffer в JNI? - PullRequest
1 голос
/ 28 февраля 2012

Я хочу передать ByteBuffer через JNI в C ++ в качестве буфера для получения изображения, декодированного из AVDecode, хотя буфер правильно заполнен в C ++, но ByteBuffer на стороне Java все еще пуст. Пожалуйста, помогите мне узнать, где находится ошибка. Благодарю. pOutBuffer - это ByteBuffer, переданный через JNI.

jclass ByteBufferClass = env->GetObjectClass(pOutBuffer);  
jmethodID ArraryMethodId = env->GetMethodID(ByteBufferClass,"array","()[B");  
jmethodID ClearMethodId = env->GetMethodID(ByteBufferClass,"clear","()Ljava/nio/Buffer;");  

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

jbyteArray OutByteArrary = (jbyteArray)env->CallObjectMethod(pOutBuffer,ArraryMethodId);  
jbyte OutJbyte = env->GetByteArrayElements(OutByteArrary,0);  

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

Декодирование правильное, и я вижу, что 'Out' заполнено выходным изображением, однако, когда эта функция возвращается, pOutBuffer на стороне Java все еще пуст.

1 Ответ

1 голос
/ 28 февраля 2012

Как был создан ByteBuffer?Это прямой или не прямой ByteBuffer?

Если это прямой ByteBuffer, который был создан в Java с использованием метода allocateDirect, вы можете использовать GetDirectBufferAddress в своем родном коде дляполучите прямой адрес ByteBuffer и любые изменения там должны быть отражены в Java.

...