From 81ac6941b970e86a0e58756e1dc3131fe354bf6b Mon Sep 17 00:00:00 2001 From: Simon Hailes Date: Sun, 12 Nov 2017 15:56:33 +0000 Subject: [PATCH] AsyncToBuffer - make it safe to mat.release() the input image before the async func has completed. --- src/Matrix.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Matrix.cc b/src/Matrix.cc index 319853d..c076db8 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -769,21 +769,22 @@ NAN_METHOD(Matrix::ToBuffer) { class AsyncToBufferWorker: public Nan::AsyncWorker { public: - AsyncToBufferWorker(Nan::Callback *callback, Matrix* matrix, std::string ext, + AsyncToBufferWorker(Nan::Callback *callback, cv::Mat mat, std::string ext, std::vector params) : Nan::AsyncWorker(callback), - matrix(matrix), + mat(mat), // dulipcate mat, adding ref, but not copying data ext(ext), params(params) { } ~AsyncToBufferWorker() { + // mat is released, decrementing refcount } void Execute() { std::vector vec(0); // std::vector params(0);//CV_IMWRITE_JPEG_QUALITY 90 - cv::imencode(ext, this->matrix->mat, vec, this->params); + cv::imencode(ext, this->mat, vec, this->params); res = vec; } @@ -813,7 +814,7 @@ public: } private: - Matrix* matrix; + cv::Mat mat; std::string ext; std::vector params; std::vector res; @@ -853,7 +854,7 @@ NAN_METHOD(Matrix::ToBufferAsync) { } Nan::Callback *callback = new Nan::Callback(cb.As()); - Nan::AsyncQueueWorker(new AsyncToBufferWorker(callback, self, ext, params)); + Nan::AsyncQueueWorker(new AsyncToBufferWorker(callback, self->mat, ext, params)); return; }