import type { SharedValue } from 'react-native-reanimated'; import type { CameraController } from '../specs/CameraController.nitro'; import type { ListenerSubscription } from '../specs/common-types/ListenerSubscription'; import type { NativeThread } from '../specs/frame-processors/NativeThread.nitro'; import type { AsyncRunner } from './AsyncRunner'; import type { RuntimeThread } from './RuntimeThread'; /** * Provides an implementation for a separate Runtime/Thread. * For example, Worklets. */ export interface RuntimeThreadProvider { /** * Create a new {@linkcode AsyncRunner}. An * {@linkcode AsyncRunner} can be used to asynchronously * run code in a Frame Processor. * * @see {@linkcode useAsyncRunner | useAsyncRunner()} */ createAsyncRunner(): AsyncRunner; /** * Creates a new Runtime (exposed as a {@linkcode RuntimeThread}) * for the given {@linkcode NativeThread}. */ createRuntimeForThread(thread: NativeThread): RuntimeThread; /** * Binds the given {@linkcode SharedValue} to the * {@linkcode CameraController} on the UI Thread, and * continuously update the controller via the {@linkcode funcName}. */ bindUIUpdatesToController(value: SharedValue, controller: CameraController, funcName: keyof Pick): ListenerSubscription; }