Configuring Photo Quality

Configuring Photo quality, JPEG compression, and balancing speed over quality

While the CameraFormat's photoResolution drives the main Photo resolution, the CameraPhotoOutput can still adjust it's quality (JPEG compression), as well as balance photo quality over capture speed as preferred.

Adjust Quality Prioritization

Use qualityPrioritization to configure the CameraPhotoOutput's capture mode - 'speed' configures for maximum capture speed at the cost of possibly reducing image quality, 'quality' configures the pipeline for maximum photo quality which possibly introduces more latency, and 'balanced' balances between the two:

const photoOutput = usePhotoOutput({
  qualityPrioritization: 'quality'
})

To configure the pipeline for maximum capture speed, use 'speed', which requires the CameraDevice to support it:

const device = ...
const photoOutput = usePhotoOutput({
  qualityPrioritization: device.supportsSpeedQualityPrioritization ? 'speed' : 'balanced'
})

Tip

'speed' enables zero-shutter-lag (ZSL).

Configure JPEG quality

Processed PhotoContainerFormats (such as 'jpeg' or 'heic') compress captured Photos. By default, a compression of 0.95 (meaning 95% quality) is used, which can be adjusted via quality - for example, to capture in maximum quality set it to 1.0:

const photoOutput = usePhotoOutput({
  qualityPrioritization: 'quality',
  quality: 1.0,
})

For faster capture speed, use a lower quality, such as 0.7:

const device = ...
const photoOutput = usePhotoOutput({
  qualityPrioritization: device.supportsSpeedQualityPrioritization ? 'speed' : 'balanced',
  quality: 0.7
})

Note

RAW PhotoContainerFormat (such as 'dng') do not support compression, effectively always using a quality of 1.0.