# ExtensionSessionConfig

Artifact: [androidx.camera:camera-extensions](https://developer.android.com/jetpack/androidx/releases/camera) [View Source](https://cs.android.com/search?q=file:androidx/camera/extensions/ExtensionSessionConfig.kt+class:androidx.camera.extensions.ExtensionSessionConfig) Added in [1.6.0](https://developer.android.com/jetpack/androidx/releases/camera#1.6.0)

*** ** * ** ***

<br />

```
public final class ExtensionSessionConfig extends SessionConfig
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.camera.core.SessionConfig](https://developer.android.com/reference/androidx/camera/core/SessionConfig) ||
|   | ↳ | [androidx.camera.extensions.ExtensionSessionConfig](https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig) |

*** ** * ** ***

A `https://developer.android.com/reference/androidx/camera/core/SessionConfig` for extension sessions.

This class encapsulates the necessary configurations for a extension session. Once configured, this config can be bound to a camera and lifecycle using `androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle` or `androidx.camera.lifecycle.LifecycleCameraProvider.bindToLifecycle`.

It consists of a collection of `https://developer.android.com/reference/androidx/camera/core/UseCase`, session parameters to be applied on the camera session, and common properties like the field-of-view defined by `https://developer.android.com/reference/androidx/camera/core/ViewPort`. Note that `https://developer.android.com/reference/androidx/camera/core/ImageAnalysis` is not supported in extension sessions.

**Constraints:**

- When used for binding to a camera via `androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle` or `androidx.camera.lifecycle.LifecycleCameraProvider.bindToLifecycle`, the list of `https://developer.android.com/reference/androidx/camera/core/UseCase` provided to the constructor or added via `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig.Builder#addUseCase(androidx.camera.core.UseCase)` cannot be empty.

Apps can use `https://developer.android.com/reference/androidx/camera/core/CameraProvider#getCameraInfo(androidx.camera.core.CameraSelector)` with an `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig` to obtain the `https://developer.android.com/reference/androidx/camera/core/CameraInfo` of the camera which can support the given `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig`.

**Usage Example:**

```
// In a coroutine scope
try {
    val extensionsManager = ExtensionsManager.getInstanceAsync(context, cameraProvider).await()

    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
    if (extensionsManager.isExtensionAvailable(cameraSelector, ExtensionMode.NIGHT)) {
        // This is the correct time to create an ExtensionSessionConfig
        val imageCapture = ImageCapture.Builder().build()
        val preview = Preview.Builder().build()

        val config = ExtensionSessionConfig.Builder(
            ExtensionMode.NIGHT,
            extensionsManager
        )
        .addUseCase(preview)
        .addUseCase(imageCapture)
        .build()

        // Now it's safe to bind the configuration
        cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, config)
    } else {
        // Handle the case where the extension is not available.
    }
} catch (e: Exception) {
    // Handle failure
}
```

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the given mode is not a valid extension mode. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/camera/lifecycle/ProcessCameraProvider#bindToLifecycle(androidx.lifecycle.LifecycleOwner,androidx.camera.core.CameraSelector,kotlin.Array)` |   |
| `https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager#getInstanceAsync(android.content.Context,androidx.camera.core.CameraProvider)` |   |

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig.Builder` Builder for `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig`. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig#ExtensionSessionConfig(kotlin.Int,androidx.camera.extensions.ExtensionsManager,kotlin.Array)( int mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager extensionsManager, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/UseCase... useCases )` Creates an `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig` with a variable number of `https://developer.android.com/reference/androidx/camera/core/UseCase` instances. |
| `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig#ExtensionSessionConfig(kotlin.Int,androidx.camera.extensions.ExtensionsManager,kotlin.collections.List,androidx.camera.core.ViewPort,kotlin.collections.List)( int mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager extensionsManager, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/UseCase> useCases, https://developer.android.com/reference/androidx/camera/core/ViewPort viewPort, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/CameraEffect> effects )` Creates an `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig` from the given parameters. |

| ### Public methods |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager` | `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig#getExtensionsManager()()` The `https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager` instance. |
| `final int` | `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig#getMode()()` The extension mode. |

### Inherited methods

From [androidx.camera.core.SessionConfig](https://developer.android.com/reference/androidx/camera/core/SessionConfig) `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/CameraEffect>` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getEffects()()`

The list of `https://developer.android.com/reference/androidx/camera/core/CameraEffect` to be applied on the camera session.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/core/util/Consumer<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/featuregroup/GroupableFeature>>` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getFeatureSelectionListener()()`

Gets the feature selection listener set to this session config.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getFeatureSelectionListenerExecutor()()`

Gets the executor set to this session config for feature selection listener invocation.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/util/Range.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html>` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getFrameRateRange()()`

The desired frame rate range for the camera session.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/featuregroup/GroupableFeature>` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getPreferredFeatureGroup()()`

A list of preferred `https://developer.android.com/reference/androidx/camera/core/featuregroup/GroupableFeature` ordered according to priority in descending order, i.e. a feature with a lower index in the list is considered to have a higher priority.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/featuregroup/GroupableFeature>` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getRequiredFeatureGroup()()`

A set of `https://developer.android.com/reference/androidx/camera/core/featuregroup/GroupableFeature` that are mandatory for the camera session configuration.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/UseCase>` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getUseCases()()`

The list of `https://developer.android.com/reference/androidx/camera/core/UseCase` to be attached to the camera and receive camera data.
`final https://developer.android.com/reference/androidx/camera/core/ViewPort` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#getViewPort()()`

The `https://developer.android.com/reference/androidx/camera/core/ViewPort` to be applied on the camera session.
`final boolean` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#isAutoRotationEnabled()()`

Whether to use auto rotation.
`final void` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#setFeatureSelectionListener(java.util.concurrent.Executor,androidx.core.util.Consumer)(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor,

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/core/util/Consumer<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/featuregroup/GroupableFeature>> listener

)`

Sets a listener to know which features are finally selected when a session config is bound, based on the user-defined priorities/ordering for `https://developer.android.com/reference/androidx/camera/core/SessionConfig#preferredFeatureGroup()` and device capabilities.
`@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/androidx/camera/core/SessionConfig#toString()()`

## Public constructors

### ExtensionSessionConfig

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

```
public ExtensionSessionConfig(
    int mode,
    @NonNull ExtensionsManager extensionsManager,
    @NonNull UseCase... useCases
)
```

Creates an `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig` with a variable number of `https://developer.android.com/reference/androidx/camera/core/UseCase` instances.

| Parameters |
|---|---|
| `int mode` | The extension mode. See `https://developer.android.com/reference/androidx/camera/extensions/ExtensionMode` for the list of available modes. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager extensionsManager` | The `https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager` instance. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/UseCase... useCases` | The `https://developer.android.com/reference/androidx/camera/core/UseCase` instances to be attached to the camera and receive camera data. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the given mode is not a valid extension mode. |

### ExtensionSessionConfig

```
public ExtensionSessionConfig(
    int mode,
    @NonNull ExtensionsManager extensionsManager,
    @NonNull List<@NonNull UseCase> useCases,
    ViewPort viewPort,
    @NonNull List<@NonNull CameraEffect> effects
)
```

Creates an `https://developer.android.com/reference/androidx/camera/extensions/ExtensionSessionConfig` from the given parameters.

| Parameters |
|---|---|
| `int mode` | The extension mode. See `https://developer.android.com/reference/androidx/camera/extensions/ExtensionMode` for the list of available modes. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager extensionsManager` | The `https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager` instance. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/UseCase> useCases` | The `https://developer.android.com/reference/androidx/camera/core/UseCase` instances to be attached to the camera and receive camera data. |
| `https://developer.android.com/reference/androidx/camera/core/ViewPort viewPort` | The `https://developer.android.com/reference/androidx/camera/core/ViewPort` to be applied on the camera session. If not set, the default is no viewport. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/camera/core/CameraEffect> effects` | The list of `https://developer.android.com/reference/androidx/camera/core/CameraEffect` to be applied on the camera session. If not set, the default is no effects. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the given mode is not a valid extension mode. |

## Public methods

### getExtensionsManager

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

```
public final @NonNull ExtensionsManager getExtensionsManager()
```

The `https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager` instance.

### getMode

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

```
public final int getMode()
```

The extension mode. See `https://developer.android.com/reference/androidx/camera/extensions/ExtensionMode` for the list of available modes.