SkiaCameraProps

interface SkiaCameraProps extends CameraProps, Pick

Represents props for a SkiaCamera.

Properties

constraints?

optional constraints: Constraint[]

Constraints (e.g. { fps: 60 }) that the Camera pipeline will try to match when configuring the CameraSession.

See

CameraSessionConnection.constraints

Inherited from

CameraProps.constraints


device

The CameraDevice to open, or a CameraPosition (e.g. 'back') to auto-pick a matching device via getCameraDevice(...).

See

CameraSessionConnection.input

Inherited from

CameraProps.device


enableDistortionCorrection?

iOS
optional enableDistortionCorrection: 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

CameraControllerConfiguration.enableDistortionCorrection

Default

true

Inherited from

CameraProps.enableDistortionCorrection


enableLowLightBoost?

optional enableLowLightBoost: boolean

If true, the Camera pipeline may extend exposure times (effectively dropping frame rate) in low-light scenes to receive more light.

See

CameraControllerConfiguration.enableLowLightBoost

Default

false

Inherited from

CameraProps.enableLowLightBoost


enablePhysicalBufferRotation?

optional enablePhysicalBufferRotation: boolean

Physically rotates buffers to the desired target CameraOrientation and MirrorMode.

By default, it is disabled as Skia rotates and mirrors the Frame via efficient GPU-based transforms. Enabling this results in the Frame always being upright and never mirrored.

Default

false

enablePreviewSizedOutputBuffers?

optional enablePreviewSizedOutputBuffers: boolean

Configures the underlying CameraVideoOutput to downscale Frames to a size suitable for preview, such as the screen size.

This may be more efficient if the CameraSession negotiated a high-resolution output, as Skia doesn't have to operate on high-resolution Frames. Ideally, configure a matching ResolutionBiasConstraint upfront so no scaling would be necessary at any point in the pipeline.

Default

false

enableSmoothAutoFocus?

iOS
optional enableSmoothAutoFocus: boolean

If true, auto-focus transitions are performed slower and smoother to appear less intrusive in video recordings.

See

CameraControllerConfiguration.enableSmoothAutoFocus

Default

false

Inherited from

CameraProps.enableSmoothAutoFocus


getInitialExposureBias()?

optional getInitialExposureBias: () => number | undefined

A getter for the initial exposure bias to apply when the CameraController is created. Later, the exposure bias can be adjusted via CameraController.setExposureBias(...).

See

CameraSessionConnection.initialExposureBias

Inherited from

CameraProps.getInitialExposureBias


getInitialZoom()?

optional getInitialZoom: () => number | undefined

A getter for the initial zoom value to apply when the CameraController is created. Later, the zoom can be adjusted via CameraController.setZoom(...).

See

CameraSessionConnection.initialZoom

Inherited from

CameraProps.getInitialZoom


isActive

isActive: boolean

Starts the CameraSession when set to true, and stops it when set back to false.

See

Inherited from

CameraProps.isActive


mirrorMode?

optional mirrorMode: MirrorMode

Sets whether the CameraOutputs are mirrored along the vertical axis. 'auto' mirrors automatically on selfie cameras.

See

CameraOutputConfiguration.mirrorMode

Default

'auto'

Inherited from

CameraProps.mirrorMode


onConfigured()?

optional onConfigured: () => void

Called whenever the CameraSession has been configured with new connections via configure(...) and connections to the individual outputs are formed.

This is a good place to check output capabilities, such as CameraVideoOutput.getSupportedVideoCodecs()

Inherited from

CameraProps.onConfigured


onError()?

optional onError: (error: Error) => void

Called whenever the CameraSession has encountered an error.

See

CameraSession.addOnErrorListener

Inherited from

CameraProps.onError


onFrame()

onFrame: (frame: Frame, render: (onDraw: (state: SkiaOnFrameState) => void) => void) => void

Called on every Frame with the current state.

Note

You must render the Frame to the Canvas yourself via render, otherwise it'll just be a black screen.

Worklet

Example

onFrame(frame, render) {
  'worklet'
  render(({ frameTexture, canvas }) => {
    canvas.drawImage(frameTexture, 0, 0)
  })
  frame.dispose()
}

onInterruptionEnded()?

optional onInterruptionEnded: () => void

Called when a previous interruption has ended and the CameraSession is running uninterrupted again.

See

CameraSession.addOnInterruptionEndedListener

Inherited from

CameraProps.onInterruptionEnded


onInterruptionStarted()?

optional onInterruptionStarted: (interruption: InterruptionReason) => void

Called whenever the CameraSession has encountered an interruption of the given InterruptionReason. Interruptions are temporarily.

See

CameraSession.addOnInterruptionStartedListener

Inherited from

CameraProps.onInterruptionStarted


onSessionConfigSelected()?

optional onSessionConfigSelected: (config: CameraSessionConfig) => void

Called once the given constraints have been fully resolved into a concrete CameraSessionConfig.

See

CameraSessionConnection.onSessionConfigSelected

Inherited from

CameraProps.onSessionConfigSelected


onStarted()?

optional onStarted: () => void

Called when the CameraSession has been started.

See

CameraSession.addOnStartedListener

Inherited from

CameraProps.onStarted


onStopped()?

optional onStopped: () => void

Called when the CameraSession has been stopped.

See

CameraSession.addOnStoppedListener

Inherited from

CameraProps.onStopped


onSubjectAreaChanged()?

optional onSubjectAreaChanged: () => 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

CameraController.addSubjectAreaChangedListener

Inherited from

CameraProps.onSubjectAreaChanged


orientationSource?

optional orientationSource: 
  | OrientationSource
  | "custom"

Set a desired OrientationSource for automatically applying CameraOrientation to all outputs, or 'custom' if you prefer to manually specify CameraOrientation yourself.

See

CameraOutput.outputOrientation

Inherited from

CameraProps.orientationSource


outputs?

optional outputs: CameraOutput[]

The CameraOutputs the device will stream into.

See

Inherited from

CameraProps.outputs


pixelFormat?

optional pixelFormat: TargetVideoPixelFormat

Selects the TargetVideoPixelFormat for the Frame Output using the Skia rendering pipeline.

It is recommended to use 'native' if the negotiated CameraSessionConfig's nativePixelFormat is supported by Skia as this is a zero-copy GPU-only path.

Only resort back to 'yuv' (or possibly even 'rgb') if CPU-based Frame access is required.

Note

Use 'native' with caution, as the device's native format could be a format that is not supported by Skia - for example 'raw-bayer-packed96-12-bit'. The 'private' pixel format is the most efficient GPU-only pixel format supported by Skia.

Default

'native' or 'yuv'

ref?

optional ref: Ref<SkiaCameraRef>

A reference to a SkiaCamera.

See

SkiaCameraRef


warnIfRenderSkipped?

optional warnIfRenderSkipped: boolean

Warns the developer if the onFrame(...) callback did not call render(...).

Disable this if you intentionally want to skip a render.

Default

true