classes/files renaming, some code refactoring
authorAndrey Pavlenko <no@email>
Fri, 22 Jul 2011 12:35:52 +0000 (12:35 +0000)
committerAndrey Pavlenko <no@email>
Fri, 22 Jul 2011 12:35:52 +0000 (12:35 +0000)
modules/java/gen_java.py
modules/java/src/cpp/Android.cpp
modules/java/src/cpp/converters.cpp [moved from modules/java/src/cpp/utils.cpp with 93% similarity]
modules/java/src/cpp/converters.h [moved from modules/java/src/cpp/utils.h with 100% similarity]
modules/java/src/java/Android.java
modules/java/src/java/Converters.java

index 854bf14..c6d49f4 100644 (file)
@@ -250,7 +250,7 @@ type_dict = {
 \r
 }\r
 \r
-# { Module : { func : {j_code, jn_code, cpp_code} } }\r
+# { class : { func : {j_code, jn_code, cpp_code} } }\r
 ManualFuncs = {\r
     'Core' :\r
     {\r
@@ -550,26 +550,35 @@ class JavaWrapperGenerator(object):
 \r
     def add_class_code_stream(self, class_name):\r
         self.java_code[class_name] = { "j_code" : StringIO(), "jn_code" : StringIO(), }\r
-        self.java_code[class_name]["j_code"].write("""\r
+        if class_name != self.Module:\r
+            self.java_code[class_name]["j_code"].write("""\r
 //\r
 // This file is auto-generated. Please don't modify it!\r
 //\r
-package org.opencv.%s;\r
-%s\r
-import org.opencv.utils;\r
-%s\r
-public class %s {\r
+package org.opencv.%(m)s;\r
 \r
-""" % ( self.module,\r
-        ("import org.opencv.core.*;", "")[self.module == "core"],\r
-        ("// C++: class "+class_name+"\n//javadoc: "+class_name, "")[class_name == self.Module],\r
-        class_name ) )\r
+$imports\r
+\r
+// C++: class %(c)s\r
+//javadoc: %(c)s\r
+public class %(c)s {\r
 \r
-        if class_name != self.Module:\r
-            self.java_code[class_name]["j_code"].write("""\r
     protected final long nativeObj;\r
-    protected %s(long addr) { nativeObj = addr; }\r
-""" % class_name )\r
+    protected %(c)s(long addr) { nativeObj = addr; }\r
+\r
+""" % { 'm' : self.module, 'c' : class_name } )\r
+\r
+        else: # class_name == self.Module\r
+            self.java_code[class_name]["j_code"].write("""\r
+//\r
+// This file is auto-generated. Please don't modify it!\r
+//\r
+package org.opencv.%(m)s;\r
+\r
+$imports\r
+\r
+public class %(c)s {\r
+""" % { 'm' : self.module, 'c' : class_name } )\r
 \r
         self.java_code[class_name]["jn_code"].write("""\r
     //\r
@@ -635,13 +644,13 @@ public class %s {
             # this class isn't wrapped\r
             # skipping this const\r
             return\r
-        \r
+\r
         consts = self.classes[classname].consts\r
         for c in const_private_list:\r
             if re.match(c, name):\r
                 consts = self.classes[classname].private_consts\r
                 break\r
-        \r
+\r
         constinfo = ConstInfo(cname, name, decl[1])\r
         # checking duplication\r
         for list in self.classes[classname].consts, self.classes[classname].private_consts:\r
@@ -674,7 +683,7 @@ public class %s {
 \r
     def save(self, path, buf):\r
         f = open(path, "wt")\r
-        f.write(buf.getvalue())\r
+        f.write(buf)\r
         f.close()\r
 \r
     def gen(self, srcfiles, module, output_path):\r
@@ -705,7 +714,7 @@ public class %s {
 \r
 #include <jni.h>\r
 \r
-#include "utils.h"\r
+#include "converters.h"\r
 \r
 #ifdef DEBUG\r
 #include <android/log.h>\r
@@ -723,19 +732,22 @@ extern "C" {
 \r
 """ % {'m' : module} )\r
 \r
-        #"\n".join(['#include "opencv2/%s/%s"' % (module, os.path.basename(f)) for f in srcfiles])\r
-\r
         # generate code for the classes\r
         for name in self.classes.keys():\r
             self.gen_class(name)\r
 \r
         # saving code streams\r
         for cls in self.java_code.keys():\r
+##            imports = "\n".join([ "import %s;" % c for c in \\r
+##                sorted(self.classes[cls].imports) if not c.startswith('org.opencv.'+self.module) ])\r
+            imports = "import org.opencv.core.*;\nimport org.opencv.Converters;\n"\r
             self.java_code[cls]["j_code"].write("\n\n%s\n}\n" % self.java_code[cls]["jn_code"].getvalue())\r
-            self.save("%s/%s+%s.java" % (output_path, module, cls), self.java_code[cls]["j_code"])\r
+            java_code = self.java_code[cls]["j_code"].getvalue()\r
+            java_code = Template(java_code).substitute(imports = imports)\r
+            self.save("%s/%s+%s.java" % (output_path, module, cls), java_code)\r
 \r
         self.cpp_code.write( '\n} // extern "C"\n' )\r
-        self.save(output_path+"/"+module+".cpp",  self.cpp_code)\r
+        self.save(output_path+"/"+module+".cpp",  self.cpp_code.getvalue())\r
 \r
         # report\r
         report = StringIO()\r
@@ -747,18 +759,14 @@ extern "C" {
             (len(self.skipped_func_list), len(self.ported_func_list)+ len(self.skipped_func_list))\r
         )\r
         report.write("".join(self.skipped_func_list))\r
-        self.save(output_path+"/"+module+".txt", report)\r
+        self.save(output_path+"/"+module+".txt", report.getvalue())\r
 \r
         print "Done %i of %i funcs." % (len(self.ported_func_list), len(self.ported_func_list)+ len(self.skipped_func_list))\r
 \r
 \r
 \r
 \r
-    def gen_func(self, fi, isoverload):\r
-        self.gen_func2(fi, isoverload, "")\r
-\r
-\r
-    def gen_func2(self, fi, isoverload, prop_name):\r
+    def gen_func(self, fi, isoverload, prop_name=''):\r
         j_code   = self.java_code[fi.classname or self.Module]["j_code"]\r
         jn_code  = self.java_code[fi.classname or self.Module]["jn_code"]\r
         cpp_code = self.cpp_code\r
@@ -841,22 +849,27 @@ extern "C" {
 \r
                 if "vector" in a.ctype: # pass as Mat\r
                     self.classes[fi.classname or self.Module].imports.add("org.opencv.core.Mat")\r
-                    self.classes[fi.classname or self.Module].imports.add("org.opencv.core.Utils")\r
+                    self.classes[fi.classname or self.Module].imports.add("org.opencv.Converters")\r
                     self.classes[fi.classname or self.Module].imports.add("java.util.List")\r
+                    t = a.ctype.replace("vector_", "")\r
+                    if "Vec" not in t and t in type_dict and "jn_args" in type_dict[t] and type_dict[t]["jni_type"] == "jdoubleArray":\r
+                        self.classes[fi.classname or self.Module].imports.add("org.opencv.core." + type_dict[t]['j_type'])\r
                     jn_args.append  ( ArgInfo([ "__int64", "%s_mat.nativeObj" % a.name, "", [], "" ]) )\r
                     jni_args.append ( ArgInfo([ "__int64", "%s_mat_nativeObj" % a.name, "", [], "" ]) )\r
                     c_prologue.append( type_dict[a.ctype]["jni_var"] % {"n" : a.name} + ";" )\r
                     c_prologue.append( "Mat& %(n)s_mat = *((Mat*)%(n)s_mat_nativeObj)" % {"n" : a.name} + ";" )\r
                     if "I" in a.out or not a.out:\r
-                        j_prologue.append( "Mat %(n)s_mat = utils.%(t)s_to_Mat(%(n)s);" % {"n" : a.name, "t" : a.ctype} )\r
+                        j_prologue.append( "Mat %(n)s_mat = Converters.%(t)s_to_Mat(%(n)s);" % {"n" : a.name, "t" : a.ctype} )\r
                         c_prologue.append( "Mat_to_%(t)s( %(n)s_mat, %(n)s );" % {"n" : a.name, "t" : a.ctype} )\r
                     else:\r
                         j_prologue.append( "Mat %s_mat = new Mat();" % a.name )\r
                     if "O" in a.out:\r
-                        j_epilogue.append("utils.Mat_to_%(t)s(%(n)s_mat, %(n)s);" % {"t" : a.ctype, "n" : a.name})\r
+                        j_epilogue.append("Converters.Mat_to_%(t)s(%(n)s_mat, %(n)s);" % {"t" : a.ctype, "n" : a.name})\r
                         c_epilogue.append( "%(t)s_to_Mat( %(n)s, %(n)s_mat );" % {"n" : a.name, "t" : a.ctype} )\r
                 else:\r
-                    if "jn_args" in type_dict[a.ctype] and "Vec" not in a.ctype:\r
+                    if a.ctype == 'Mat' or \\r
+                        ( "Vec" not in a.ctype and "jn_args" in type_dict[a.ctype] and \\r
+                          type_dict[a.ctype].get("jni_type") == "jdoubleArray" ):\r
                         self.classes[fi.classname or self.Module].imports.add("org.opencv.core." + type_dict[a.ctype]['j_type'])\r
                     if 'String' in type_dict[a.ctype]['j_type']:\r
                         self.classes[fi.classname or self.Module].imports.add("java.lang.String")\r
@@ -1090,13 +1103,13 @@ JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_${clazz}_$fname
             getter_name = name + ".get_" + pi.name\r
             #print getter_name\r
             fi = FuncInfo( [getter_name, pi.ctype, [], []] ) # [ funcname, return_ctype, [modifiers], [args] ]\r
-            self.gen_func2(fi, getter_name in ci.methods, pi.name)\r
+            self.gen_func(fi, getter_name in ci.methods, pi.name)\r
             if pi.rw:\r
                 #setter\r
                 setter_name = name + ".set_" + pi.name\r
                 #print setter_name\r
                 fi = FuncInfo( [ setter_name, "void", [], [ [pi.ctype, pi.name, "", [], ""] ] ] )\r
-                self.gen_func2(fi, getter_name in ci.methods, pi.name)\r
+                self.gen_func(fi, getter_name in ci.methods, pi.name)\r
 \r
         # manual ports\r
         if name in ManualFuncs:\r
@@ -1139,9 +1152,6 @@ JNIEXPORT void JNICALL Java_org_opencv_%(module)s_%(cls)s_n_1delete
 """ % {"module" : module, "cls" : name}\r
             )\r
 \r
-        self.java_code[name]["jn_code"].write( "\n// imports %i\n//" % len(ci.imports))\r
-        self.java_code[name]["jn_code"].write( "\n//".join(sorted(ci.imports)))\r
-\r
 \r
 if __name__ == "__main__":\r
     if len(sys.argv) < 4:\r
index 1c7272c..d80f9b5 100644 (file)
@@ -9,12 +9,12 @@ extern "C" {
 #endif\r
 \r
 /*\r
- * Class:     org_opencv_android\r
+ * Class:     org_opencv_Android\r
  * Method:    nBitmapToMat(Bitmap b)\r
  * Signature: (L)J\r
  */\r
 \r
-JNIEXPORT jlong JNICALL Java_org_opencv_android_nBitmapToMat\r
+JNIEXPORT jlong JNICALL Java_org_opencv_Android_nBitmapToMat\r
   (JNIEnv * env, jclass cls, jobject bitmap)\r
 {\r
     AndroidBitmapInfo  info;\r
@@ -40,11 +40,11 @@ JNIEXPORT jlong JNICALL Java_org_opencv_android_nBitmapToMat
 }\r
 \r
 /*\r
- * Class:     org_opencv_android\r
+ * Class:     org_opencv_Android\r
  * Method:    nBitmapToMat(long m, Bitmap b)\r
  * Signature: (JL)Z\r
  */\r
-JNIEXPORT jboolean JNICALL Java_org_opencv_android_nMatToBitmap\r
+JNIEXPORT jboolean JNICALL Java_org_opencv_Android_nMatToBitmap\r
   (JNIEnv * env, jclass cls, jlong m, jobject bitmap)\r
 {\r
     AndroidBitmapInfo  info;\r
similarity index 93%
rename from modules/java/src/cpp/utils.cpp
rename to modules/java/src/cpp/converters.cpp
index ee08e82..370b7b1 100644 (file)
@@ -1,8 +1,8 @@
-#include "utils.h"\r
+#include "converters.h"\r
 \r
 #ifdef DEBUG\r
 #include <android/log.h>\r
-#define MODULE_LOG_TAG "OpenCV.utils.cpp"\r
+#define MODULE_LOG_TAG "OpenCV.converters"\r
 #define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, MODULE_LOG_TAG, __VA_ARGS__))\r
 #else //DEBUG\r
 #define LOGD(...)\r
index a1a6a64..95e1fc6 100644 (file)
@@ -3,7 +3,7 @@ package org.opencv;
 import org.opencv.core.Mat;\r
 import android.graphics.Bitmap;\r
 \r
-public class android {\r
+public class Android {\r
 \r
        public static Mat BitmapToMat(Bitmap b) {\r
                return new Mat( nBitmapToMat(b) );\r
index d93be22..7014af8 100644 (file)
@@ -8,13 +8,13 @@ import org.opencv.core.Point;
 import org.opencv.core.Rect;\r
 import org.opencv.features2d.KeyPoint;\r
 \r
-public class utils {\r
+public class Converters {\r
        \r
        public static Mat vector_Point_to_Mat(List<Point> pts) {\r
                Mat res;\r
                int count = (pts!=null) ? pts.size() : 0;\r
                if(count>0){\r
-                       res = new Mat(1, count, CvType.CV_32SC2); //Point can be saved into double[2]\r
+                       res = new Mat(1, count, CvType.CV_32SC2);\r
                        int[] buff = new int[count*2];\r
                        for(int i=0; i<count; i++) {\r
                                Point p = pts.get(i);\r