Skip to content

Commit

Permalink
Merge pull request #98 from rainyl/fix-smart-pointer-free
Browse files Browse the repository at this point in the history
Call ptr->reset() before CVD_FREE
  • Loading branch information
rainyl authored Jun 13, 2024
2 parents c3ab8f6 + 0dd6267 commit 9c90d0e
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 32 deletions.
10 changes: 7 additions & 3 deletions src/dnn/dnn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,10 +276,14 @@ CvStatus Layer_GetType(Layer layer, char **rval)
END_WRAP
}

void Layer_Close(LayerPtr layer){CVD_FREE(layer)}
void Layer_Close(LayerPtr layer)
{
layer->ptr->reset();
CVD_FREE(layer)
}

CvStatus
NMSBoxes(VecRect bboxes, VecFloat scores, float score_threshold, float nms_threshold, VecInt *indices)
CvStatus NMSBoxes(VecRect bboxes, VecFloat scores, float score_threshold, float nms_threshold,
VecInt *indices)
{
BEGIN_WRAP
std::vector<int> v;
Expand Down
6 changes: 5 additions & 1 deletion src/extra/img_hash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@ CvStatus BlockMeanHash_SetMode(BlockMeanHash self, int mode)
BEGIN_WRAP(*self.ptr)->setMode(mode);
END_WRAP
}
void BlockMeanHash_Close(BlockMeanHashPtr self){CVD_FREE(self)}
void BlockMeanHash_Close(BlockMeanHashPtr self)
{
self->ptr->reset();
CVD_FREE(self)
}

CvStatus BlockMeanHash_Compute(BlockMeanHash self, Mat inputArr, Mat outputArr)
{
Expand Down
10 changes: 3 additions & 7 deletions src/extra/wechat_qrcode.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "wechat_qrcode.h"
#include "core/core.h"
#include <vector>

CvStatus WeChatQRCode_New(WeChatQRCode *qrcode)
Expand All @@ -17,13 +18,8 @@ CvStatus WeChatQRCode_NewWithParams(const char *detector_prototxt_path, const ch
super_resolution_caffe_model_path)};
END_WRAP
}
void WeChatQRCode_Close(WeChatQRCodePtr self)
{
delete self->ptr;
self->ptr = nullptr;
delete self;
self = nullptr;
}
void WeChatQRCode_Close(WeChatQRCodePtr self){CVD_FREE(self)}

CvStatus WeChatQRCode_DetectAndDecode(WeChatQRCode *self, Mat img, VecMat *points, VecVecChar *rval)
{
BEGIN_WRAP
Expand Down
72 changes: 60 additions & 12 deletions src/features2d/features2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ CvStatus AKAZE_Create(AKAZE *rval)
*rval = {new cv::Ptr<cv::AKAZE>(cv::AKAZE::create())};
END_WRAP
}
void AKAZE_Close(AKAZEPtr a){CVD_FREE(a)}
void AKAZE_Close(AKAZEPtr a)
{
a->ptr->reset();
CVD_FREE(a)
}

CvStatus AKAZE_Detect(AKAZE a, Mat src, VecKeyPoint *rval)
{
Expand All @@ -39,7 +43,11 @@ CvStatus AgastFeatureDetector_Create(AgastFeatureDetector *rval)
*rval = {new cv::Ptr<cv::AgastFeatureDetector>(cv::AgastFeatureDetector::create())};
END_WRAP
}
void AgastFeatureDetector_Close(AgastFeatureDetectorPtr a){CVD_FREE(a)}
void AgastFeatureDetector_Close(AgastFeatureDetectorPtr a)
{
a->ptr->reset();
CVD_FREE(a)
}

CvStatus AgastFeatureDetector_Detect(AgastFeatureDetector a, Mat src, VecKeyPoint *rval)
{
Expand All @@ -56,7 +64,11 @@ CvStatus BRISK_Create(BRISK *rval)
*rval = {new cv::Ptr<cv::BRISK>(cv::BRISK::create())};
END_WRAP
}
void BRISK_Close(BRISKPtr b){CVD_FREE(b)}
void BRISK_Close(BRISKPtr b)
{
b->ptr->reset();
CVD_FREE(b)
}

CvStatus BRISK_Detect(BRISK b, Mat src, VecKeyPoint *rval)
{
Expand Down Expand Up @@ -90,7 +102,11 @@ CvStatus FastFeatureDetector_CreateWithParams(int threshold, bool nonmaxSuppress
cv::FastFeatureDetector::create(threshold, nonmaxSuppression, type_))};
END_WRAP
}
void FastFeatureDetector_Close(FastFeatureDetectorPtr f){CVD_FREE(f)}
void FastFeatureDetector_Close(FastFeatureDetectorPtr f)
{
f->ptr->reset();
CVD_FREE(f)
}

CvStatus FastFeatureDetector_Detect(FastFeatureDetector f, Mat src, VecKeyPoint *rval)
{
Expand All @@ -107,7 +123,11 @@ CvStatus GFTTDetector_Create(GFTTDetector *rval)
*rval = {new cv::Ptr<cv::GFTTDetector>(cv::GFTTDetector::create())};
END_WRAP
}
void GFTTDetector_Close(GFTTDetectorPtr a){CVD_FREE(a)}
void GFTTDetector_Close(GFTTDetectorPtr a)
{
a->ptr->reset();
CVD_FREE(a)
}

CvStatus GFTTDetector_Detect(GFTTDetector a, Mat src, VecKeyPoint *rval)
{
Expand All @@ -124,7 +144,11 @@ CvStatus KAZE_Create(KAZE *rval)
*rval = {new cv::Ptr<cv::KAZE>(cv::KAZE::create())};
END_WRAP
}
void KAZE_Close(KAZEPtr a){CVD_FREE(a)}
void KAZE_Close(KAZEPtr a)
{
a->ptr->reset();
CVD_FREE(a)
}

CvStatus KAZE_Detect(KAZE a, Mat src, VecKeyPoint *rval)
{
Expand All @@ -149,7 +173,11 @@ CvStatus MSER_Create(MSER *rval)
*rval = {new cv::Ptr<cv::MSER>(cv::MSER::create())};
END_WRAP
}
void MSER_Close(MSERPtr a){CVD_FREE(a)}
void MSER_Close(MSERPtr a)
{
a->ptr->reset();
CVD_FREE(a)
}

CvStatus MSER_Detect(MSER a, Mat src, VecKeyPoint *rval)
{
Expand All @@ -176,7 +204,11 @@ CvStatus ORB_CreateWithParams(int nfeatures, float scaleFactor, int nlevels, int
WTA_K, type, patchSize, fastThreshold))};
END_WRAP
}
void ORB_Close(ORBPtr o){CVD_FREE(o)}
void ORB_Close(ORBPtr o)
{
o->ptr->reset();
CVD_FREE(o)
}

CvStatus ORB_Detect(ORB o, Mat src, VecKeyPoint *rval)
{
Expand Down Expand Up @@ -262,7 +294,11 @@ CvStatus SimpleBlobDetector_Create_WithParams(SimpleBlobDetectorParams params, S
new cv::Ptr<cv::SimpleBlobDetector>(cv::SimpleBlobDetector::create(ConvertCParamsToCPPParams(params)))};
END_WRAP
}
void SimpleBlobDetector_Close(SimpleBlobDetectorPtr b){CVD_FREE(b)}
void SimpleBlobDetector_Close(SimpleBlobDetectorPtr b)
{
b->ptr->reset();
CVD_FREE(b)
}

CvStatus SimpleBlobDetector_Detect(SimpleBlobDetector b, Mat src, VecKeyPoint *rval)
{
Expand Down Expand Up @@ -291,7 +327,11 @@ CvStatus BFMatcher_CreateWithParams(int normType, bool crossCheck, BFMatcher *rv
*rval = {new cv::Ptr<cv::BFMatcher>(cv::BFMatcher::create(normType, crossCheck))};
END_WRAP
}
void BFMatcher_Close(BFMatcherPtr b){CVD_FREE(b)}
void BFMatcher_Close(BFMatcherPtr b)
{
b->ptr->reset();
CVD_FREE(b)
}

CvStatus BFMatcher_Match(BFMatcher b, Mat query, Mat train, VecDMatch *rval)
{
Expand All @@ -316,7 +356,11 @@ CvStatus FlannBasedMatcher_Create(FlannBasedMatcher *rval)
*rval = {new cv::Ptr<cv::FlannBasedMatcher>(cv::FlannBasedMatcher::create())};
END_WRAP
}
void FlannBasedMatcher_Close(FlannBasedMatcherPtr f){CVD_FREE(f)}
void FlannBasedMatcher_Close(FlannBasedMatcherPtr f)
{
f->ptr->reset();
CVD_FREE(f)
}

CvStatus FlannBasedMatcher_KnnMatch(FlannBasedMatcher f, Mat query, Mat train, int k, VecVecDMatch *rval)
{
Expand All @@ -341,7 +385,11 @@ CvStatus SIFT_Create(SIFT *rval)
*rval = {new cv::Ptr<cv::SIFT>(cv::SIFT::create())};
END_WRAP
}
void SIFT_Close(SIFTPtr f){CVD_FREE(f)}
void SIFT_Close(SIFTPtr f)
{
f->ptr->reset();
CVD_FREE(f)
}

CvStatus SIFT_Detect(SIFT f, Mat src, VecKeyPoint *rval)
{
Expand Down
6 changes: 5 additions & 1 deletion src/imgproc/imgproc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,11 @@ CvStatus CLAHE_CreateWithParams(double clipLimit, Size tileGridSize, CLAHE *rval
new cv::Ptr<cv::CLAHE>(cv::createCLAHE(clipLimit, cv::Size(tileGridSize.width, tileGridSize.height)))};
END_WRAP
}
void CLAHE_Close(CLAHEPtr c){CVD_FREE(c)}
void CLAHE_Close(CLAHEPtr c)
{
c->ptr->reset();
CVD_FREE(c)
}

CvStatus CLAHE_Apply(CLAHE c, Mat src, Mat dst)
{
Expand Down
4 changes: 2 additions & 2 deletions src/objdetect/objdetect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ CvStatus FaceDetectorYN_NewFromBuffer(const char *framework, VecUChar buffer, Ve

void FaceDetectorYN_Close(FaceDetectorYNPtr self)
{
self->ptr = nullptr;
self->ptr->reset();
CVD_FREE(self)
}

Expand Down Expand Up @@ -486,7 +486,7 @@ CvStatus FaceRecognizerSF_New(const char *model, const char *config, int backend
}
void FaceRecognizerSF_Close(FaceRecognizerSFPtr self)
{
self->ptr = nullptr;
self->ptr->reset();
CVD_FREE(self)
}

Expand Down
12 changes: 10 additions & 2 deletions src/photo/photo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,11 @@ CvStatus MergeMertens_Process(MergeMertens b, VecMat src, Mat dst)
BEGIN_WRAP(*b.ptr)->process(*src.ptr, *dst.ptr);
END_WRAP
}
void MergeMertens_Close(MergeMertensPtr b){CVD_FREE(b)}
void MergeMertens_Close(MergeMertensPtr b)
{
b->ptr->reset();
CVD_FREE(b)
}

CvStatus AlignMTB_Create(AlignMTB *rval)
{
Expand All @@ -120,7 +124,11 @@ CvStatus AlignMTB_Process(AlignMTB b, VecMat src, VecMat *dst)
*dst = {new std::vector<cv::Mat>(vec)};
END_WRAP
}
void AlignMTB_Close(AlignMTBPtr b){CVD_FREE(b)}
void AlignMTB_Close(AlignMTBPtr b)
{
b->ptr->reset();
CVD_FREE(b)
}

CvStatus DetailEnhance(Mat src, Mat dst, float sigma_s, float sigma_r)
{
Expand Down
6 changes: 5 additions & 1 deletion src/stitching/stitching.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ CvStatus Stitcher_Create(int mode, PtrStitcher *rval)
END_WRAP
}

void Stitcher_Close(PtrStitcherPtr stitcher){CVD_FREE(stitcher)}
void Stitcher_Close(PtrStitcherPtr stitcher)
{
stitcher->ptr->reset();
CVD_FREE(stitcher)
}

CvStatus Stitcher_Get(PtrStitcher self, Stitcher *rval)
{
Expand Down
18 changes: 15 additions & 3 deletions src/video/video.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ CvStatus BackgroundSubtractorMOG2_CreateWithParams(int history, double varThresh
cv::createBackgroundSubtractorMOG2(history, varThreshold, detectShadows))};
END_WRAP
}
void BackgroundSubtractorMOG2_Close(BackgroundSubtractorMOG2Ptr self){CVD_FREE(self)}
void BackgroundSubtractorMOG2_Close(BackgroundSubtractorMOG2Ptr self)
{
self->ptr->reset();
CVD_FREE(self)
}

CvStatus BackgroundSubtractorMOG2_Apply(BackgroundSubtractorMOG2 self, Mat src, Mat dst)
{
Expand All @@ -45,7 +49,11 @@ CvStatus BackgroundSubtractorKNN_CreateWithParams(int history, double dist2Thres
cv::createBackgroundSubtractorKNN(history, dist2Threshold, detectShadows))};
END_WRAP
}
void BackgroundSubtractorKNN_Close(BackgroundSubtractorKNNPtr self){CVD_FREE(self)}
void BackgroundSubtractorKNN_Close(BackgroundSubtractorKNNPtr self)
{
self->ptr->reset();
CVD_FREE(self)
}

CvStatus BackgroundSubtractorKNN_Apply(BackgroundSubtractorKNN self, Mat src, Mat dst)
{
Expand Down Expand Up @@ -115,7 +123,11 @@ CvStatus TrackerMIL_Create(TrackerMIL *rval)
*rval = {new cv::Ptr<cv::TrackerMIL>(cv::TrackerMIL::create())};
END_WRAP
}
void TrackerMIL_Close(TrackerMILPtr self){CVD_FREE(self)}
void TrackerMIL_Close(TrackerMILPtr self)
{
self->ptr->reset();
CVD_FREE(self)
}

CvStatus KalmanFilter_New(int dynamParams, int measureParams, int controlParams, int type, KalmanFilter *rval)
{
Expand Down

0 comments on commit 9c90d0e

Please sign in to comment.