Fix async toBufffer test

This commit is contained in:
Peter Braden 2012-10-29 23:48:12 -07:00
parent 56fd1824d3
commit ac6c685b56
2 changed files with 30 additions and 13 deletions

View File

@ -326,7 +326,8 @@ Matrix::ToBuffer(const v8::Arguments& args){
struct matrixToBuffer_baton_t { struct matrixToBuffer_baton_t {
Matrix *mm; Matrix *mm;
Persistent<Function> cb; Persistent<Function> cb;
Persistent<v8::Object> res; std::vector<uchar> res;
int resSize;
int sleep_for; int sleep_for;
uv_work_t request; uv_work_t request;
@ -360,16 +361,8 @@ void AsyncToBufferAsync(uv_work_t *req) {
cv::imencode(".jpg", baton->mm->mat, vec, params); cv::imencode(".jpg", baton->mm->mat, vec, params);
node::Buffer *buf = node::Buffer::New(vec.size());
uchar* data = (uchar*) Buffer::Data(buf);
memcpy(data, &vec[0], vec.size());
v8::Local<v8::Object> globalObj = v8::Context::GetCurrent()->Global(); baton->res = vec;
v8::Local<v8::Function> bufferConstructor = v8::Local<v8::Function>::Cast(globalObj->Get(v8::String::New("Buffer")));
v8::Handle<v8::Value> constructorArgs[3] = {buf->handle_, v8::Integer::New(vec.size()), v8::Integer::New(0)};
v8::Persistent<v8::Object> actualBuffer = v8::Persistent<v8::Object>(bufferConstructor->NewInstance(3, constructorArgs));
baton->res = actualBuffer;
} }
void AfterAsyncToBufferAsync(uv_work_t *req) { void AfterAsyncToBufferAsync(uv_work_t *req) {
@ -383,9 +376,16 @@ void AfterAsyncToBufferAsync(uv_work_t *req) {
argv[0] = Local<Value>::New(Null()); argv[0] = Local<Value>::New(Null());
v8::Local<v8::Object> res = v8::Local<v8::Object>(*baton->res); node::Buffer *buf = node::Buffer::New(baton->res.size());
argv[1] = res; uchar* data = (uchar*) Buffer::Data(buf);
baton->res.Dispose(); memcpy(data, &baton->res[0], baton->res.size());
v8::Local<v8::Object> globalObj = v8::Context::GetCurrent()->Global();
v8::Local<v8::Function> bufferConstructor = v8::Local<v8::Function>::Cast(globalObj->Get(v8::String::New("Buffer")));
v8::Handle<v8::Value> constructorArgs[3] = {buf->handle_, v8::Integer::New(baton->res.size()), v8::Integer::New(0)};
v8::Local<v8::Object> actualBuffer = bufferConstructor->NewInstance(3, constructorArgs);
argv[1] = actualBuffer;
TryCatch try_catch; TryCatch try_catch;

View File

@ -137,6 +137,23 @@ vows.describe('Smoke Tests OpenCV').addBatch({
}) })
} }
, "toBufferAsync": {
topic: function(cv){
var buf = fs.readFileSync('./examples/mona.png')
, cb = this.callback
cv.readImage(buf.slice(0), function(err, mat){
var buff = mat.toBufferAsync(function(){
cb.apply(this, arguments)
})
})
}
, 'gives a buffer' : function(e, res){
assert.ok(!e)
assert.ok(res);
assert.ok(res.length > 100);
}
}
, "detectObject": { , "detectObject": {