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))")
|
||||
}
|
||||
|
Reference in New Issue
Block a user