Ask Your Question

Revision history [back]

CMT (CppMT) is very slow in android

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?

CMT (CppMT) is very slow in android

I wrote an application using CMT. I wrote JNI wrapper to wrap the two APIs in CMP, initialize and processFrame. processFrame (the gnebehay/CppMT).

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, {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);}
        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?