Я хочу передать 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 все еще пуст.