a0590dccb5
* Setup RN Worklets * Use RN Worklets on iOS * Fix console * Add `installFrameProcessorBindings()` function * Add `FrameProcessorPlugins` proxy (BREAKING CHANGE) * Clean up docs * Update FRAME_PROCESSORS.mdx * Use RN Worklets 0.2.5 * feat: Android build setup * Rewrite Android Frame Processor Part * Update CMakeLists.txt * fix: Add react-native-worklets Gradle dependency * Update Podfile.lock * fix build * gradle:7.4.1 * Init JSI Bindings in method on Android * Fix Folly flags * fix: Init `FrameProcessorRuntimeManager` later * fix: Wrap in `<GestureHandlerRootView>` * Refactor plugins * fix: Remove enableFrameProcessors * Install RN Worklets from current GH master * Update babel.config.js * Update CameraViewModule.kt * Update ImageProxyUtils.java * feat: Upgrade to Reanimated v3 * fix: Fix crash on Worklet init * Update RN Worklets to latest master * fix: Simplify FP Plugins Proxy
63 lines
3.0 KiB
Objective-C
63 lines
3.0 KiB
Objective-C
//
|
|
// FrameProcessorPlugin.h
|
|
// VisionCamera
|
|
//
|
|
// Created by Marc Rousavy on 01.05.21.
|
|
// Copyright © 2021 mrousavy. All rights reserved.
|
|
//
|
|
|
|
#ifndef FrameProcessorPlugin_h
|
|
#define FrameProcessorPlugin_h
|
|
|
|
#import <Foundation/Foundation.h>
|
|
#import "FrameProcessorPluginRegistry.h"
|
|
#import "Frame.h"
|
|
|
|
@protocol FrameProcessorPluginBase
|
|
+ (id) callback:(Frame*)frame withArgs:(NSArray<id>*)args;
|
|
@end
|
|
|
|
|
|
#define VISION_CONCAT2(A, B) A##B
|
|
#define VISION_CONCAT(A, B) VISION_CONCAT2(A, B)
|
|
|
|
/**
|
|
* Use this Macro to register the given function as a Frame Processor.
|
|
* * Make sure the given function is a C-style function with the following signature: static inline id callback(Frame* frame, NSArray* args)
|
|
* * Make sure the given function's name is unique across other frame processor plugins
|
|
* * Make sure your frame processor returns a Value that can be converted to JS
|
|
* * Make sure to use this Macro in an @implementation, not @interface
|
|
*
|
|
* The JS function will have the same name as the given Objective-C function. It can be accessed through the FrameProcessorPlugins object exposed by VisionCamera.
|
|
*/
|
|
#define VISION_EXPORT_FRAME_PROCESSOR(frame_processor) \
|
|
\
|
|
+(void)load \
|
|
{ \
|
|
[FrameProcessorPluginRegistry addFrameProcessorPlugin:@ #frame_processor callback:^id(Frame* frame, NSArray<id>* args) { \
|
|
return frame_processor(frame, args); \
|
|
}]; \
|
|
}
|
|
|
|
|
|
/**
|
|
* Same as VISION_EXPORT_FRAME_PROCESSOR, but uses __attribute__((constructor)) for
|
|
* registration. Useful for registering swift classes that forbids use of +(void)load.
|
|
*/
|
|
#define VISION_EXPORT_SWIFT_FRAME_PROCESSOR(name, objc_name) \
|
|
objc_name : NSObject<FrameProcessorPluginBase> \
|
|
@end \
|
|
\
|
|
@interface objc_name (FrameProcessorPlugin) \
|
|
@end \
|
|
@implementation objc_name (FrameProcessorPlugin) \
|
|
\
|
|
+(void)load \
|
|
{ \
|
|
[FrameProcessorPluginRegistry addFrameProcessorPlugin:@ #name callback:^id(Frame* frame, NSArray<id>* args) { \
|
|
return [objc_name callback:frame withArgs:args]; \
|
|
}]; \
|
|
}
|
|
|
|
#endif /* FrameProcessorPlugin_h */
|