2021-03-23 10:15:09 -06:00
import type { ViewProps } from 'react-native' ;
import type { CameraDevice , CameraDeviceFormat , ColorSpace } from './CameraDevice' ;
import type { CameraRuntimeError } from './CameraError' ;
import type { CameraPreset } from './CameraPreset' ;
2021-05-06 06:11:55 -06:00
import type { Frame } from './Frame' ;
2021-03-23 10:15:09 -06:00
export interface CameraProps extends ViewProps {
/ * *
* The Camera Device to use .
*
* See the [ Camera Devices ] ( https : //cuvent.github.io/react-native-vision-camera/docs/guides/devices) section in the documentation for more information about Camera Devices.
*
* @example
* ` ` ` tsx
* const devices = useCameraDevices ( 'wide-angle-camera' )
* const device = devices . back
*
* return (
* < Camera
* device = { device }
* isActive = { true }
* style = { StyleSheet . absoluteFill }
* / >
* )
* ` ` `
* /
device : CameraDevice ;
/ * *
* Whether the Camera should actively stream video frames , or not . See the [ documentation about the ` isActive ` prop ] ( https : //cuvent.github.io/react-native-vision-camera/docs/guides/devices#the-isactive-prop) for more information.
*
* This can be compared to a Video component , where ` isActive ` specifies whether the video is paused or not .
*
* > Note : If you fully unmount the ` <Camera> ` component instead of using ` isActive={false} ` , the Camera will take a bit longer to start again . In return , it will use less resources since the Camera will be completely destroyed when unmounted .
* /
isActive : boolean ;
//#region Common Props (torch, zoom)
/ * *
* Set the current torch mode .
*
* Note : The torch is only available on ` "back" ` cameras , and isn ' t supported by every phone .
*
* @default "off"
* /
torch ? : 'off' | 'on' ;
/ * *
* Specifies the zoom factor of the current camera , in percent . ( ` 0.0 ` - ` 1.0 ` )
*
* * * Note : * * Linearly increasing this value always appears logarithmic to the user .
*
* @default 0.0
* /
zoom? : number ;
/ * *
* Enables or disables the native pinch to zoom gesture .
*
* If you want to implement a custom zoom gesture , see [ the Zooming with Reanimated documentation ] ( https : //cuvent.github.io/react-native-vision-camera/docs/guides/animated).
*
* @default false
* /
enableZoomGesture? : boolean ;
//#endregion
//#region Format/Preset selection
/ * *
* Automatically selects a camera format which best matches the given preset . Must be ` undefined ` when ` format ` is set !
* /
preset? : CameraPreset ;
/ * *
* Selects a given format . Must be ` undefined ` when ` preset ` is set !
* /
format? : CameraDeviceFormat ;
/ * *
* Specify the frames per second this camera should use . Make sure the given ` format ` includes a frame rate range with the given ` fps ` .
*
* Requires ` format ` to be set .
* /
fps? : number ;
/ * *
* Enables or disables HDR on this camera device . Make sure the given ` format ` supports HDR mode .
*
* Requires ` format ` to be set .
* /
hdr? : boolean ;
/ * *
* Enables or disables low - light boost on this camera device . Make sure the given ` format ` supports low - light boost .
*
* Requires ` format ` to be set .
* /
lowLightBoost? : boolean ;
/ * *
* Specifies the color space to use for this camera device . Make sure the given ` format ` contains the given ` colorSpace ` .
*
* Requires ` format ` to be set .
* /
colorSpace? : ColorSpace ;
//#endregion
/ * *
* Also captures data from depth - perception sensors . ( e . g . disparity maps )
*
* @default false
* /
enableDepthData? : boolean ;
/ * *
* A boolean specifying whether the photo render pipeline is prepared for portrait effects matte delivery .
*
* When enabling this , you must also set ` enableDepthData ` to ` true ` .
*
* @platform iOS 12.0 +
* @default false
* /
enablePortraitEffectsMatteDelivery? : boolean ;
/ * *
* Indicates whether the photo render pipeline should be configured to deliver high resolution still images
*
* @default false
* /
enableHighResolutionCapture? : boolean ;
//#region Events
/ * *
* Called when any kind of runtime error occured .
* /
onError ? : ( error : CameraRuntimeError ) = > void ;
/ * *
* Called when the camera was successfully initialized .
* /
onInitialized ? : ( ) = > void ;
2021-05-06 06:11:55 -06:00
/ * *
* A worklet which will be called for every frame the Camera "sees" . Throttle the Frame Processor ' s frame rate with { @linkcode frameProcessorFps } .
*
* > See [ the Frame Processors documentation ] ( https : //cuvent.github.io/react-native-vision-camera/docs/guides/frame-processors) for more information
*
* @example
* ` ` ` tsx
* const frameProcessor = useFrameProcessor ( ( frame ) = > {
* 'worklet'
* const qrCodes = scanQRCodes ( frame )
* console . log ( ` Detected QR Codes: ${ qrCodes } ` )
* } , [ ] )
*
* return < Camera { ...cameraProps } frameProcessor = { frameProcessor } / >
* ` ` `
* /
frameProcessor ? : ( frame : Frame ) = > void ;
/ * *
* Specifies the maximum frame rate the frame processor can use , independent of the Camera ' s frame rate ( ` fps ` property ) .
*
* * A value of ` 1 ` ( default ) indicates that the frame processor gets executed once per second , perfect for code scanning .
* * A value of ` 10 ` indicates that the frame processor gets executed 10 times per second , perfect for more realtime use - cases .
* * A value of ` 25 ` indicates that the frame processor gets executed 30 times per second , perfect for high - speed realtime use - cases .
*
* If you ' re using higher values , always check your Xcode / Android Studio Logs to make sure your frame processors are executing fast enough
* without blocking the video recording queue .
*
* @default 1
* /
frameProcessorFps? : number ;
2021-03-23 10:15:09 -06:00
//#endregion
}