From 2ae137d034dd7ac95055c4ac90b8d1106c87aee5 Mon Sep 17 00:00:00 2001 From: Luis Blanco Date: Fri, 9 Aug 2019 14:37:10 +0300 Subject: [PATCH] Fix getArrayData --- include/addon-tools.hpp | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/include/addon-tools.hpp b/include/addon-tools.hpp index f710c4a..041b5fe 100644 --- a/include/addon-tools.hpp +++ b/include/addon-tools.hpp @@ -306,11 +306,14 @@ inline Type* getArrayData(Napi::Env env, Napi::Object obj, int *num = nullptr) { Type *data = nullptr; if (data.IsTypedArray()) { - Napi::ArrayBuffer arr = obj.As().ArrayBuffer(); + Napi::TypedArray ta = obj.As(); + size_t offset = ta.ByteOffset(); + Napi::ArrayBuffer arr = ta.ArrayBuffer(); if (num) { *num = arr.ByteLength() / sizeof(Type); } - data = static_cast(arr.Data()); + uint8_t *base = arr.Data(); + data = static_cast(base + offset); } else if (data.IsArrayBuffer()) { Napi::ArrayBuffer arr = obj.As(); if (num) { @@ -357,24 +360,14 @@ inline void *getData(Napi::Env env, Napi::Object obj) { void *pixels = nullptr; - if (obj.IsArrayBuffer()) { - pixels = getArrayData(env, obj); - } else if (obj.IsTypedArray()) { - pixels = getArrayData( - env, - obj.As().ArrayBuffer() - ); + if (obj.IsTypedArray() || obj.IsArrayBuffer()) { + pixels = getArrayData(env, obj); } else if (obj.Has("data")) { Napi::Object data = obj.Get("data").As(); - if (data.IsArrayBuffer()) { - pixels = getArrayData(env, data); + if (data.IsTypedArray() || data.IsArrayBuffer()) { + pixels = getArrayData(env, data); } else if (data.IsBuffer()) { - pixels = getBufferData(env, data); - } else if (data.IsTypedArray()) { - pixels = getArrayData( - env, - data.As().ArrayBuffer() - ); + pixels = getBufferData(env, data); } }