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