diff --git a/package/android/src/main/cpp/frameprocessor/FrameHostObject.cpp b/package/android/src/main/cpp/frameprocessor/FrameHostObject.cpp index 66a274b..83e99f7 100644 --- a/package/android/src/main/cpp/frameprocessor/FrameHostObject.cpp +++ b/package/android/src/main/cpp/frameprocessor/FrameHostObject.cpp @@ -85,6 +85,7 @@ jsi::Value FrameHostObject::get(jsi::Runtime& runtime, const jsi::PropNameID& pr if (name == "toArrayBuffer") { jsi::HostFunctionType toArrayBuffer = [=](jsi::Runtime& runtime, const jsi::Value& thisArg, const jsi::Value* args, size_t count) -> jsi::Value { +#if __ANDROID_API__ >= 26 AHardwareBuffer* hardwareBuffer = this->frame->getHardwareBuffer(); AHardwareBuffer_Desc bufferDescription; @@ -120,6 +121,9 @@ jsi::Value FrameHostObject::get(jsi::Runtime& runtime, const jsi::PropNameID& pr AHardwareBuffer_release(hardwareBuffer); return arrayBuffer; +#else + throw jsi::JSError(runtime, "Frame.toArrayBuffer() is only available if minSdkVersion is set to 26 or higher!"); +#endif }; return jsi::Function::createFromHostFunction(runtime, jsi::PropNameID::forUtf8(runtime, "toArrayBuffer"), 0, toArrayBuffer); } diff --git a/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.cpp b/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.cpp index 8146d8c..b534bcc 100644 --- a/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.cpp +++ b/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.cpp @@ -4,11 +4,11 @@ #include "JFrame.h" -#include -#include #include #include +#include + namespace vision { using namespace facebook; @@ -59,11 +59,13 @@ int JFrame::getBytesPerRow() const { return getBytesPerRowMethod(self()); } +#if __ANDROID_API__ >= 26 AHardwareBuffer* JFrame::getHardwareBuffer() const { static const auto getHardwareBufferMethod = getClass()->getMethod("getHardwareBufferBoxed"); auto hardwareBuffer = getHardwareBufferMethod(self()); return AHardwareBuffer_fromHardwareBuffer(jni::Environment::current(), hardwareBuffer.get()); } +#endif void JFrame::incrementRefCount() { static const auto incrementRefCountMethod = getClass()->getMethod("incrementRefCount"); diff --git a/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.h b/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.h index 0311da7..310f749 100644 --- a/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.h +++ b/package/android/src/main/cpp/frameprocessor/java-bindings/JFrame.h @@ -4,11 +4,11 @@ #pragma once -#include -#include #include #include +#include + namespace vision { using namespace facebook; @@ -27,7 +27,10 @@ public: jlong getTimestamp() const; local_ref getOrientation() const; local_ref getPixelFormat() const; +#if __ANDROID_API__ >= 26 AHardwareBuffer* getHardwareBuffer() const; +#endif + void incrementRefCount(); void decrementRefCount(); void close();