react-native-vision-camera
Version:
VisionCamera is the fastest and most powerful Camera for react-native.
59 lines (56 loc) • 1.7 kB
text/typescript
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<PhotoOutputOptions> = {}): 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
}