简体   繁体   中英

SharedBuffer between Java and C++ using JNI

what I am working on is to read image data from camera using C++ and use JNI to let Java read those image data, and I am using Mac OSX.

The blocker I currently have is, I have not found any method to create a shared memory between two language on Mac OSX.

I could imagine I will be using some buffer to do so, could anyone gives some hints and knowledge towards this problem?

Thank you in advance!

You can use ByteBuffer.allocateDirect to create native accessible memory:

public static native void getCameraData(ByteBuffer bb);

...

ByteBuffer bb = ByteBuffer.allocateDirect(1024);
getCameraData(bb);
// use data

Then on the C++ side, use GetDirectBufferAddress , to access the block of memory:

JNIEXPORT void JNICALL Java_MyClass_getCameraData(JNIEnv *env, jclass, jobject bb) {
    void* data = env->GetDirectBufferAddress(bb);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM