minor refactoring of Android VideoCapture jni code to make it similar to generated one
authorAndrey Pavlenko <andrey.pavlenko@itseez.com>
Thu, 31 Oct 2013 08:42:12 +0000 (12:42 +0400)
committerAndrey Pavlenko <andrey.pavlenko@itseez.com>
Thu, 31 Oct 2013 08:42:12 +0000 (12:42 +0400)
modules/java/generator/src/cpp/VideoCapture.cpp

index 5b92666..a9d0a56 100644 (file)
@@ -8,6 +8,28 @@
 #include "opencv2/highgui/highgui.hpp"
 using namespace cv;
 
+/// throw java exception
+static void throwJavaException(JNIEnv *env, const std::exception *e, const char *method) {
+  std::string what = "unknown exception";
+  jclass je = 0;
+
+  if(e) {
+    std::string exception_type = "std::exception";
+
+    if(dynamic_cast<const cv::Exception*>(e)) {
+      exception_type = "cv::Exception";
+      je = env->FindClass("org/opencv/core/CvException");
+    }
+
+    what = exception_type + ": " + e->what();
+  }
+
+  if(!je) je = env->FindClass("java/lang/Exception");
+  env->ThrowNew(je, what.c_str());
+
+  LOGE("%s caught %s", method, what.c_str());
+  (void)method;        // avoid "unused" warning
+}
 
 extern "C" {
 
@@ -21,24 +43,17 @@ JNIEXPORT jlong JNICALL Java_org_opencv_highgui_VideoCapture_n_1VideoCapture__
 JNIEXPORT jlong JNICALL Java_org_opencv_highgui_VideoCapture_n_1VideoCapture__
   (JNIEnv* env, jclass)
 {
+    static const char method_name[] = "highgui::VideoCapture::VideoCapture()";
     try {
-        LOGD("highgui::VideoCapture_n_1VideoCapture__()");
-
+        LOGD("%s", method_name);
         VideoCapture* _retval_ = new VideoCapture(  );
-
         return (jlong) _retval_;
-    } catch(cv::Exception e) {
-        LOGD("highgui::VideoCapture_n_1VideoCapture__() catched cv::Exception: %s", e.what());
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-        LOGD("highgui::VideoCapture_n_1VideoCapture__() catched unknown exception (...)");
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return 0;
 }
 
 
@@ -52,24 +67,17 @@ JNIEXPORT jlong JNICALL Java_org_opencv_highgui_VideoCapture_n_1VideoCapture__I
 JNIEXPORT jlong JNICALL Java_org_opencv_highgui_VideoCapture_n_1VideoCapture__I
   (JNIEnv* env, jclass, jint device)
 {
+    static const char method_name[] = "highgui::VideoCapture::VideoCapture(int device)";
     try {
-        LOGD("highgui::VideoCapture_n_1VideoCapture__I()");
-
+        LOGD("%s", method_name);
         VideoCapture* _retval_ = new VideoCapture( device );
-
         return (jlong) _retval_;
-    } catch(cv::Exception e) {
-        LOGD("highgui::VideoCapture_n_1VideoCapture__I() catched cv::Exception: %s", e.what());
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-        LOGD("highgui::VideoCapture_n_1VideoCapture__I() catched unknown exception (...)");
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__I()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return 0;
 }
 
 
@@ -84,24 +92,18 @@ JNIEXPORT jdouble JNICALL Java_org_opencv_highgui_VideoCapture_n_1get
 JNIEXPORT jdouble JNICALL Java_org_opencv_highgui_VideoCapture_n_1get
   (JNIEnv* env, jclass, jlong self, jint propId)
 {
+    static const char method_name[] = "highgui::VideoCapture::get(int propId)";
     try {
-        LOGD("highgui::VideoCapture_n_1get()");
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         double _retval_ = me->get( propId );
-
         return _retval_;
-    } catch(cv::Exception e) {
-        LOGD("highgui::VideoCapture_n_1get() catched cv::Exception: %s", e.what());
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-        LOGD("highgui::VideoCapture_n_1get() catched unknown exception (...)");
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1get()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return 0;
 }
 
 
@@ -116,24 +118,18 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1grab
 JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1grab
   (JNIEnv* env, jclass, jlong self)
 {
+    static const char method_name[] = "highgui::VideoCapture::grab()";
     try {
-        LOGD("highgui::VideoCapture_n_1grab()");
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         bool _retval_ = me->grab(  );
-
         return _retval_;
-    } catch(cv::Exception e) {
-        LOGD("highgui::VideoCapture_n_1grab() catched cv::Exception: %s", e.what());
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-        LOGD("highgui::VideoCapture_n_1grab() catched unknown exception (...)");
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1grab()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return false;
 }
 
 
@@ -148,24 +144,18 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1isOpened
 JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1isOpened
   (JNIEnv* env, jclass, jlong self)
 {
+    static const char method_name[] = "highgui::VideoCapture::isOpened()";
     try {
-        LOGD("highgui::VideoCapture_n_1isOpened()");
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         bool _retval_ = me->isOpened(  );
-
         return _retval_;
-    } catch(cv::Exception e) {
-        LOGD("highgui::VideoCapture_n_1isOpened() catched cv::Exception: %s", e.what());
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-        LOGD("highgui::VideoCapture_n_1isOpened() catched unknown exception (...)");
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1isOpened()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return false;
 }
 
 
@@ -179,24 +169,18 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1open__JI
 JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1open__JI
   (JNIEnv* env, jclass, jlong self, jint device)
 {
+    static const char method_name[] = "highgui::VideoCapture::open(int device)";
     try {
-        LOGD("highgui::VideoCapture_n_1open__JI()");
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         bool _retval_ = me->open( device );
-
         return _retval_;
-    } catch(cv::Exception e) {
-        LOGD("highgui::VideoCapture_n_1open__JI() catched cv::Exception: %s", e.what());
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-        LOGD("highgui::VideoCapture_n_1open__JI() catched unknown exception (...)");
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1open__JI()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return false;
 }
 
 
@@ -211,25 +195,19 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1read
 JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1read
   (JNIEnv* env, jclass, jlong self, jlong image_nativeObj)
 {
+    static const char method_name[] = "highgui::VideoCapture::read(Mat image)";
     try {
-        LOGD("highgui::VideoCapture_n_1read()");
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         Mat& image = *((Mat*)image_nativeObj);
         bool _retval_ = me->read( image );
-
         return _retval_;
-    } catch(cv::Exception e) {
-        LOGD("highgui::VideoCapture_n_1read() catched cv::Exception: %s", e.what());
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-        LOGD("highgui::VideoCapture_n_1read() catched unknown exception (...)");
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1read()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return false;
 }
 
 
@@ -244,30 +222,18 @@ JNIEXPORT void JNICALL Java_org_opencv_highgui_VideoCapture_n_1release
 JNIEXPORT void JNICALL Java_org_opencv_highgui_VideoCapture_n_1release
   (JNIEnv* env, jclass, jlong self)
 {
+    static const char method_name[] = "highgui::VideoCapture::release()";
     try {
-
-        LOGD("highgui::VideoCapture_n_1release()");
-
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         me->release(  );
-
-        return;
-    } catch(cv::Exception e) {
-
-        LOGD("highgui::VideoCapture_n_1release() catched cv::Exception: %s", e.what());
-
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
         return;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-
-        LOGD("highgui::VideoCapture_n_1release() catched unknown exception (...)");
-
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1release()}");
-        return;
+        throwJavaException(env, 0, method_name);
     }
+    return;
 }
 
 
@@ -282,31 +248,19 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1retrieve__JJI
 JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1retrieve__JJI
   (JNIEnv* env, jclass, jlong self, jlong image_nativeObj, jint channel)
 {
+    static const char method_name[] = "highgui::VideoCapture::retrieve(Mat image, int channel)";
     try {
-
-        LOGD("highgui::VideoCapture_n_1retrieve__JJI()");
-
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         Mat& image = *((Mat*)image_nativeObj);
         bool _retval_ = me->retrieve( image, channel );
-
         return _retval_;
-    } catch(cv::Exception e) {
-
-        LOGD("highgui::VideoCapture_n_1retrieve__JJI() catched cv::Exception: %s", e.what());
-
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-
-        LOGD("highgui::VideoCapture_n_1retrieve__JJI() catched unknown exception (...)");
-
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1retrieve__JJI()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return false;
 }
 
 
@@ -317,31 +271,19 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1retrieve__JJ
 JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1retrieve__JJ
   (JNIEnv* env, jclass, jlong self, jlong image_nativeObj)
 {
+    static const char method_name[] = "highgui::VideoCapture::retrieve(Mat image)";
     try {
-
-        LOGD("highgui::VideoCapture_n_1retrieve__JJ()");
-
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         Mat& image = *((Mat*)image_nativeObj);
         bool _retval_ = me->retrieve( image );
-
         return _retval_;
-    } catch(cv::Exception e) {
-
-        LOGD("highgui::VideoCapture_n_1retrieve__JJ() catched cv::Exception: %s", e.what());
-
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-
-        LOGD("highgui::VideoCapture_n_1retrieve__JJ() catched unknown exception (...)");
-
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1retrieve__JJ()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return false;
 }
 
 
@@ -356,62 +298,44 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1set
 JNIEXPORT jboolean JNICALL Java_org_opencv_highgui_VideoCapture_n_1set
   (JNIEnv* env, jclass, jlong self, jint propId, jdouble value)
 {
+    static const char method_name[] = "highgui::VideoCapture::set(int propId, double value)";
     try {
-
-        LOGD("highgui::VideoCapture_n_1set()");
-
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         bool _retval_ = me->set( propId, value );
-
         return _retval_;
-    } catch(cv::Exception e) {
-
-        LOGD("highgui::VideoCapture_n_1set() catched cv::Exception: %s", e.what());
-
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return 0;
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-
-        LOGD("highgui::VideoCapture_n_1set() catched unknown exception (...)");
-
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1set()}");
-        return 0;
+        throwJavaException(env, 0, method_name);
     }
+    return false;
 }
 
+
+//
+//  string VideoCapture::getSupportedPreviewSizes(...)
+//
+
 JNIEXPORT jstring JNICALL Java_org_opencv_highgui_VideoCapture_n_1getSupportedPreviewSizes
   (JNIEnv *env, jclass, jlong self);
 
 JNIEXPORT jstring JNICALL Java_org_opencv_highgui_VideoCapture_n_1getSupportedPreviewSizes
   (JNIEnv *env, jclass, jlong self)
 {
+    static const char method_name[] = "highgui::VideoCapture::getSupportedPreviewSizes(...)";
     try {
-
-        LOGD("highgui::VideoCapture_n_1set()");
-
+        LOGD("%s", method_name);
         VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL
         union {double prop; const char* name;} u;
         u.prop = me->get(CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING);
         return env->NewStringUTF(u.name);
-    } catch(cv::Exception e) {
-
-        LOGD("highgui::VideoCapture_n_1getSupportedPreviewSizes() catched cv::Exception: %s", e.what());
-
-        jclass je = env->FindClass("org/opencv/core/CvException");
-        if(!je) je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, e.what());
-        return env->NewStringUTF("");
+    } catch(const std::exception &e) {
+        throwJavaException(env, &e, method_name);
     } catch (...) {
-
-        LOGD("highgui::VideoCapture_n_1getSupportedPreviewSizes() catched unknown exception (...)");
-
-        jclass je = env->FindClass("java/lang/Exception");
-        env->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1getSupportedPreviewSizes()}");
-        return env->NewStringUTF("");
+        throwJavaException(env, 0, method_name);
     }
+    return env->NewStringUTF("");
 }