@@ -10,57 +10,57 @@ namespace IoBindings {
1010 std::string path;
1111 int flags = cv::IMREAD_COLOR;
1212 cv::Mat img;
13-
13+
1414 std::string executeCatchCvExceptionWorker () {
1515 img = cv::imread (path, flags);
1616 if (img.rows == 0 && img.cols == 0 ) {
1717 return " empty Mat" ;
1818 }
1919 return " " ;
2020 }
21-
21+
2222 bool unwrapRequiredArgs (Nan::NAN_METHOD_ARGS_TYPE info) {
2323 return StringConverter::arg (0 , &path, info);
2424 }
25-
25+
2626 bool unwrapOptionalArgs (Nan::NAN_METHOD_ARGS_TYPE info) {
2727 return IntConverter::optArg (1 , &flags, info);
2828 }
29-
29+
3030 FF_VAL getReturnValue () {
3131 return Mat::Converter::wrap (img);
3232 }
3333 };
34-
34+
3535 struct ImwriteWorker : CatchCvExceptionWorker {
3636 public:
3737 std::string path;
3838 cv::Mat img;
3939 std::vector<int > flags;
40-
40+
4141 std::string executeCatchCvExceptionWorker () {
4242 cv::imwrite (path, img);
4343 return " " ;
4444 }
45-
45+
4646 bool unwrapRequiredArgs (Nan::NAN_METHOD_ARGS_TYPE info) {
4747 return StringConverter::arg (0 , &path, info)
4848 || Mat::Converter::arg (1 , &img, info);
4949 }
50-
50+
5151 bool unwrapOptionalArgs (Nan::NAN_METHOD_ARGS_TYPE info) {
5252 return IntArrayConverter::optArg (2 , &flags, info);
5353 }
5454 };
55-
55+
5656 struct ImencodeWorker : CatchCvExceptionWorker {
5757 public:
5858 std::string ext;
5959 cv::Mat img;
6060 std::vector<int > flags;
6161 char *data;
6262 size_t dataSize;
63-
63+
6464 std::string executeCatchCvExceptionWorker () {
6565 std::vector<uchar> dataVec;
6666 cv::imencode (ext, img, dataVec, flags);
@@ -69,40 +69,44 @@ namespace IoBindings {
6969 memcpy (data, reinterpret_cast <char *>(dataVec.data ()), dataSize);
7070 return " " ;
7171 }
72-
72+
7373 bool unwrapRequiredArgs (Nan::NAN_METHOD_ARGS_TYPE info) {
7474 return StringConverter::arg (0 , &ext, info)
7575 || Mat::Converter::arg (1 , &img, info);
7676 }
77-
77+
7878 bool unwrapOptionalArgs (Nan::NAN_METHOD_ARGS_TYPE info) {
7979 return IntArrayConverter::optArg (2 , &flags, info);
8080 }
81-
81+
82+ static void freeBufferCallback (char * data, void * hint) {
83+ free (data);
84+ }
85+
8286 FF_VAL getReturnValue () {
83- return Nan::NewBuffer (data, dataSize).ToLocalChecked ();
87+ return Nan::NewBuffer (data, dataSize, freeBufferCallback, 0 ).ToLocalChecked ();
8488 }
8589 };
86-
90+
8791 struct ImdecodeWorker : CatchCvExceptionWorker {
8892 public:
8993 int flags;
9094 cv::Mat img;
9195 char *data;
9296 size_t dataSize;
93-
97+
9498 std::string executeCatchCvExceptionWorker () {
9599 std::vector<uchar> vec (dataSize);
96100 memcpy (vec.data (), data, dataSize);
97101 img = cv::imdecode (vec, flags);
98102 return " " ;
99103 }
100-
104+
101105 FF_VAL getReturnValue () {
102106 return Mat::Converter::wrap (img);
103107 }
104108 };
105-
109+
106110
107111}
108112
0 commit comments