Camera Extensions
Android
Understanding what Camera Extensions are, how to enable them, and what restrictions they have
Some CameraDevices support vendor-specific CameraExtensions - such extensions provide application-level access to custom pipelines like 'hdr', 'night', 'bokeh' or 'face-retouch.'.
Getting available Extensions
To get all available CameraExtensions, use getSupportedExtensions(...):
const device = ...
const extensions = useCameraDeviceExtensions(device)const device = ...
const extensions = await getSupportedExtensions(device)Enabling an Extension
To enable a CameraExtension, configure the CameraSession connection:
function App() {
const device = ...
const extensions = useCameraDeviceExtensions(device)
const extension = extensions.find((e) => e.type === 'night')
return (
<Camera
style={StyleSheet.absoluteFill}
isActive={true}
device={device}
cameraExtension={extension}
/>
)
}function App() {
const device = ...
const extensions = useCameraDeviceExtensions(device)
const extension = extensions.find((e) => e.type === 'night')
const camera = useCamera({
isActive: true,
device: device,
cameraExtension: extension
})
}const device = ...
const session = ...
const extensions = await getSupportedExtensions(device)
const extension = extensions.find((e) => e.type === 'night')
const controllers = await session.configure([
{
input: device,
outputs: [],
config: {
cameraExtension: extension
}
}
], {})Warning
CameraExtensions only work in SDR sessions.
Make sure enableVideoHDR is false.
Camera Extensions and Frame Streaming
Some CameraExtensions don't support Frame Streaming (see "The Frame Output") while they are enabled.
To find out if a CameraExtension works with Frame Streaming, check supportsFrameStreaming:
function App() {
const device = ...
const frameOutput = ...
const extensions = useCameraDeviceExtensions(device)
const extension = extensions.find((e) => {
return e.supportsFrameStreaming && e.type === 'night'
})
return (
<Camera
style={StyleSheet.absoluteFill}
isActive={true}
device={device}
outputs={[frameOutput]}
cameraExtension={extension}
/>
)
}