import { useMemo } from 'react' import type { Photo } from '../specs/instances/Photo.nitro' import type { CameraPhotoOutput, PhotoOutputOptions, } from '../specs/outputs/CameraPhotoOutput.nitro' import { CommonResolutions } from '../utils/CommonResolutions' import { VisionCamera } from '../VisionCamera' import type { Camera } from '../views/Camera' /** * Use a {@linkcode CameraPhotoOutput} for capturing {@linkcode Photo}s. * * The returned {@linkcode CameraPhotoOutput} can be passed to a * {@linkcode Camera} to enable photo capture. Photos can then be captured * via {@linkcode CameraPhotoOutput.capturePhoto | capturePhoto(...)}. * * @example * ```ts * const photoOutput = usePhotoOutput({ * targetResolution: CommonResolutions.UHD_4_3, * qualityPrioritization: 'quality', * }) * * // ... * const photo = await photoOutput.capturePhoto({ flashMode: 'on' }, {}) * // ... * photo.dispose() * ``` */ export function usePhotoOutput({ targetResolution = CommonResolutions.UHD_4_3, containerFormat = 'native', quality = 0.9, qualityPrioritization = 'balanced', previewImageTargetSize = undefined, }: Partial = {}): CameraPhotoOutput { // 1. Create photo output const photoOutput = useMemo( () => VisionCamera.createPhotoOutput({ targetResolution: targetResolution, containerFormat: containerFormat, quality: quality, qualityPrioritization: qualityPrioritization, previewImageTargetSize: previewImageTargetSize, }), [ targetResolution, containerFormat, quality, qualityPrioritization, previewImageTargetSize, ], ) return photoOutput }