Commit 1ae27eb6 authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #7476 from abratchik:java.wrapper.fix.3.1

parents e2e14853 4207ebbc
...@@ -89,7 +89,7 @@ public: ...@@ -89,7 +89,7 @@ public:
//supported: FAST STAR SIFT SURF ORB MSER GFTT HARRIS BRISK AKAZE Grid(XXXX) Pyramid(XXXX) Dynamic(XXXX) //supported: FAST STAR SIFT SURF ORB MSER GFTT HARRIS BRISK AKAZE Grid(XXXX) Pyramid(XXXX) Dynamic(XXXX)
//not supported: SimpleBlob, Dense //not supported: SimpleBlob, Dense
CV_WRAP static javaFeatureDetector* create( int detectorType ) CV_WRAP static Ptr<javaFeatureDetector> create( int detectorType )
{ {
//String name; //String name;
if (detectorType > DYNAMICDETECTOR) if (detectorType > DYNAMICDETECTOR)
...@@ -156,7 +156,7 @@ public: ...@@ -156,7 +156,7 @@ public:
break; break;
} }
return new javaFeatureDetector(fd); return makePtr<javaFeatureDetector>(fd);
} }
CV_WRAP void write( const String& fileName ) const CV_WRAP void write( const String& fileName ) const
...@@ -171,10 +171,11 @@ public: ...@@ -171,10 +171,11 @@ public:
wrapped->read(fs.root()); wrapped->read(fs.root());
} }
private:
javaFeatureDetector(Ptr<FeatureDetector> _wrapped) : wrapped(_wrapped) javaFeatureDetector(Ptr<FeatureDetector> _wrapped) : wrapped(_wrapped)
{} {}
private:
Ptr<FeatureDetector> wrapped; Ptr<FeatureDetector> wrapped;
}; };
...@@ -222,7 +223,7 @@ public: ...@@ -222,7 +223,7 @@ public:
//supported SIFT, SURF, ORB, BRIEF, BRISK, FREAK, AKAZE, Opponent(XXXX) //supported SIFT, SURF, ORB, BRIEF, BRISK, FREAK, AKAZE, Opponent(XXXX)
//not supported: Calonder //not supported: Calonder
CV_WRAP static javaDescriptorExtractor* create( int extractorType ) CV_WRAP static Ptr<javaDescriptorExtractor> create( int extractorType )
{ {
//String name; //String name;
...@@ -261,7 +262,7 @@ public: ...@@ -261,7 +262,7 @@ public:
break; break;
} }
return new javaDescriptorExtractor(de); return makePtr<javaDescriptorExtractor>(de);
} }
CV_WRAP void write( const String& fileName ) const CV_WRAP void write( const String& fileName ) const
...@@ -276,10 +277,11 @@ public: ...@@ -276,10 +277,11 @@ public:
wrapped->read(fs.root()); wrapped->read(fs.root());
} }
private:
javaDescriptorExtractor(Ptr<DescriptorExtractor> _wrapped) : wrapped(_wrapped) javaDescriptorExtractor(Ptr<DescriptorExtractor> _wrapped) : wrapped(_wrapped)
{} {}
private:
Ptr<DescriptorExtractor> wrapped; Ptr<DescriptorExtractor> wrapped;
}; };
......
...@@ -783,6 +783,7 @@ class ClassInfo(GeneralInfo): ...@@ -783,6 +783,7 @@ class ClassInfo(GeneralInfo):
self.imports = set() self.imports = set()
self.props= [] self.props= []
self.jname = self.name self.jname = self.name
self.smart = None # True if class stores Ptr<T>* instead of T* in nativeObj field
self.j_code = None # java code stream self.j_code = None # java code stream
self.jn_code = None # jni code stream self.jn_code = None # jni code stream
self.cpp_code = None # cpp code stream self.cpp_code = None # cpp code stream
...@@ -994,7 +995,7 @@ class JavaWrapperGenerator(object): ...@@ -994,7 +995,7 @@ class JavaWrapperGenerator(object):
if classinfo.base: if classinfo.base:
classinfo.addImports(classinfo.base) classinfo.addImports(classinfo.base)
type_dict["Ptr_"+name] = \ type_dict["Ptr_"+name] = \
{ "j_type" : name, { "j_type" : classinfo.jname,
"jn_type" : "long", "jn_args" : (("__int64", ".nativeObj"),), "jn_type" : "long", "jn_args" : (("__int64", ".nativeObj"),),
"jni_name" : "Ptr<"+classinfo.fullName(isCPP=True)+">(("+classinfo.fullName(isCPP=True)+"*)%(n)s_nativeObj)", "jni_type" : "jlong", "jni_name" : "Ptr<"+classinfo.fullName(isCPP=True)+">(("+classinfo.fullName(isCPP=True)+"*)%(n)s_nativeObj)", "jni_type" : "jlong",
"suffix" : "J" } "suffix" : "J" }
...@@ -1397,10 +1398,10 @@ class JavaWrapperGenerator(object): ...@@ -1397,10 +1398,10 @@ class JavaWrapperGenerator(object):
elif fi.static: elif fi.static:
cvname = fi.fullName(isCPP=True) cvname = fi.fullName(isCPP=True)
else: else:
cvname = ("me->" if not self.isSmartClass(fi.classname) else "(*me)->") + name cvname = ("me->" if not self.isSmartClass(ci) else "(*me)->") + name
c_prologue.append(\ c_prologue.append(\
"%(cls)s* me = (%(cls)s*) self; //TODO: check for NULL" \ "%(cls)s* me = (%(cls)s*) self; //TODO: check for NULL" \
% { "cls" : self.smartWrap(fi.classname, fi.fullClass(isCPP=True))} \ % { "cls" : self.smartWrap(ci, fi.fullClass(isCPP=True))} \
) )
cvargs = [] cvargs = []
for a in args: for a in args:
...@@ -1546,7 +1547,7 @@ JNIEXPORT void JNICALL Java_org_opencv_%(module)s_%(j_cls)s_delete ...@@ -1546,7 +1547,7 @@ JNIEXPORT void JNICALL Java_org_opencv_%(module)s_%(j_cls)s_delete
delete (%(cls)s*) self; delete (%(cls)s*) self;
} }
""" % {"module" : module.replace('_', '_1'), "cls" : self.smartWrap(ci.name, ci.fullName(isCPP=True)), "j_cls" : ci.jname.replace('_', '_1')} """ % {"module" : module.replace('_', '_1'), "cls" : self.smartWrap(ci, ci.fullName(isCPP=True)), "j_cls" : ci.jname.replace('_', '_1')}
) )
def getClass(self, classname): def getClass(self, classname):
...@@ -1556,17 +1557,31 @@ JNIEXPORT void JNICALL Java_org_opencv_%(module)s_%(j_cls)s_delete ...@@ -1556,17 +1557,31 @@ JNIEXPORT void JNICALL Java_org_opencv_%(module)s_%(j_cls)s_delete
name = classname or self.Module name = classname or self.Module
return name in self.classes return name in self.classes
def isSmartClass(self, classname): def isSmartClass(self, ci):
''' '''
Check if class stores Ptr<T>* instead of T* in nativeObj field Check if class stores Ptr<T>* instead of T* in nativeObj field
''' '''
return self.isWrapped(classname) if ci.smart != None:
return ci.smart
# if parents are smart (we hope) then children are!
# if not we believe the class is smart if it has "create" method
ci.smart = False
if ci.base:
ci.smart = True
else:
for fi in ci.methods:
if fi.name == "create":
ci.smart = True
break
return ci.smart
def smartWrap(self, name, fullname): def smartWrap(self, ci, fullname):
''' '''
Wraps fullname with Ptr<> if needed Wraps fullname with Ptr<> if needed
''' '''
if self.isSmartClass(name): if self.isSmartClass(ci):
return "Ptr<" + fullname + ">" return "Ptr<" + fullname + ">"
return fullname return fullname
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment