# 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)

*** ** * ** ***


```
class ExtensionSessionConfig : SessionConfig
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.camera.core.SessionConfig](https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig) ||
|   | ↳ | [androidx.camera.extensions.ExtensionSessionConfig](https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionSessionConfig) |

*** ** * ** ***

A `https://developer.android.com/reference/kotlin/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/kotlin/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/kotlin/androidx/camera/core/ViewPort`. Note that `https://developer.android.com/reference/kotlin/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/kotlin/androidx/camera/core/UseCase` provided to the constructor or added via `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionSessionConfig.Builder#addUseCase(androidx.camera.core.UseCase)` cannot be empty.

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

**Usage Example:**

```kotlin
// 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/kotlin/androidx/camera/lifecycle/ProcessCameraProvider#bindToLifecycle(androidx.lifecycle.LifecycleOwner,androidx.camera.core.CameraSelector,kotlin.Array)` |   |
| `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionsManager#getInstanceAsync(android.content.Context,androidx.camera.core.CameraProvider)` |   |

## Summary

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

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

| ### Public properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionsManager` | `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionSessionConfig#extensionsManager()` The `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionsManager` instance. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionSessionConfig#mode()` The extension mode. |

### Inherited functions

From [androidx.camera.core.SessionConfig](https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#setFeatureSelectionListener(java.util.concurrent.Executor,androidx.core.util.Consumer)(
executor: https://developer.android.com/reference/java/util/concurrent/Executor.html,
listener: https://developer.android.com/reference/kotlin/androidx/core/util/Consumer<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-set/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/featuregroup/GroupableFeature>>
)`

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/kotlin/androidx/camera/core/SessionConfig#preferredFeatureGroup()` and device capabilities.
`open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#toString()()`

### Inherited properties

From [androidx.camera.core.SessionConfig](https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/CameraEffect>` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#effects()`

The list of `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraEffect` to be applied on the camera session.
`https://developer.android.com/reference/kotlin/androidx/core/util/Consumer<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-set/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/featuregroup/GroupableFeature>>` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#featureSelectionListener()`

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

Gets the executor set to this session config for feature selection listener invocation.
`https://developer.android.com/reference/android/util/Range.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html>` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#frameRateRange()`

The desired frame rate range for the camera session.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#isAutoRotationEnabled()`

Whether to use auto rotation.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/featuregroup/GroupableFeature>` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#preferredFeatureGroup()`

A list of preferred `https://developer.android.com/reference/kotlin/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.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-set/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/featuregroup/GroupableFeature>` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#requiredFeatureGroup()`

A set of `https://developer.android.com/reference/kotlin/androidx/camera/core/featuregroup/GroupableFeature` that are mandatory for the camera session configuration.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase>` `https://developer.android.com/reference/kotlin/androidx/camera/core/SessionConfig#useCases()`

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

The `https://developer.android.com/reference/kotlin/androidx/camera/core/ViewPort` to be applied on the camera session.

## Public constructors

### ExtensionSessionConfig

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

```
ExtensionSessionConfig(
    mode: Int,
    extensionsManager: ExtensionsManager,
    vararg useCases: UseCase
)
```

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

| Parameters |
|---|---|
| `mode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The extension mode. See `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionMode` for the list of available modes. |
| `extensionsManager: https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionsManager` | The `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionsManager` instance. |
| `vararg useCases: https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase` | The `https://developer.android.com/reference/kotlin/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

```
ExtensionSessionConfig(
    mode: Int,
    extensionsManager: ExtensionsManager,
    useCases: List<UseCase> = emptyList(),
    viewPort: ViewPort? = null,
    effects: List<CameraEffect> = emptyList()
)
```

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

| Parameters |
|---|---|
| `mode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The extension mode. See `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionMode` for the list of available modes. |
| `extensionsManager: https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionsManager` | The `https://developer.android.com/reference/kotlin/androidx/camera/extensions/ExtensionsManager` instance. |
| `useCases: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase> = emptyList()` | The `https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase` instances to be attached to the camera and receive camera data. |
| `viewPort: https://developer.android.com/reference/kotlin/androidx/camera/core/ViewPort? = null` | The `https://developer.android.com/reference/kotlin/androidx/camera/core/ViewPort` to be applied on the camera session. If not set, the default is no viewport. |
| `effects: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/core/CameraEffect> = emptyList()` | The list of `https://developer.android.com/reference/kotlin/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 properties

### extensionsManager

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

```
val extensionsManager: ExtensionsManager
```

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

### mode

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

```
val mode: Int
```

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