feat: Reintroduce Macros for Frame Processor Plugin registration (#2027)
in VisionCamera v1 & v2 there were two ObjC macros that were helping in creation/registration of Frame Processors, but these were removed with v3 This PR reintroduces such macros, which will not only make FP development easier, but also it will also fix issues people had with registration of Swift Frame Processors (+load vs +initialize issues) Docs were also updated to reflect that the macros should be used to correctly initialize and register ObjC/Swift Frame Processors
This commit is contained in:
@@ -62,6 +62,8 @@ import com.mrousavy.camera.frameprocessor.Frame;
|
||||
import com.mrousavy.camera.frameprocessor.FrameProcessorPlugin;
|
||||
|
||||
public class FaceDetectorFrameProcessorPlugin extends FrameProcessorPlugin {
|
||||
FaceDetectorFrameProcessorPlugin(@Nullable Map<String, Object> options) {}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Object callback(@NonNull Frame frame, @Nullable Map<String, Object> arguments) {
|
||||
@@ -87,7 +89,7 @@ import com.mrousavy.camera.frameprocessor.FrameProcessorPluginRegistry;
|
||||
public class FaceDetectorFrameProcessorPluginPackage implements ReactPackage {
|
||||
// highlight-start
|
||||
FaceDetectorFrameProcessorPluginPackage() {
|
||||
FrameProcessorPluginRegistry.addFrameProcessorPlugin("detectFaces", options -> new FaceDetectorFrameProcessorPlugin());
|
||||
FrameProcessorPluginRegistry.addFrameProcessorPlugin("detectFaces", options -> new FaceDetectorFrameProcessorPlugin(options));
|
||||
}
|
||||
// highlight-end
|
||||
|
||||
@@ -134,9 +136,9 @@ The Frame Processor Plugin will be exposed to JS through the `VisionCameraProxy`
|
||||
import com.mrousavy.camera.frameprocessor.Frame
|
||||
import com.mrousavy.camera.frameprocessor.FrameProcessorPlugin
|
||||
|
||||
class FaceDetectorFrameProcessorPlugin: FrameProcessorPlugin() {
|
||||
class FaceDetectorFrameProcessorPlugin(options: Map<String, Any>?): FrameProcessorPlugin(options) {
|
||||
|
||||
override fun callback(frame: Frame, arguments: Map<String, Object>?): Any? {
|
||||
override fun callback(frame: Frame, arguments: Map<String, Any>?): Any? {
|
||||
// highlight-next-line
|
||||
// code goes here
|
||||
return null
|
||||
@@ -158,7 +160,7 @@ class FaceDetectorFrameProcessorPluginPackage : ReactPackage {
|
||||
// highlight-start
|
||||
init {
|
||||
FrameProcessorPluginRegistry.addFrameProcessorPlugin("detectFaces") { options ->
|
||||
FaceDetectorFrameProcessorPlugin()
|
||||
FaceDetectorFrameProcessorPlugin(options)
|
||||
}
|
||||
}
|
||||
// highlight-end
|
||||
|
@@ -52,7 +52,7 @@ For reference see the [CLI's docs](https://github.com/mateusz1913/vision-camera-
|
||||
@implementation FaceDetectorFrameProcessorPlugin
|
||||
|
||||
- (instancetype) initWithOptions:(NSDictionary*)options; {
|
||||
self = [super init];
|
||||
self = [super initWithOptions:options];
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -63,14 +63,9 @@ For reference see the [CLI's docs](https://github.com/mateusz1913/vision-camera-
|
||||
return nil;
|
||||
}
|
||||
|
||||
+ (void) load {
|
||||
// highlight-start
|
||||
[FrameProcessorPluginRegistry addFrameProcessorPlugin:@"detectFaces"
|
||||
withInitializer:^FrameProcessorPlugin*(NSDictionary* options) {
|
||||
return [[FaceDetectorFrameProcessorPlugin alloc] initWithOptions:options];
|
||||
}];
|
||||
// highlight-end
|
||||
}
|
||||
// highlight-start
|
||||
VISION_EXPORT_FRAME_PROCESSOR(FaceDetectorFrameProcessorPlugin, detectFaces)
|
||||
// highlight-end
|
||||
|
||||
@end
|
||||
```
|
||||
@@ -96,6 +91,10 @@ import VisionCamera
|
||||
|
||||
@objc(FaceDetectorFrameProcessorPlugin)
|
||||
public class FaceDetectorFrameProcessorPlugin: FrameProcessorPlugin {
|
||||
public override init(options: [AnyHashable : Any]! = [:]) {
|
||||
super.init(options: options)
|
||||
}
|
||||
|
||||
public override func callback(_ frame: Frame, withArguments arguments: [AnyHashable : Any]?) -> Any {
|
||||
let buffer = frame.buffer
|
||||
let orientation = frame.orientation
|
||||
@@ -113,22 +112,9 @@ public class FaceDetectorFrameProcessorPlugin: FrameProcessorPlugin {
|
||||
|
||||
#import "YOUR_XCODE_PROJECT_NAME-Swift.h" // <--- replace "YOUR_XCODE_PROJECT_NAME" with the actual value of your xcode project name
|
||||
|
||||
@interface FaceDetectorFrameProcessorPlugin (FrameProcessorPluginLoader)
|
||||
@end
|
||||
|
||||
@implementation FaceDetectorFrameProcessorPlugin (FrameProcessorPluginLoader)
|
||||
|
||||
+ (void)load
|
||||
{
|
||||
// highlight-start
|
||||
[FrameProcessorPluginRegistry addFrameProcessorPlugin:@"detectFaces"
|
||||
withInitializer:^FrameProcessorPlugin* (NSDictionary* options) {
|
||||
return [[FaceDetectorFrameProcessorPlugin alloc] initWithOptions:options];
|
||||
}];
|
||||
// highlight-end
|
||||
}
|
||||
|
||||
@end
|
||||
// highlight-start
|
||||
VISION_EXPORT_SWIFT_FRAME_PROCESSOR(FaceDetectorFrameProcessorPlugin, detectFaces)
|
||||
// highlight-end
|
||||
```
|
||||
|
||||
5. **Implement your frame processing.** See [Example Plugin (Swift)](https://github.com/mrousavy/react-native-vision-camera/blob/main/package/example/ios/Frame%20Processor%20Plugins/Example%20Plugin%20%28Swift%29) for reference.
|
||||
|
Reference in New Issue
Block a user