feat: Add zero-copy SharedArray
type to Frame Processor Plugins (#2383)
* feat: Create `TypedArray` class for Frame Processor Plugins * Type * feat: Pass `VisionCameraProxy` along (BREAKING) * feat: Finish implementation * Log a bit * feat: Successfully convert JSI <> JNI buffers * Wrap buffer * fix: Fix using wrong Runtime * feat: Add docs * add zero copy example * Format C++ * Create iOS base * feat: Finish iOS implementation * chore: Format * fix: Use `NSData` instead of `NSMutableData` * Format * fix: Fix build when Frame Processors are disabled * chore: Rename `TypedArray` to `SharedArray` * fix: Fix Swift typings for Array * Remove a few default inits * fix: Fix Android build * fix: Use `NSInteger` * Update SharedArray.mm * fix: Expose bytes directly on iOS (NSData was immutable)
This commit is contained in:
@@ -10,18 +10,25 @@
|
||||
#import <VisionCamera/FrameProcessorPlugin.h>
|
||||
#import <VisionCamera/FrameProcessorPluginRegistry.h>
|
||||
#import <VisionCamera/Frame.h>
|
||||
#import <VisionCamera/SharedArray.h>
|
||||
|
||||
// Example for an Objective-C Frame Processor plugin
|
||||
|
||||
@interface ExampleFrameProcessorPlugin : FrameProcessorPlugin
|
||||
@end
|
||||
|
||||
@implementation ExampleFrameProcessorPlugin
|
||||
@implementation ExampleFrameProcessorPlugin {
|
||||
SharedArray* _sharedArray;
|
||||
}
|
||||
|
||||
- (instancetype)initWithOptions:(NSDictionary* _Nullable)options
|
||||
{
|
||||
self = [super initWithOptions:options];
|
||||
NSLog(@"ExampleFrameProcessorPlugin initialized with options: %@", options);
|
||||
- (instancetype)initWithProxy:(VisionCameraProxyHolder*)proxy
|
||||
withOptions:(NSDictionary* _Nullable)options {
|
||||
if (self = [super initWithProxy:proxy withOptions:options]) {
|
||||
_sharedArray = [[SharedArray alloc] initWithProxy:proxy
|
||||
type:Int8Array
|
||||
size:5];
|
||||
NSLog(@"ExampleFrameProcessorPlugin initialized with options: %@", options);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -33,6 +40,9 @@
|
||||
NSLog(@"ExamplePlugin: -> %@ (%@)", param == nil ? @"(nil)" : [param description], NSStringFromClass([param classForCoder]));
|
||||
}
|
||||
|
||||
uint8_t* data = _sharedArray.data;
|
||||
data[0] = (uint8_t)(random() * 100);
|
||||
|
||||
return @{
|
||||
@"example_str": @"Test",
|
||||
@"example_bool": @(YES),
|
||||
@@ -41,7 +51,8 @@
|
||||
@"Hello",
|
||||
@(YES),
|
||||
@17.38
|
||||
]
|
||||
],
|
||||
@"example_array_buffer": _sharedArray
|
||||
};
|
||||
}
|
||||
|
||||
|
@@ -11,8 +11,8 @@ import VisionCamera
|
||||
// Example for a Swift Frame Processor plugin
|
||||
@objc(ExampleSwiftFrameProcessorPlugin)
|
||||
public class ExampleSwiftFrameProcessorPlugin: FrameProcessorPlugin {
|
||||
public override init(options: [AnyHashable: Any]! = [:]) {
|
||||
super.init(options: options)
|
||||
public override init(proxy: VisionCameraProxyHolder, options: [AnyHashable: Any]! = [:]) {
|
||||
super.init(proxy: proxy, options: options)
|
||||
|
||||
print("ExampleSwiftFrameProcessorPlugin initialized with options: \(String(describing: options))")
|
||||
}
|
||||
|
@@ -484,7 +484,7 @@ PODS:
|
||||
- libwebp (~> 1.0)
|
||||
- SDWebImage/Core (~> 5.10)
|
||||
- SocketRocket (0.6.1)
|
||||
- VisionCamera (3.6.17):
|
||||
- VisionCamera (3.7.1):
|
||||
- React
|
||||
- React-callinvoker
|
||||
- React-Core
|
||||
@@ -724,9 +724,9 @@ SPEC CHECKSUMS:
|
||||
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
|
||||
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
|
||||
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
|
||||
VisionCamera: 361df29347b7b7ecc47b3d173daa17751a11ffc1
|
||||
VisionCamera: ac444079a315b38ec664cf77ed548c384554f0ca
|
||||
Yoga: 4c3aa327e4a6a23eeacd71f61c81df1bcdf677d5
|
||||
|
||||
PODFILE CHECKSUM: 27f53791141a3303d814e09b55770336416ff4eb
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
COCOAPODS: 1.14.3
|
||||
|
Reference in New Issue
Block a user