JNIサブスレッドでJava静的メソッドを呼び出すコードを共有
1317 ワード
============================================================
博文オリジナル、転載は出典を声明してください
電子コーヒー(元idブルー岩)
============================================================
JNIサブスレッドでJava静的メソッドを呼び出すコードを共有し、byte配列を渡し、実際のテストで使用できます.
博文オリジナル、転載は出典を声明してください
電子コーヒー(元idブルー岩)
============================================================
JNIサブスレッドでJava静的メソッドを呼び出すコードを共有し、byte配列を渡し、実際のテストで使用できます.
JNIEnv *env;
jmethodID mid;
//JNI java , static
//Attach g_jvm JavaVM*
if(g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK)
{
LOGE("%s: AttachCurrentThread() failed", __FUNCTION__);
return NULL;
}
//
if(cls==NULL){
cls = env->GetObjectClass(g_obj);
}
if(cls == NULL)
{
LOGE("FindClass() Error.....");
}
//
mid = env->GetStaticMethodID(cls, "JdisPlay", "([BII)V");
if (mid == NULL)
{
LOGE("FindClass() Error.....");
}
int len=mWidth*mHeight*3/2;
jint w=mWidth;
jint h=mHeight;
LOGE("width = %d and height=%d",w,h);
// byte , :
jbyteArray byteArr = (env)->NewByteArray(len);
// C byte java byte[]
jboolean isCopy;
void *data = env->GetPrimitiveArrayCritical((jarray)byteArr, &isCopy);
memcpy(data, mOutputFrameBuffer, len);
//
env->CallStaticVoidMethod(cls, mid, byteArr,w,h);
// array,
(env)->ReleasePrimitiveArrayCritical(byteArr, data, JNI_ABORT);
(env)->DeleteLocalRef(byteArr);