- added missing loadLibrary for inner classes
authorAndrey Pavlenko <no@email>
Mon, 11 Jul 2011 12:21:58 +0000 (12:21 +0000)
committerAndrey Pavlenko <no@email>
Mon, 11 Jul 2011 12:21:58 +0000 (12:21 +0000)
- added zero check for pointers in utils.cpp

modules/java/gen_java.py
modules/java/src/cpp/utils.cpp

index f9b291f..7e2e7f9 100644 (file)
@@ -624,6 +624,7 @@ JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_$fname
             )\r
 \r
             self.java_code.write(indent_m + "// native stuff\n\n")\r
+            self.java_code.write(indent_m + 'static { System.loadLibrary("opencv_java"); }\n')\r
             self.java_code.write( jn_code.getvalue() )\r
             self.java_code.write(\r
 """\r
index 2d016a0..5f069a7 100644 (file)
@@ -1,5 +1,9 @@
 #include <jni.h>\r
 \r
+#include "opencv2/core/core.hpp"\r
+\r
+#include <android/bitmap.h>\r
+\r
 #ifdef __cplusplus\r
 extern "C" {\r
 #endif\r
@@ -9,62 +13,48 @@ extern "C" {
  * Method:    nBitmapToMat(Bitmap b)\r
  * Signature: (L)J\r
  */\r
-JNIEXPORT jlong JNICALL Java_org_opencv_utils_nBitmapToMat\r
-  (JNIEnv *, jclass, jobject);\r
-\r
-/*\r
- * Class:     org_opencv_utils\r
- * Method:    nBitmapToMat(long m, Bitmap b)\r
- * Signature: (JL)Z\r
- */\r
-JNIEXPORT jboolean JNICALL Java_org_opencv_utils_nMatToBitmap\r
-  (JNIEnv *, jclass, jlong, jobject);\r
-\r
-\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#include "opencv2/core/core.hpp"\r
-\r
-#include <android/bitmap.h>\r
 \r
 JNIEXPORT jlong JNICALL Java_org_opencv_utils_nBitmapToMat\r
   (JNIEnv * env, jclass cls, jobject bitmap)\r
 {\r
     AndroidBitmapInfo  info;\r
     void*              pixels;\r
-       cv::Mat* m = NULL;\r
+    cv::Mat*           m = new cv::Mat();\r
 \r
        if ( AndroidBitmap_getInfo(env, bitmap, &info) < 0 )\r
-        return 0; // can't get info\r
+        return (jlong)m; // can't get info\r
 \r
     if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888)\r
-        return 0; // incompatible format\r
+        return (jlong)m; // incompatible format\r
 \r
     if ( AndroidBitmap_lockPixels(env, bitmap, &pixels) < 0 )\r
-        return 0; // can't get pixels\r
+        return (jlong)m; // can't get pixels\r
 \r
-       m = new cv::Mat(info.height, info.width, CV_8UC4);\r
-       memcpy(m->data, pixels, info.height * info.width * 4);\r
+    m->create(info.height, info.width, CV_8UC4);\r
+    if(m->data && pixels)\r
+        memcpy(m->data, pixels, info.height * info.width * 4);\r
 \r
     AndroidBitmap_unlockPixels(env, bitmap);\r
 \r
-       return (jlong)m;\r
+    return (jlong)m;\r
 }\r
 \r
+/*\r
+ * Class:     org_opencv_utils\r
+ * Method:    nBitmapToMat(long m, Bitmap b)\r
+ * Signature: (JL)Z\r
+ */\r
 JNIEXPORT jboolean JNICALL Java_org_opencv_utils_nMatToBitmap\r
   (JNIEnv * env, jclass cls, jlong m, jobject bitmap)\r
 {\r
     AndroidBitmapInfo  info;\r
     void*              pixels;\r
-       cv::Mat* mat = (cv::Mat*) m;\r
+    cv::Mat* mat = (cv::Mat*) m;\r
 \r
-       if ( m == 0 )\r
-               return false; // no native Mat behind\r
+    if ( mat == 0 || mat->data == 0)\r
+        return false; // no native Mat behind\r
 \r
-       if ( AndroidBitmap_getInfo(env, bitmap, &info) < 0 )\r
+    if ( AndroidBitmap_getInfo(env, bitmap, &info) < 0 )\r
         return false; // can't get info\r
 \r
     if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888)\r
@@ -73,9 +63,14 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_utils_nMatToBitmap
     if ( AndroidBitmap_lockPixels(env, bitmap, &pixels) < 0 )\r
         return false; // can't get pixels\r
 \r
-       memcpy(pixels, mat->data, info.height * info.width * 4);\r
+    if(mat->data && pixels)\r
+        memcpy(pixels, mat->data, info.height * info.width * 4);\r
 \r
     AndroidBitmap_unlockPixels(env, bitmap);\r
 \r
-       return true;\r
+    return true;\r
 }\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r