Skip to content

Commit 2bede49

Browse files
Merge pull request #248 from justadudewhohacks/opencv-exception-handling
Opencv exception handling
2 parents 90260f3 + 546ec70 commit 2bede49

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+803
-920
lines changed

cc/CatchCvExceptionWorker.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "Workers.h"
2+
3+
#ifndef __FF_CATCHCVEXCEPTIONWORKER_H__
4+
#define __FF_CATCHCVEXCEPTIONWORKER_H__
5+
6+
struct CatchCvExceptionWorker : public SimpleWorker {
7+
public:
8+
std::string execute() {
9+
try {
10+
return executeCatchCvExceptionWorker();
11+
} catch (std::exception e) {
12+
return std::string(e.what());
13+
}
14+
}
15+
16+
virtual std::string executeCatchCvExceptionWorker() = 0;
17+
};
18+
19+
#endif

cc/core/Mat.cc

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ NAN_METHOD(Mat::Set) {
280280
}
281281
}
282282

283-
struct Mat::PushBackWorker : public SimpleWorker {
283+
struct Mat::PushBackWorker : public CatchCvExceptionWorker {
284284
public:
285285
cv::Mat self;
286286
PushBackWorker(cv::Mat self) {
@@ -289,7 +289,7 @@ struct Mat::PushBackWorker : public SimpleWorker {
289289

290290
cv::Mat mat;
291291

292-
const char* execute() {
292+
std::string executeCatchCvExceptionWorker() {
293293
self.push_back(mat);
294294
return "";
295295
}
@@ -317,7 +317,7 @@ NAN_METHOD(Mat::PushBackAsync) {
317317
}
318318

319319

320-
struct Mat::PopBackWorker : public SimpleWorker {
320+
struct Mat::PopBackWorker : public CatchCvExceptionWorker {
321321
public:
322322
cv::Mat self;
323323
PopBackWorker(cv::Mat self) {
@@ -326,7 +326,7 @@ struct Mat::PopBackWorker : public SimpleWorker {
326326

327327
int num = 1;
328328

329-
const char* execute() {
329+
std::string executeCatchCvExceptionWorker() {
330330
self.pop_back(num);
331331
return "";
332332
}
@@ -353,7 +353,7 @@ NAN_METHOD(Mat::PopBackAsync) {
353353
FF_WORKER_ASYNC("Mat::PopBackAsync", PopBackWorker, worker);
354354
}
355355

356-
struct Mat::GetDataWorker : SimpleWorker {
356+
struct Mat::GetDataWorker : CatchCvExceptionWorker {
357357
public:
358358
cv::Mat mat;
359359

@@ -364,7 +364,7 @@ struct Mat::GetDataWorker : SimpleWorker {
364364
size_t size;
365365
char *data;
366366

367-
const char* execute() {
367+
std::string executeCatchCvExceptionWorker() {
368368
size = mat.rows * mat.cols * mat.elemSize();
369369
data = static_cast<char *>(malloc(size));
370370
memcpy(data, mat.data, size);
@@ -408,7 +408,7 @@ NAN_METHOD(Mat::GetRegion) {
408408
FF_RETURN(jsRegion);
409409
}
410410

411-
struct Mat::CopyWorker : public SimpleWorker {
411+
struct Mat::CopyWorker : public CatchCvExceptionWorker {
412412
public:
413413
cv::Mat self;
414414
CopyWorker(cv::Mat self) {
@@ -418,7 +418,7 @@ struct Mat::CopyWorker : public SimpleWorker {
418418
cv::Mat dst;
419419
cv::Mat mask = cv::noArray().getMat();
420420

421-
const char* execute() {
421+
std::string executeCatchCvExceptionWorker() {
422422
self.copyTo(dst, mask);
423423
return "";
424424
}
@@ -476,7 +476,7 @@ NAN_METHOD(Mat::CopyToAsync) {
476476
}
477477

478478

479-
struct Mat::ConvertToWorker : public SimpleWorker {
479+
struct Mat::ConvertToWorker : public CatchCvExceptionWorker {
480480
public:
481481
cv::Mat self;
482482
ConvertToWorker(cv::Mat self) {
@@ -489,7 +489,7 @@ struct Mat::ConvertToWorker : public SimpleWorker {
489489

490490
cv::Mat dst;
491491

492-
const char* execute() {
492+
std::string executeCatchCvExceptionWorker() {
493493
self.convertTo(dst, rtype, alpha, beta);
494494
return "";
495495
}
@@ -586,7 +586,7 @@ NAN_METHOD(Mat::Normalize) {
586586
FF_RETURN(jsMat);
587587
}
588588

589-
struct Mat::SplitChannelsWorker : public SimpleWorker {
589+
struct Mat::SplitChannelsWorker : public CatchCvExceptionWorker {
590590
public:
591591
cv::Mat self;
592592
SplitChannelsWorker(cv::Mat self) {
@@ -596,7 +596,7 @@ struct Mat::SplitChannelsWorker : public SimpleWorker {
596596

597597
std::vector<cv::Mat> mv;
598598

599-
const char* execute() {
599+
std::string executeCatchCvExceptionWorker() {
600600
cv::split(self, mv);
601601
return "";
602602
}
@@ -617,7 +617,7 @@ NAN_METHOD(Mat::SplitChannelsAsync) {
617617
FF_WORKER_ASYNC("Mat::SplitChannelsAsync", SplitChannelsWorker, worker);
618618
}
619619

620-
struct Mat::AddWeightedWorker : public SimpleWorker {
620+
struct Mat::AddWeightedWorker : public CatchCvExceptionWorker {
621621
public:
622622
cv::Mat self;
623623
AddWeightedWorker(cv::Mat self) {
@@ -632,7 +632,7 @@ struct Mat::AddWeightedWorker : public SimpleWorker {
632632

633633
cv::Mat dst;
634634

635-
const char* execute() {
635+
std::string executeCatchCvExceptionWorker() {
636636
cv::addWeighted(self, alpha, src2, beta, gamma, dst, dtype);
637637
return "";
638638
}
@@ -669,7 +669,7 @@ NAN_METHOD(Mat::AddWeightedAsync) {
669669
}
670670

671671

672-
struct Mat::MinMaxLocWorker : public SimpleWorker {
672+
struct Mat::MinMaxLocWorker : public CatchCvExceptionWorker {
673673
public:
674674
cv::Mat self;
675675
MinMaxLocWorker(cv::Mat self) {
@@ -680,7 +680,7 @@ struct Mat::MinMaxLocWorker : public SimpleWorker {
680680
cv::Point2i minLoc, maxLoc;
681681
cv::Mat mask = cv::noArray().getMat();
682682

683-
const char* execute() {
683+
std::string executeCatchCvExceptionWorker() {
684684
cv::minMaxLoc(self, &minVal, &maxVal, &minLoc, &maxLoc, mask);
685685
return "";
686686
}
@@ -710,7 +710,7 @@ NAN_METHOD(Mat::MinMaxLocAsync) {
710710
FF_WORKER_ASYNC("Mat::MinMaxLocAsync", MinMaxLocWorker, worker);
711711
}
712712

713-
struct Mat::FindNonZeroWorker : public SimpleWorker {
713+
struct Mat::FindNonZeroWorker : public CatchCvExceptionWorker {
714714
public:
715715
cv::Mat self;
716716
FindNonZeroWorker(cv::Mat self) {
@@ -719,7 +719,7 @@ struct Mat::FindNonZeroWorker : public SimpleWorker {
719719

720720
std::vector<cv::Point> idx;
721721

722-
const char* execute() {
722+
std::string executeCatchCvExceptionWorker() {
723723
cv::findNonZero(self, idx);
724724
return "";
725725
}
@@ -740,7 +740,7 @@ NAN_METHOD(Mat::FindNonZeroAsync) {
740740
FF_WORKER_ASYNC("Mat::FindNonZeroAsync", FindNonZeroWorker, worker);
741741
}
742742

743-
struct Mat::CountNonZeroWorker : public SimpleWorker {
743+
struct Mat::CountNonZeroWorker : public CatchCvExceptionWorker {
744744
public:
745745
cv::Mat self;
746746
CountNonZeroWorker(cv::Mat self) {
@@ -749,7 +749,7 @@ struct Mat::CountNonZeroWorker : public SimpleWorker {
749749

750750
int num;
751751

752-
const char* execute() {
752+
std::string executeCatchCvExceptionWorker() {
753753
num = cv::countNonZero(self);
754754
return "";
755755
}
@@ -770,7 +770,7 @@ NAN_METHOD(Mat::CountNonZeroAsync) {
770770
FF_WORKER_ASYNC("Mat::CountNonZeroAsync", CountNonZeroWorker, worker);
771771
}
772772

773-
struct Mat::PadToSquareWorker : public SimpleWorker {
773+
struct Mat::PadToSquareWorker : public CatchCvExceptionWorker {
774774
public:
775775
cv::Mat self;
776776
PadToSquareWorker(cv::Mat self) {
@@ -779,7 +779,7 @@ struct Mat::PadToSquareWorker : public SimpleWorker {
779779

780780
cv::Vec3d fillVec = cv::Vec3d();
781781
cv::Mat out;
782-
const char* execute() {
782+
std::string executeCatchCvExceptionWorker() {
783783
int maxDim = (std::max)(self.cols, self.rows);
784784
out = cv::Mat(maxDim, maxDim, self.type(), (cv::Vec3b)fillVec);
785785

@@ -816,7 +816,7 @@ NAN_METHOD(Mat::PadToSquareAsync) {
816816
FF_WORKER_ASYNC("Mat::PadToSquareAsync", PadToSquareWorker, worker);
817817
}
818818

819-
struct Mat::DTWorker : public SimpleWorker {
819+
struct Mat::DTWorker : public CatchCvExceptionWorker {
820820
public:
821821
cv::Mat mat;
822822
bool isInverse;
@@ -843,7 +843,7 @@ struct Mat::DCTWorker : public DTWorker {
843843
DCTWorker(cv::Mat mat, bool isInverse = false) : DTWorker(mat, isInverse) {
844844
}
845845

846-
const char* execute() {
846+
std::string executeCatchCvExceptionWorker() {
847847
if (isInverse) {
848848
cv::idct(mat, dst, flags);
849849
}
@@ -864,7 +864,7 @@ struct Mat::DFTWorker : public DTWorker {
864864

865865
int nonzeroRows = 0;
866866

867-
const char* execute() {
867+
std::string executeCatchCvExceptionWorker() {
868868
if (isInverse) {
869869
cv::idft(mat, dst, flags, nonzeroRows);
870870
}
@@ -938,7 +938,7 @@ NAN_METHOD(Mat::IdftAsync) {
938938
FF_WORKER_ASYNC("Mat::IdftAsync", DFTWorker, worker);
939939
}
940940

941-
struct Mat::MulSpectrumsWorker {
941+
struct Mat::MulSpectrumsWorker : public CatchCvExceptionWorker {
942942
public:
943943
cv::Mat mat;
944944
bool isInverse;
@@ -953,7 +953,7 @@ struct Mat::MulSpectrumsWorker {
953953

954954
cv::Mat dst;
955955

956-
const char* execute() {
956+
std::string executeCatchCvExceptionWorker() {
957957
int flags = (dftRows ? cv::DFT_ROWS : 0);
958958
cv::mulSpectrums(mat, mat2, dst, flags, conjB);
959959
return "";
@@ -999,7 +999,7 @@ NAN_METHOD(Mat::MulSpectrumsAsync) {
999999
}
10001000

10011001

1002-
struct Mat::TransformWorker : public SimpleWorker {
1002+
struct Mat::TransformWorker : public CatchCvExceptionWorker {
10031003
public:
10041004
cv::Mat self;
10051005
TransformWorker(cv::Mat self) {
@@ -1010,7 +1010,7 @@ struct Mat::TransformWorker : public SimpleWorker {
10101010

10111011
cv::Mat dst;
10121012

1013-
const char* execute() {
1013+
std::string executeCatchCvExceptionWorker() {
10141014
cv::transform(self, dst, m);
10151015
return "";
10161016
}
@@ -1042,7 +1042,7 @@ struct Mat::PerspectiveTransformWorker : public Mat::TransformWorker {
10421042
PerspectiveTransformWorker(cv::Mat self) : Mat::TransformWorker(self) {
10431043
}
10441044

1045-
const char* execute() {
1045+
std::string executeCatchCvExceptionWorker() {
10461046
cv::perspectiveTransform(self, dst, m);
10471047
return "";
10481048
}
@@ -1060,7 +1060,7 @@ NAN_METHOD(Mat::PerspectiveTransformAsync) {
10601060
}
10611061

10621062

1063-
struct Mat::OpWithCodeWorker : public SimpleWorker {
1063+
struct Mat::OpWithCodeWorker : public CatchCvExceptionWorker {
10641064
public:
10651065
cv::Mat self;
10661066
OpWithCodeWorker(cv::Mat self) {
@@ -1071,7 +1071,7 @@ struct Mat::OpWithCodeWorker : public SimpleWorker {
10711071

10721072
cv::Mat dst;
10731073

1074-
const char* execute() {
1074+
std::string executeCatchCvExceptionWorker() {
10751075
cv::flip(self, dst, code);
10761076
return "";
10771077
}
@@ -1092,7 +1092,7 @@ struct Mat::FlipWorker : public OpWithCodeWorker {
10921092
FlipWorker(cv::Mat self) : OpWithCodeWorker(self) {
10931093
}
10941094

1095-
const char* execute() {
1095+
std::string executeCatchCvExceptionWorker() {
10961096
cv::flip(self, dst, code);
10971097
return "";
10981098
}
@@ -1109,7 +1109,7 @@ NAN_METHOD(Mat::FlipAsync) {
11091109
FF_WORKER_ASYNC("Mat::FlipAsync", FlipWorker, worker);
11101110
}
11111111

1112-
struct Mat::SumWorker : public SimpleWorker {
1112+
struct Mat::SumWorker : public CatchCvExceptionWorker {
11131113
public:
11141114
cv::Mat self;
11151115
SumWorker(cv::Mat self) {
@@ -1118,7 +1118,7 @@ struct Mat::SumWorker : public SimpleWorker {
11181118

11191119
cv::Scalar sum;
11201120

1121-
const char* execute() {
1121+
std::string executeCatchCvExceptionWorker() {
11221122
sum = cv::sum(self);
11231123
return "";
11241124
}
@@ -1151,7 +1151,7 @@ NAN_METHOD(Mat::SumAsync) {
11511151
}
11521152

11531153

1154-
struct Mat::ConvertScaleAbsWorker : public SimpleWorker {
1154+
struct Mat::ConvertScaleAbsWorker : public CatchCvExceptionWorker {
11551155
public:
11561156
cv::Mat self;
11571157
ConvertScaleAbsWorker(cv::Mat self) {
@@ -1163,7 +1163,7 @@ struct Mat::ConvertScaleAbsWorker : public SimpleWorker {
11631163

11641164
cv::Mat dst;
11651165

1166-
const char* execute() {
1166+
std::string executeCatchCvExceptionWorker() {
11671167
cv::convertScaleAbs(self, dst, alpha, beta);
11681168
return "";
11691169
}
@@ -1204,7 +1204,7 @@ NAN_METHOD(Mat::ConvertScaleAbsAsync) {
12041204
}
12051205

12061206

1207-
struct Mat::GoodFeaturesToTrackWorker : public SimpleWorker {
1207+
struct Mat::GoodFeaturesToTrackWorker : public CatchCvExceptionWorker {
12081208
public:
12091209
cv::Mat self;
12101210
GoodFeaturesToTrackWorker(cv::Mat self) {
@@ -1272,7 +1272,7 @@ struct Mat::GoodFeaturesToTrackWorker : public SimpleWorker {
12721272
}
12731273

12741274

1275-
const char* execute() {
1275+
std::string executeCatchCvExceptionWorker() {
12761276
#if CV_VERSION_MINOR >= 4
12771277
cv::goodFeaturesToTrack(
12781278
self, corners,
@@ -1305,7 +1305,7 @@ NAN_METHOD(Mat::GoodFeaturesToTrackAsync) {
13051305
FF_WORKER_ASYNC("Mat::GoodFeaturesToTrackAsync", GoodFeaturesToTrackWorker, worker);
13061306
}
13071307

1308-
struct Mat::MeanStdDevWorker : public SimpleWorker {
1308+
struct Mat::MeanStdDevWorker : public CatchCvExceptionWorker {
13091309
public:
13101310
cv::Mat self;
13111311
MeanStdDevWorker(cv::Mat self) {
@@ -1317,7 +1317,7 @@ struct Mat::MeanStdDevWorker : public SimpleWorker {
13171317
cv::Mat mean;
13181318
cv::Mat stddev;
13191319

1320-
const char* execute() {
1320+
std::string executeCatchCvExceptionWorker() {
13211321
cv::meanStdDev(self, mean, stddev, mask);
13221322
return "";
13231323
}
@@ -1353,7 +1353,7 @@ struct Mat::RotateWorker : public OpWithCodeWorker {
13531353
RotateWorker(cv::Mat self) : OpWithCodeWorker(self) {
13541354
}
13551355

1356-
const char* execute() {
1356+
std::string executeCatchCvExceptionWorker() {
13571357
cv::rotate(self, dst, code);
13581358
return "";
13591359
}

0 commit comments

Comments
 (0)