#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" {
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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("");
}