import type { CameraController } from '../specs/CameraController.nitro'; import type { CameraPosition } from '../specs/common-types/CameraPosition'; import type { Constraint } from '../specs/common-types/Constraint'; import type { MirrorMode } from '../specs/common-types/MirrorMode'; import type { OrientationSource } from '../specs/common-types/OrientationSource'; import type { CameraDevice } from '../specs/inputs/CameraDevice.nitro'; import type { CameraOutput } from '../specs/outputs/CameraOutput.nitro'; import type { InterruptionReason } from '../specs/session/CameraSession.nitro'; import type { CameraSessionConfig } from '../specs/session/CameraSessionConfig.nitro'; export interface CameraProps { /** * Starts the {@linkcode CameraSession} when set to `true`, and stops it * when set back to `false`. * * @see {@linkcode CameraSession.start | CameraSession.start()} * @see {@linkcode CameraSession.stop | CameraSession.stop()} * @see {@linkcode CameraSession.isRunning} */ isActive: boolean; /** * The {@linkcode CameraDevice} to open, or a {@linkcode CameraPosition} * (e.g. `'back'`) to auto-pick a matching device via * {@linkcode getCameraDevice | getCameraDevice(...)}. * * @see {@linkcode CameraSessionConnection.input} */ device: CameraDevice | CameraPosition; /** * The {@linkcode CameraOutput}s the {@linkcode device} will stream into. * * @see {@linkcode CameraSessionConnection.outputs} * @see {@linkcode CameraOutputConfiguration.output} */ outputs?: CameraOutput[]; /** * {@linkcode Constraint}s (e.g. `{ fps: 60 }`) that the Camera pipeline * will try to match when configuring the {@linkcode CameraSession}. * * @see {@linkcode CameraSessionConnection.constraints} */ constraints?: Constraint[]; /** * Called once the given {@linkcode constraints} have been fully resolved * into a concrete {@linkcode CameraSessionConfig}. * * @see {@linkcode CameraSessionConnection.onSessionConfigSelected} */ onSessionConfigSelected?: (config: CameraSessionConfig) => void; /** * Set a desired {@linkcode OrientationSource} * for automatically applying {@linkcode CameraOrientation} * to all {@linkcode outputs}, or `'custom'` if you * prefer to manually specify {@linkcode CameraOrientation} * yourself. * * @see {@linkcode CameraOutput.outputOrientation} */ orientationSource?: OrientationSource | 'custom'; /** * Sets whether the {@linkcode CameraOutput}s are mirrored along * the vertical axis. {@linkcode MirrorMode | 'auto'} mirrors * automatically on selfie cameras. * * @see {@linkcode CameraOutputConfiguration.mirrorMode} * @default 'auto' */ mirrorMode?: MirrorMode; /** * If `true`, auto-focus transitions are performed slower and smoother * to appear less intrusive in video recordings. * * @see {@linkcode CameraControllerConfiguration.enableSmoothAutoFocus} * @platform iOS * @default false */ enableSmoothAutoFocus?: boolean; /** * If `true`, the Camera pipeline may extend exposure times (effectively * dropping frame rate) in low-light scenes to receive more light. * * @see {@linkcode CameraControllerConfiguration.enableLowLightBoost} * @default false */ enableLowLightBoost?: boolean; /** * If `true`, geometric distortion at the edges (e.g. on ultra-wide-angle * cameras) is corrected, at the cost of a small amount of field of view. * * @see {@linkcode CameraControllerConfiguration.enableDistortionCorrection} * @platform iOS * @default true */ enableDistortionCorrection?: boolean; /** * A getter for the initial zoom value to apply when the * {@linkcode CameraController} is created. Later, the zoom can be * adjusted via {@linkcode CameraController.setZoom | CameraController.setZoom(...)}. * * @see {@linkcode CameraSessionConnection.initialZoom} */ getInitialZoom?: () => number | undefined; /** * A getter for the initial exposure bias to apply when the * {@linkcode CameraController} is created. Later, the exposure bias can be * adjusted via {@linkcode CameraController.setExposureBias | CameraController.setExposureBias(...)}. * * @see {@linkcode CameraSessionConnection.initialExposureBias} */ getInitialExposureBias?: () => number | undefined; /** * Called whenever the {@linkcode CameraSession} * has been configured with new connections via * {@linkcode CameraSession.configure | configure(...)} * and connections to the individual outputs are formed. * * This is a good place to check output * capabilities, such as {@linkcode CameraVideoOutput.getSupportedVideoCodecs | CameraVideoOutput.getSupportedVideoCodecs()} */ onConfigured?: () => void; /** * Called when the {@linkcode CameraSession} * has been started. * * @see {@linkcode CameraSession.addOnStartedListener} */ onStarted?: () => void; /** * Called when the {@linkcode CameraSession} * has been stopped. * * @see {@linkcode CameraSession.addOnStoppedListener} */ onStopped?: () => void; /** * Called whenever the {@linkcode CameraSession} * has encountered an error. * * @see {@linkcode CameraSession.addOnErrorListener} */ onError?: (error: Error) => void; /** * Called whenever the {@linkcode CameraSession} * has encountered an interruption of the given * {@linkcode InterruptionReason}. * Interruptions are temporarily. * * @see {@linkcode CameraSession.addOnInterruptionStartedListener} */ onInterruptionStarted?: (interruption: InterruptionReason) => void; /** * Called when a previous interruption * has ended and the {@linkcode CameraSession} * is running uninterrupted again. * * @see {@linkcode CameraSession.addOnInterruptionEndedListener} */ onInterruptionEnded?: () => void; /** * Called when the subject area substantially changes, * e.g. when the user pans away from a scene that was * previously in focus. * * This is a good point to reset any locked AE/AF/AWB * focus states back to continuously auto-focus. * * @see {@linkcode CameraController.addSubjectAreaChangedListener} * @platform iOS */ onSubjectAreaChanged?: () => void; } /** * Use the Camera. * * This creates a {@linkcode CameraSession}, manages * the input and outputs (including orientation and * mirror modes), wraps listeners as stable React * callbacks, and returns a {@linkcode CameraController}. * * @example * ```ts * const camera = useCamera({ * isActive: true, * device: 'back', * outputs: [] * }) * ``` */ export declare function useCamera({ isActive, device, outputs, constraints, onSessionConfigSelected, mirrorMode, onConfigured, orientationSource, onStarted, onStopped, onError, onInterruptionStarted, onInterruptionEnded, onSubjectAreaChanged, enableDistortionCorrection, enableLowLightBoost, enableSmoothAutoFocus, getInitialExposureBias, getInitialZoom, }: CameraProps): CameraController | undefined;