# UseCase.InteropConfigurable

Artifact: [androidx.camera:camera-core](https://developer.android.com/jetpack/androidx/releases/camera) [View Source](https://cs.android.com/search?q=file:androidx/camera/core/UseCase.java+class:androidx.camera.core.UseCase.InteropConfigurable) Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

*** ** * ** ***


```
interface UseCase.InteropConfigurable<B : UseCase.InteropConfigurable<B!>?>
```

<br />

Known direct subclasses [ImageAnalysis.Builder](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageAnalysis.Builder), [Preview.Builder](https://developer.android.com/reference/kotlin/androidx/camera/core/Preview.Builder), [VideoCapture.Builder](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture.Builder)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/core/ImageAnalysis.Builder` | Builder for a `https://developer.android.com/reference/kotlin/androidx/camera/core/ImageAnalysis`. |
| `https://developer.android.com/reference/kotlin/androidx/camera/core/Preview.Builder` | Builder for a `https://developer.android.com/reference/kotlin/androidx/camera/core/Preview`. |
| `https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture.Builder` | Builder for a `https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture`. |

*** ** * ** ***

Applies camera-backend-specific options.

Implementations (such as `https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase` builders) support applying backend-specific configurations, such as Camera2 capture request options.

| Parameters |
|---|---|
| `<B : https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase.InteropConfigurable<B!>?>` | the type of the builder implementing this interface |

## Summary

| ### Public functions |
|---|---|
| `B` | `https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase.InteropConfigurable#setInterop(androidx.camera.core.InteropConfigurator<? super B>)(configurator: https://developer.android.com/reference/kotlin/androidx/camera/core/InteropConfigurator<B!>)` Applies interoperability configuration to this builder. |

| ### Extension functions |
|---|---|
| `inline B` | `<B : https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase.InteropConfigurable<B>> B.https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase.InteropConfigurable#(androidx.camera.core.UseCase.InteropConfigurable).camera2Interop(kotlin.Function1)( crossinline block: https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/UseCaseCamera2Interop.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html )` Applies Camera2 options to a UseCase builder. |

## Public functions

### setInterop

Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

```
fun setInterop(configurator: InteropConfigurator<B!>): B
```

Applies interoperability configuration to this builder.

To configure Camera2 options, use `Camera2Interop.forUseCase(configurator)` (from the `camera-camera2` artifact) to create a configurator, then pass it to this method.

**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.

| Parameters |
|---|---|
| `configurator: https://developer.android.com/reference/kotlin/androidx/camera/core/InteropConfigurator<B!>` | the configurator that sets the interoperability options |

| Returns |
|---|---|
| `B` | this builder |

## Extension functions

### B.camera2Interop

Artifact: [androidx.camera:camera-camera2](https://developer.android.com/jetpack/androidx/releases/camera) [View Source](https://cs.android.com/search?q=file:androidx/camera/camera2/interop/Camera2InteropEx.kt+function:camera2Interop)

```
inline fun <B : UseCase.InteropConfigurable<B>> B.camera2Interop(
    crossinline block: UseCaseCamera2Interop.() -> Unit
): B
```

Applies Camera2 options to a UseCase builder.

Configures Camera2 options on builders implementing `https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase.InteropConfigurable` (such as `https://developer.android.com/reference/kotlin/androidx/camera/core/Preview.Builder`, `https://developer.android.com/reference/kotlin/androidx/camera/core/ImageAnalysis.Builder`, or `https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture.Builder`). For `https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture.Builder`, use the dedicated `https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/package-summary#(androidx.camera.core.ImageCapture.Builder).camera2Interop(kotlin.Function1)` extension function.

Options configured via `https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/UseCaseCamera2Interop` include:

- Physical camera ID (`https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/OutputConfigurationInterop#physicalCameraId()`)

- Stream use case (`https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/OutputConfigurationInterop#streamUseCase()`)

- Mirror mode (`https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/OutputConfigurationInterop#mirrorMode()`)

- Timestamp base (`https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/OutputConfigurationInterop#timestampBase()`)

- Dynamic range profile (`https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/OutputConfigurationInterop#dynamicRangeProfile()`)

- Surface group ID (`https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/OutputConfigurationInterop#surfaceGroupId()`)

**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.

```kotlin
import androidx.camera.camera2.interop.camera2Interop
import androidx.camera.core.Preview
import androidx.camera.core.preview

val preview =
    Preview.Builder()
        .camera2Interop {
            physicalCameraId = "5"
            mirrorMode = OutputConfiguration.MIRROR_MODE_H
        }
        .build()
```

| Parameters |
|---|---|
| `crossinline block: https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/UseCaseCamera2Interop.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | configuration block setting Camera2 options on `https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/UseCaseCamera2Interop` |

| Returns |
|---|---|
| `B` | this builder |