diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index 9edfe04..c86b245 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -56,9 +56,9 @@ return 0; } -static Yolo *g_yolo = nullptr; +static Yolo *yolo_ptr = nullptr; static ncnn::Mutex lock; -static JavaVM *javaVM = nullptr; +static JavaVM *jvm_ptr = nullptr; class MyNdkCamera : public NdkCameraWindow { public: @@ -66,31 +66,30 @@ }; void MyNdkCamera::on_image_render(cv::Mat &rgb) const { - // nanodet { ncnn::MutexLockGuard g(lock); - if (g_yolo) { + if (yolo_ptr) { //分类 - g_yolo->classify(rgb); + yolo_ptr->classify(rgb); std::vector objects; //分割 - g_yolo->segmentation(rgb, objects); + yolo_ptr->segmentation(rgb, objects); //检测 - g_yolo->detect(rgb, objects); + yolo_ptr->detect(rgb, objects); //绘制 - g_yolo->draw(rgb, objects); + yolo_ptr->draw(rgb, objects); } else { draw_unsupported(rgb); } } } -static MyNdkCamera *g_camera = nullptr; +static MyNdkCamera *camera_ptr = nullptr; //分割、检测、分类 const char *model_types[] = {"best-sim-opt-fp16", "br-detect-20240913-sim-fp16", "model.ncnn"}; @@ -110,9 +109,9 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "JNI_OnLoad"); - javaVM = vm; + jvm_ptr = vm; - g_camera = new MyNdkCamera; + camera_ptr = new MyNdkCamera; return JNI_VERSION_1_4; } @@ -123,12 +122,12 @@ { ncnn::MutexLockGuard g(lock); - delete g_yolo; - g_yolo = nullptr; + delete yolo_ptr; + yolo_ptr = nullptr; } - delete g_camera; - g_camera = nullptr; + delete camera_ptr; + camera_ptr = nullptr; } JNIEXPORT jboolean JNICALL @@ -152,11 +151,11 @@ if (use_gpu && ncnn::get_gpu_count() == 0) { // no gpu - delete g_yolo; - g_yolo = nullptr; + delete yolo_ptr; + yolo_ptr = nullptr; } else { - if (!g_yolo) - g_yolo = new Yolo; + if (!yolo_ptr) + yolo_ptr = new Yolo; int state; if (use_classify) { state = 1; @@ -167,8 +166,8 @@ if (use_detect) { state = 3; } - g_yolo->j_state = state; - g_yolo->load( + yolo_ptr->j_state = state; + yolo_ptr->load( mgr, model_type, target_size, @@ -203,14 +202,14 @@ if (use_gpu && ncnn::get_gpu_count() == 0) { // no gpu - delete g_yolo; - g_yolo = nullptr; + delete yolo_ptr; + yolo_ptr = nullptr; } else { - if (!g_yolo) - g_yolo = new Yolo; - g_yolo->j_state = 2; + if (!yolo_ptr) + yolo_ptr = new Yolo; + yolo_ptr->j_state = 2; if (*id == 0) { - g_yolo->load( + yolo_ptr->load( mgr, model_type, target_size, @@ -222,7 +221,7 @@ use_gpu ); } else { - g_yolo->load( + yolo_ptr->load( mgr, model_type, target_size, @@ -248,8 +247,10 @@ __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "openCamera %d", facing); - g_camera->open((int) facing); - + if (camera_ptr == nullptr) { + return JNI_FALSE; + } + camera_ptr->open((int) facing); return JNI_TRUE; } @@ -258,8 +259,10 @@ __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "closeCamera"); - g_camera->close(); - + if (camera_ptr == nullptr) { + return JNI_FALSE; + } + camera_ptr->close(); return JNI_TRUE; } @@ -270,21 +273,33 @@ jobject native_callback) { ANativeWindow *win = ANativeWindow_fromSurface(env, surface); - g_camera->set_window(win); + if (camera_ptr == nullptr) { + return JNI_FALSE; + } + camera_ptr->set_window(win); - g_yolo->initNativeCallback(javaVM, nativeObjAddr, native_callback); + if (yolo_ptr == nullptr) { + return JNI_FALSE; + } + yolo_ptr->initNativeCallback(jvm_ptr, nativeObjAddr, native_callback); return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_com_casic_br_app_external_Yolov8ncnn_onPause(JNIEnv *env, jobject thiz) { - g_yolo->j_state = 0; + if (yolo_ptr == nullptr) { + return JNI_FALSE; + } + yolo_ptr->j_state = 0; return JNI_TRUE; } JNIEXPORT jboolean JNICALL Java_com_casic_br_app_external_Yolov8ncnn_onRestart(JNIEnv *env, jobject thiz) { - g_yolo->j_state = 3; + if (yolo_ptr == nullptr) { + return JNI_FALSE; + } + yolo_ptr->j_state = 3; return JNI_TRUE; } } \ No newline at end of file