VideoCaptureWrap: patch memory leak and simplify AsyncVCWorker.

This commit is contained in:
Michael Vines 2015-08-24 09:43:11 -07:00
parent 110fc740b1
commit 63bc56be70

View File

@ -143,9 +143,9 @@ NAN_METHOD(VideoCaptureWrap::Close){
class AsyncVCWorker : public NanAsyncWorker { class AsyncVCWorker : public NanAsyncWorker {
public: public:
AsyncVCWorker(NanCallback *callback, VideoCaptureWrap* vc, Matrix* matrix, AsyncVCWorker(NanCallback *callback, VideoCaptureWrap* vc,
bool retrieve = false, int channel = 0) bool retrieve = false, int channel = 0)
: NanAsyncWorker(callback), vc(vc), matrix(matrix), : NanAsyncWorker(callback), vc(vc),
retrieve(retrieve), channel(channel) {} retrieve(retrieve), channel(channel) {}
~AsyncVCWorker() {} ~AsyncVCWorker() {}
@ -155,12 +155,12 @@ class AsyncVCWorker : public NanAsyncWorker {
// should go on `this`. // should go on `this`.
void Execute () { void Execute () {
if (retrieve) { if (retrieve) {
if (!this->vc->cap.retrieve(matrix->mat, channel)) { if (!this->vc->cap.retrieve(mat, channel)) {
SetErrorMessage("retrieve failed"); SetErrorMessage("retrieve failed");
} }
return; return;
} }
this->vc->cap.read(matrix->mat); this->vc->cap.read(mat);
} }
// Executed when the async work is complete // Executed when the async work is complete
@ -171,8 +171,6 @@ class AsyncVCWorker : public NanAsyncWorker {
Local<Object> im_to_return= NanNew(Matrix::constructor)->GetFunction()->NewInstance(); Local<Object> im_to_return= NanNew(Matrix::constructor)->GetFunction()->NewInstance();
Matrix *img = ObjectWrap::Unwrap<Matrix>(im_to_return); Matrix *img = ObjectWrap::Unwrap<Matrix>(im_to_return);
cv::Mat mat;
mat = this->matrix->mat;
img->mat = mat; img->mat = mat;
Local<Value> argv[] = { Local<Value> argv[] = {
@ -189,7 +187,7 @@ class AsyncVCWorker : public NanAsyncWorker {
private: private:
VideoCaptureWrap *vc; VideoCaptureWrap *vc;
Matrix* matrix; cv::Mat mat;
bool retrieve; bool retrieve;
int channel; int channel;
}; };
@ -204,7 +202,7 @@ NAN_METHOD(VideoCaptureWrap::Read) {
REQ_FUN_ARG(0, cb); REQ_FUN_ARG(0, cb);
NanCallback *callback = new NanCallback(cb.As<Function>()); NanCallback *callback = new NanCallback(cb.As<Function>());
NanAsyncQueueWorker(new AsyncVCWorker(callback, v, new Matrix())); NanAsyncQueueWorker(new AsyncVCWorker(callback, v));
NanReturnUndefined(); NanReturnUndefined();
} }
@ -263,7 +261,7 @@ NAN_METHOD(VideoCaptureWrap::Retrieve) {
INT_FROM_ARGS(channel, 1); INT_FROM_ARGS(channel, 1);
NanCallback *callback = new NanCallback(cb.As<Function>()); NanCallback *callback = new NanCallback(cb.As<Function>());
NanAsyncQueueWorker(new AsyncVCWorker(callback, v, new Matrix(), true, channel)); NanAsyncQueueWorker(new AsyncVCWorker(callback, v, true, channel));
NanReturnUndefined(); NanReturnUndefined();
} }