// // Created by Marc Rousavy on 14.06.21. // #include "CameraView.h" #include #include #include #include namespace vision { using namespace facebook; using namespace jni; using TSelf = local_ref::jhybriddata>; TSelf CameraView::initHybrid(alias_ref jThis) { return makeCxxInstance(jThis); } void CameraView::registerNatives() { registerHybrid({ makeNativeMethod("initHybrid", CameraView::initHybrid), makeNativeMethod("frameProcessorCallback", CameraView::frameProcessorCallback), }); } void CameraView::frameProcessorCallback(const alias_ref& frame) { if (frameProcessor_ == nullptr) { __android_log_write(ANDROID_LOG_WARN, TAG, "Called Frame Processor callback, but `frameProcessor` is null!"); return; } auto frameStrong = make_local(frame); try { frameProcessor_(frameStrong); } catch (const std::exception& exception) { // TODO: jsi::JSErrors cannot be caught on Hermes. They crash the entire app. auto message = "Frame Processor threw an error! " + std::string(exception.what()); __android_log_write(ANDROID_LOG_ERROR, TAG, message.c_str()); } } void CameraView::setFrameProcessor(const FrameProcessor&& frameProcessor) { frameProcessor_ = frameProcessor; } void vision::CameraView::unsetFrameProcessor() { frameProcessor_ = nullptr; } } // namespace vision