\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
\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
# 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
\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
\r
#include <jni.h>\r
\r
-#include "utils.h"\r
+#include "converters.h"\r
\r
#ifdef DEBUG\r
#include <android/log.h>\r
\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
(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
\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
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
""" % {"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