Camera2Interop


public final class Camera2Interop


Provides utilities to configure and query Camera2 APIs.

Note: Using Camera2 interop options can override internal CameraX configurations. If an option configured via interop conflicts with options required by CameraX internally, the option from Camera2Interop will override, which may result in unexpected behavior or interfere with CameraX functionality.

Use this class to:

Summary

Nested types

This class is deprecated. Use the camera2Interop extension function on UseCase.Builder (e.g., 'builder.camera2Interop { setPhysicalCameraId(physicalCameraId) }') or SessionConfig.Builder for capture request options and callbacks instead.

Public methods

static final @NonNull CameraControlCamera2Configurator

Creates a CameraControlCamera2Configurator to modify a androidx.camera.core.CameraControl.

static final @NonNull ImageCaptureCamera2Configurator

Creates an ImageCaptureCamera2Configurator to modify ImageCapture builders.

static final @NonNull SessionConfigCamera2Configurator

Creates a SessionConfigCamera2Configurator to modify a session configuration builder.

static final @NonNull UseCaseCamera2Configurator

Creates a UseCaseCamera2Configurator to modify Preview, ImageAnalysis, and VideoCapture builders.

static final @NonNull CameraCharacteristics

Returns the CameraCharacteristics from a CameraInfo.

static final @NonNull CameraFilter

Creates a CameraFilter that matches a specific Camera2 camera ID.

static final @NonNull String

Returns the Camera2 camera ID from a CameraInfo.

static final @NonNull CameraSelector

Creates a CameraSelector targeting a specific Camera2 camera ID.

Public methods

forCameraControl

Added in 1.7.0-alpha03
public static final @NonNull CameraControlCamera2Configurator forCameraControl(
    @NonNull Consumer<@NonNull CameraControlCamera2Interop> configurator
)

Creates a CameraControlCamera2Configurator to modify a androidx.camera.core.CameraControl.

Use this with androidx.camera.core.CameraControl.applyInteropAsync to dynamically send Camera2 capture request options to an active camera. All options configured within a single configurator are applied atomically in a single repeating capture request update. Subsequent calls to androidx.camera.core.CameraControl.applyInteropAsync update parameters incrementally without clearing previously set keys, unless explicitly cleared using CameraControlCamera2Interop.clearCaptureRequestOption or CameraControlCamera2Interop.clearAllCaptureRequestOptions. This overwrites options set with SessionConfigCamera2Interop via androidx.camera.core.SessionConfig.Builder.setInterop.

The CameraControlCamera2Interop target allows configuring options such as:

Warning: Callbacks configured via interop receive raw android.hardware.camera2.CameraCaptureSession instances. Directly invoking state-altering methods on these raw objects (such as android.hardware.camera2.CameraCaptureSession.close or android.hardware.camera2.CameraCaptureSession.abortCaptures) bypasses CameraX pipeline management and may cause state desynchronization, stream interruption, or application crashes.

Parameters
@NonNull Consumer<@NonNull CameraControlCamera2Interop> configurator

the callback applying Camera2 options to CameraControlCamera2Interop

forImageCapture

Added in 1.7.0-alpha03
public static final @NonNull ImageCaptureCamera2Configurator forImageCapture(
    @NonNull Consumer<@NonNull ImageCaptureCamera2Interop> configurator
)

Creates an ImageCaptureCamera2Configurator to modify ImageCapture builders.

Use this with androidx.camera.core.ImageCapture.Builder.setInterop in Java to apply Camera2 options. The ImageCaptureCamera2Interop target allows configuring options such as:

The capture request keys for one-shot still captures (such as androidx.camera.core.ImageCapture.takePicture) are determined by copying all repeating request keys (which may include keys added via androidx.camera.core.SessionConfig.Builder.setInterop or androidx.camera.core.CameraControl.applyInteropAsync) and then overriding them with the still capture request keys configured here.

Warning: Callbacks configured via interop receive raw android.hardware.camera2.CameraCaptureSession instances. Directly invoking state-altering methods on these raw objects (such as android.hardware.camera2.CameraCaptureSession.close or android.hardware.camera2.CameraCaptureSession.abortCaptures) bypasses CameraX pipeline management and may cause state desynchronization, stream interruption, or application crashes.

Parameters
@NonNull Consumer<@NonNull ImageCaptureCamera2Interop> configurator

the callback applying Camera2 options to ImageCaptureCamera2Interop

forSessionConfig

Added in 1.7.0-alpha03
public static final @NonNull SessionConfigCamera2Configurator forSessionConfig(
    @NonNull Consumer<@NonNull SessionConfigCamera2Interop> configurator
)

Creates a SessionConfigCamera2Configurator to modify a session configuration builder.

Use this with androidx.camera.core.SessionConfig.Builder.setInterop in Java to apply Camera2 options to a custom session configuration. The SessionConfigCamera2Interop target allows configuring options such as:

Warning: Callbacks configured via interop receive raw android.hardware.camera2.CameraDevice and android.hardware.camera2.CameraCaptureSession instances. Directly invoking state-altering methods on these raw objects (such as android.hardware.camera2.CameraCaptureSession.close, android.hardware.camera2.CameraCaptureSession.abortCaptures, or android.hardware.camera2.CameraDevice.close) bypasses CameraX pipeline management and may cause state desynchronization, stream interruption, or application crashes.

Parameters
@NonNull Consumer<@NonNull SessionConfigCamera2Interop> configurator

the callback applying Camera2 options to SessionConfigCamera2Interop

forUseCase

Added in 1.7.0-alpha03
public static final @NonNull UseCaseCamera2Configurator forUseCase(@NonNull Consumer<@NonNull UseCaseCamera2Interop> configurator)

Creates a UseCaseCamera2Configurator to modify Preview, ImageAnalysis, and VideoCapture builders.

Use this with androidx.camera.core.UseCase.InteropConfigurable.setInterop in Java to apply Camera2 options. The UseCaseCamera2Interop target allows configuring options such as:

For androidx.camera.core.ImageCapture.Builder, use forImageCapture.

Parameters
@NonNull Consumer<@NonNull UseCaseCamera2Interop> configurator

the callback applying Camera2 options to UseCaseCamera2Interop

getCameraCharacteristics

Added in 1.7.0-alpha03
public static final @NonNull CameraCharacteristics getCameraCharacteristics(@NonNull CameraInfo cameraInfo)

Returns the CameraCharacteristics from a CameraInfo.

Example:

CameraCharacteristics characteristics = Camera2Interop.getCameraCharacteristics(cameraInfo);
Integer sensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
Parameters
@NonNull CameraInfo cameraInfo

target CameraInfo

Throws
IllegalArgumentException

if cameraInfo does not contain Camera2 information

getCameraFilterFromCameraId

Added in 1.7.0-alpha03
public static final @NonNull CameraFilter getCameraFilterFromCameraId(@NonNull String cameraId)

Creates a CameraFilter that matches a specific Camera2 camera ID.

Parameters
@NonNull String cameraId

target Camera2 camera ID

getCameraId

Added in 1.7.0-alpha03
public static final @NonNull String getCameraId(@NonNull CameraInfo cameraInfo)

Returns the Camera2 camera ID from a CameraInfo.

Example:

String cameraId = Camera2Interop.getCameraId(cameraInfo);
Parameters
@NonNull CameraInfo cameraInfo

target CameraInfo

Returns
@NonNull String

Camera2 camera ID

Throws
IllegalArgumentException

if cameraInfo does not contain Camera2 information

getCameraSelectorFromCameraId

Added in 1.7.0-alpha03
public static final @NonNull CameraSelector getCameraSelectorFromCameraId(@NonNull String cameraId)

Creates a CameraSelector targeting a specific Camera2 camera ID.

Example:

CameraSelector cameraSelector = Camera2Interop.getCameraSelectorFromCameraId("0");
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, useCase);
Parameters
@NonNull String cameraId

target Camera2 camera ID

Returns
@NonNull CameraSelector

CameraSelector that filters for cameraId