CameraPhotoOutput

interface CameraPhotoOutput extends CameraOutput

The CameraPhotoOutput allows capturing Photos in-memory, as well as directly to a file.

In-memory Photos can be converted to Images for immediate display, and/or saved to a file (or the media gallery) later on.

See

Examples

Creating a CameraPhotoOutput via the Hooks API:

const photoOutput = usePhotoOutput()

Creating a CameraPhotoOutput via the Imperative API:

const photoOutput = VisionCamera.createPhotoOutput({
  targetResolution: CommonResolutions.UHD_4_3,
  containerFormat: 'native',
  quality: 0.9,
  qualityPrioritization: 'balanced',
})

Properties

currentResolution?

readonly optional currentResolution: Size

The resolution that the underlying capture pipeline has resolved this CameraOutput to, in sensor-native (un-rotated) pixels, or undefined if the output has not yet been connected to a CameraSession.

Discussion

The selected Size may differ from the requested Size (e.g. from PhotoOutputOptions.targetResolution), as the CameraSession negotiates resolutions across attached CameraOutputs, connected CameraDevice capabilities, and enabled Constraints.

Discussion

For outputs that are not pixel-based (e.g. metadata-only outputs), this reports the resolution of the upstream video stream feeding the output, or undefined if no video input is attached.

Inherited from

CameraOutput.currentResolution


mediaType

readonly mediaType: MediaType

The media type of the content being streamed by this CameraOutput.

Inherited from

CameraOutput.mediaType


outputOrientation

outputOrientation: CameraOrientation

Gets or sets the output orientation of this CameraOutput.

Individual implementations of CameraOutput may choose different strategies for implementing output orientation, for example:

  • A Photo output might apply orientation via EXIF flags.
  • A Video output might apply orientation via track transform metadata.
  • A Preview output might apply orientation via view transforms.
  • A Frame output might not apply orientation and only pass it as a property via the Frame object, unless explicitly configured to physically rotate buffers.

Inherited from

CameraOutput.outputOrientation


supportsCameraCalibrationDataDelivery

readonly supportsCameraCalibrationDataDelivery: boolean

get whether this CameraPhotoOutput supports delivering camera calibration data, e.g. for reconstructing lens-distortion or geometry.

See

CapturePhotoSettings.enableCameraCalibrationDataDelivery


supportsDepthDataDelivery

readonly supportsDepthDataDelivery: boolean

Get whether this CameraPhotoOutput supports capturing depth data alongside with a normal Photo, e.g. for portrait effects matte.

See

CapturePhotoSettings.enableDepthData

Methods

capturePhoto(...)

capturePhoto(settings: CapturePhotoSettings, callbacks: CapturePhotoCallbacks): Promise<Photo>

Captures a Photo using the given CapturePhotoSettings.

Note

On Android, it is recommended to use capturePhoto(...) only for 'jpeg' images, and use capturePhotoToFile(...) for any other formats (such as RAW ('dng'), as CameraX does not properly support in-memory Photos for formats like RAW yet. See https://issuetracker.google.com/u/3/issues/482079661 for more information.

Note

The Photo has to be dispose()'d after it is no longer used, as otherwise the JS Runtime might not immediately delete it, possibly exhausting system resources.

Example

const photo = await photoOutput.capturePhoto(
  { flashMode: 'on' },
  {}
)
// ...
photo.dispose()

capturePhotoToFile(...)

capturePhotoToFile(settings: CapturePhotoSettings, callbacks: CapturePhotoCallbacks): Promise<PhotoFile>

Captures a Photo and writes it to a temporary file using the given CapturePhotoSettings.

Example

const photoFile = await photoOutput.capturePhotoToFile(
  { flashMode: 'on' },
  {}
)