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:
		| @@ -9,6 +9,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #import "Frame.h" | ||||
| #import "VisionCameraProxy.h" | ||||
| #import <Foundation/Foundation.h> | ||||
|  | ||||
| /** | ||||
| @@ -28,9 +29,13 @@ | ||||
|  * This is called everytime this Frame Processor Plugin is loaded from the JS side (`initFrameProcessorPlugin(..)`). | ||||
|  * Optionally override this method to implement custom initialization logic. | ||||
|  * - Parameters: | ||||
|  *   - proxy: The VisionCameraProxy instance for using the Frame Processor Context, e.g. to initialize SharedArrays. | ||||
|  *   - options: An options dictionary passed from the JS side, or `nil` if none. | ||||
|  */ | ||||
| - (instancetype _Nonnull)initWithOptions:(NSDictionary* _Nullable)options; | ||||
| - (instancetype _Nonnull)initWithProxy:(VisionCameraProxyHolder* _Nonnull)proxy | ||||
|                            withOptions:(NSDictionary* _Nullable)options NS_SWIFT_NAME(init(proxy:options:)); | ||||
|  | ||||
| - (instancetype)init NS_UNAVAILABLE; | ||||
|  | ||||
| /** | ||||
|  * The actual Frame Processor Plugin's implementation that runs when `plugin.call(..)` is called in the JS Frame Processor. | ||||
| @@ -52,10 +57,11 @@ | ||||
|  | ||||
| #define VISION_EXPORT_FRAME_PROCESSOR(frame_processor_class, frame_processor_plugin_name)                                                  \ | ||||
|   +(void)load {                                                                                                                            \ | ||||
|     [FrameProcessorPluginRegistry addFrameProcessorPlugin:@ #frame_processor_plugin_name                                                   \ | ||||
|                                           withInitializer:^FrameProcessorPlugin*(NSDictionary* _Nullable options) {                        \ | ||||
|                                             return [[frame_processor_class alloc] initWithOptions:options];                                \ | ||||
|                                           }];                                                                                              \ | ||||
|     [FrameProcessorPluginRegistry                                                                                                          \ | ||||
|         addFrameProcessorPlugin:@ #frame_processor_plugin_name                                                                             \ | ||||
|                 withInitializer:^FrameProcessorPlugin*(VisionCameraProxyHolder* _Nonnull proxy, NSDictionary* _Nullable options) {         \ | ||||
|                   return [[frame_processor_class alloc] initWithProxy:proxy withOptions:options];                                          \ | ||||
|                 }];                                                                                                                        \ | ||||
|   } | ||||
|  | ||||
| #define VISION_EXPORT_SWIFT_FRAME_PROCESSOR(frame_processor_class, frame_processor_plugin_name)                                            \ | ||||
| @@ -67,8 +73,9 @@ | ||||
|                                                                                                                                            \ | ||||
|   __attribute__((constructor)) static void VISION_CONCAT(initialize_, frame_processor_plugin_name)(void) {                                 \ | ||||
|     [FrameProcessorPluginRegistry addFrameProcessorPlugin:@ #frame_processor_plugin_name                                                   \ | ||||
|                                           withInitializer:^FrameProcessorPlugin* _Nonnull(NSDictionary* _Nullable options) {               \ | ||||
|                                             return [[frame_processor_class alloc] initWithOptions:options];                                \ | ||||
|                                           withInitializer:^FrameProcessorPlugin* _Nonnull(VisionCameraProxyHolder* _Nonnull proxy,         \ | ||||
|                                                                                           NSDictionary* _Nullable options) {               \ | ||||
|                                             return [[frame_processor_class alloc] initWithProxy:proxy withOptions:options];                \ | ||||
|                                           }];                                                                                              \ | ||||
|   }                                                                                                                                        \ | ||||
|                                                                                                                                            \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user