mirror of
https://github.com/peterbraden/node-opencv.git
synced 2025-12-08 19:45:55 +00:00
VideoCaptureWrap: patch memory leak and simplify AsyncVCWorker.
This commit is contained in:
parent
110fc740b1
commit
63bc56be70
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user