I wrote an application using CMT. I wrote JNI wrapper to wrap the two APIs in CMP, initialize and processFrame.
void JNICALL Java_com_cmt_demo_MyActivity_initialize(JNIEnv *env, jobject obj, jlong matAddr, jint x, jint y, jint width, jint height) {// create a rect cmtObj->initialize(mGr, rect);}
JNIEXPORT void JNICALL Java_com_cmt_demo_MyActivity_processFrame(JNIEnv*, jobject, jlong addrGray) {
Mat& im_gray = *(Mat*)addrGray;
cmtObj->processFrame(im_gray);}
The above methods are called in the public Mat onCameraFrame(CvCameraViewFrame inputFrame)
callback. However, these two JNI calls are very very slow, the fps dropped to 1 fps from 30 fps. I did some profiling, one of the method in initialize descriptor = cv::BRISK::create();
takes 500ms.
I don't see any logic of the problem in the code. I wrote another JNI call, the performance seems to be fine. Any advise on what I have done was wrong?