Browse Source

Merge pull request #671 from zbjornson/master

Use Nan::TypedArrayContents, fix a signed/unsigned comp warning
v1.x
Linus Unnebäck 10 years ago
parent
commit
83d9da94a6
  1. 2
      package.json
  2. 15
      src/CanvasRenderingContext2d.cc
  3. 12
      src/ImageData.cc

2
package.json

@ -29,7 +29,7 @@
"test-server": "node test/server.js" "test-server": "node test/server.js"
}, },
"dependencies": { "dependencies": {
"nan": "^2.0.9" "nan": "^2.1.0"
}, },
"devDependencies": { "devDependencies": {
"body-parser": "^1.13.3", "body-parser": "^1.13.3",

15
src/CanvasRenderingContext2d.cc

@ -736,23 +736,16 @@ NAN_METHOD(Context2d::GetImageData) {
Local<Object> global = Context::GetCurrent()->Global(); Local<Object> global = Context::GetCurrent()->Global();
Local<Int32> sizeHandle = Nan::New(size); Local<Int32> sizeHandle = Nan::New(size);
Local<Value> bufargv[] = { sizeHandle }; Local<Value> caargv[] = { sizeHandle };
Local<Object> buffer = global->Get(Nan::New("ArrayBuffer").ToLocalChecked()).As<Function>()->NewInstance(1, bufargv);
Local<Int32> zeroHandle = Nan::New(0);
Local<Value> caargv[] = { buffer, zeroHandle, sizeHandle };
Local<Object> clampedArray = global->Get(Nan::New("Uint8ClampedArray").ToLocalChecked()).As<Function>()->NewInstance(3, caargv); Local<Object> clampedArray = global->Get(Nan::New("Uint8ClampedArray").ToLocalChecked()).As<Function>()->NewInstance(3, caargv);
uint8_t *dst = (uint8_t *) clampedArray->GetIndexedPropertiesExternalArrayData();
#else #else
Local<ArrayBuffer> buffer = ArrayBuffer::New(Isolate::GetCurrent(), size); Local<ArrayBuffer> buffer = ArrayBuffer::New(Isolate::GetCurrent(), size);
Local<Uint8ClampedArray> clampedArray = Uint8ClampedArray::New(buffer, 0, size); Local<Uint8ClampedArray> clampedArray = Uint8ClampedArray::New(buffer, 0, size);
#if NODE_MAJOR_VERSION < 3
uint8_t *dst = (uint8_t *)clampedArray->GetIndexedPropertiesExternalArrayData();
#else
uint8_t *dst = (uint8_t *)buffer->GetContents().Data();
#endif
#endif #endif
Nan::TypedArrayContents<uint8_t> typedArrayContents(clampedArray);
uint8_t* dst = *typedArrayContents;
// Normalize data (argb -> rgba) // Normalize data (argb -> rgba)
for (int y = 0; y < sh; ++y) { for (int y = 0; y < sh; ++y) {
uint32_t *row = (uint32_t *)(src + srcStride * (y + sy)); uint32_t *row = (uint32_t *)(src + srcStride * (y + sy));

12
src/ImageData.cc

@ -42,8 +42,8 @@ NAN_METHOD(ImageData::New) {
Local<Uint8ClampedArray> clampedArray; Local<Uint8ClampedArray> clampedArray;
#endif #endif
int width; uint32_t width;
int height; uint32_t height;
int length; int length;
if (info[0]->IsUint32() && info[1]->IsUint32()) { if (info[0]->IsUint32() && info[1]->IsUint32()) {
@ -104,13 +104,9 @@ NAN_METHOD(ImageData::New) {
return; return;
} }
#if NODE_MAJOR_VERSION < 3 Nan::TypedArrayContents<uint8_t> dataPtr(clampedArray);
void *dataPtr = clampedArray->GetIndexedPropertiesExternalArrayData();
#else
void *dataPtr = clampedArray->Buffer()->GetContents().Data();
#endif
ImageData *imageData = new ImageData(reinterpret_cast<uint8_t*>(dataPtr), width, height); ImageData *imageData = new ImageData(reinterpret_cast<uint8_t*>(*dataPtr), width, height);
imageData->Wrap(info.This()); imageData->Wrap(info.This());
info.This()->Set(Nan::New("data").ToLocalChecked(), clampedArray); info.This()->Set(Nan::New("data").ToLocalChecked(), clampedArray);
info.GetReturnValue().Set(info.This()); info.GetReturnValue().Set(info.This());

Loading…
Cancel
Save