// // Created by Marc Rousavy on 21.07.23. // #pragma once #include #include #include #include #include "JFrameProcessorPlugin.h" #include "JVisionCameraScheduler.h" #include "JFrameProcessor.h" #include #include #if VISION_CAMERA_ENABLE_FRAME_PROCESSORS #include #endif namespace vision { using namespace facebook; class JVisionCameraProxy : public jni::HybridClass { public: ~JVisionCameraProxy(); static void registerNatives(); void setFrameProcessor(int viewTag, jsi::Runtime& runtime, const jsi::Object& frameProcessor); void removeFrameProcessor(int viewTag); jni::local_ref getFrameProcessorPlugin(const std::string& name, jni::local_ref options); jsi::Runtime* getJSRuntime() { return _runtime; } private: friend HybridBase; jni::global_ref _javaPart; jsi::Runtime* _runtime; #if VISION_CAMERA_ENABLE_FRAME_PROCESSORS std::shared_ptr _workletContext; #endif static auto constexpr TAG = "VisionCameraProxy"; static auto constexpr kJavaDescriptor = "Lcom/mrousavy/camera/frameprocessor/VisionCameraProxy;"; explicit JVisionCameraProxy(const jni::alias_ref& javaThis, jsi::Runtime* jsRuntime, const std::shared_ptr& jsCallInvoker, const jni::global_ref& scheduler); static jni::local_ref initHybrid(jni::alias_ref javaThis, jlong jsRuntimePointer, jni::alias_ref jsCallInvokerHolder, const jni::alias_ref& scheduler); }; } // namespace vision