# QualitySelector

Artifact: [androidx.camera:camera-video](https://developer.android.com/jetpack/androidx/releases/camera) [View Source](https://cs.android.com/search?q=file:androidx/camera/video/QualitySelector.java+class:androidx.camera.video.QualitySelector) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/camera#1.1.0)

*** ** * ** ***


```
class QualitySelector
```

<br />

*** ** * ** ***

QualitySelector defines a desired quality setting that can be used to configure components with quality setting requirements such as creating a `https://developer.android.com/reference/kotlin/androidx/camera/video/Recorder.Builder#setQualitySelector(androidx.camera.video.QualitySelector)`.

There are pre-defined quality constants that are universally used for video, such as `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#SD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#FHD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#QHD()` and `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#UHD()`, but not all of them are supported on every device since each device has its own capabilities. `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#isQualitySupported(androidx.camera.core.CameraInfo,androidx.camera.video.Quality)` can be used to check whether a quality is supported on the device or not and `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#getResolution(androidx.camera.core.CameraInfo,androidx.camera.video.Quality)` can be used to get the actual resolution defined in the device. Aside from checking the qualities one by one, QualitySelector provides a more convenient way to select a quality. The typical usage of selecting a single desired quality is:

```kotlin
  QualitySelector qualitySelector = QualitySelector.from(Quality.FHD);
```
or the usage of selecting a series of qualities by desired order:

```kotlin
  QualitySelector qualitySelector = QualitySelector.fromOrderedList(
          Arrays.asList(Quality.FHD, Quality.HD, Quality.HIGHEST)
  );
```
The recommended way is giving a guaranteed supported quality such as `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()` or `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()` in the end of the desired quality list, which ensures the QualitySelector can always choose a supported quality. Another way to ensure a quality will be selected when none of the desired qualities are supported is to use `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#fromOrderedList(java.util.List<androidx.camera.video.Quality>,androidx.camera.video.FallbackStrategy)` with an open-ended fallback strategy such as a fallback strategy from `https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy#lowerQualityOrHigherThan(androidx.camera.video.Quality)`:

```kotlin
  QualitySelector qualitySelector = QualitySelector.fromOrderedList(
          Arrays.asList(Quality.UHD, Quality.FHD),
          FallbackStrategy.lowerQualityOrHigherThan(Quality.FHD)
  );
```
If UHD and FHD are not supported on the device, QualitySelector will select the quality that is closest to and lower than FHD. If no lower quality is supported, the quality that is closest to and higher than FHD will be selected.

## Summary

| ### Public functions |
|---|---|
| `java-static https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector` | `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#from(androidx.camera.video.Quality)(quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality)` Gets an instance of QualitySelector with a desired quality. |
| `java-static https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector` | `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#from(androidx.camera.video.Quality,androidx.camera.video.FallbackStrategy)(quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality, fallbackStrategy: https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy)` Gets an instance of QualitySelector with a desired quality and a fallback strategy. |
| `java-static https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector` | `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#fromOrderedList(java.util.List<androidx.camera.video.Quality>)(qualities: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/video/Quality!>)` Gets an instance of QualitySelector with ordered desired qualities. |
| `java-static https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector` | `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#fromOrderedList(java.util.List<androidx.camera.video.Quality>,androidx.camera.video.FallbackStrategy)( qualities: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/video/Quality!>, fallbackStrategy: https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy )` Gets an instance of QualitySelector with ordered desired qualities and a fallback strategy. |
| `java-static https://developer.android.com/reference/android/util/Size.html?` | `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#getResolution(androidx.camera.core.CameraInfo,androidx.camera.video.Quality)(cameraInfo: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo, quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality)` Gets the corresponding resolution from the input quality. |
| `java-static (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/video/Quality!>` | `[getSupportedQualities](https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#getSupportedQualities(androidx.camera.core.CameraInfo))(cameraInfo: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo)` **This function is deprecated.** use `https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapabilities#getSupportedQualities(androidx.camera.core.DynamicRange)` instead. <br /> |
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `[isQualitySupported](https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#isQualitySupported(androidx.camera.core.CameraInfo,androidx.camera.video.Quality))(cameraInfo: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo, quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality)` **This function is deprecated.** use `https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapabilities#isQualitySupported(androidx.camera.video.Quality,androidx.camera.core.DynamicRange)` instead. <br /> |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#toString()()` |

## Public functions

### from

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

```
java-static fun from(quality: Quality): QualitySelector
```

Gets an instance of QualitySelector with a desired quality.

| Parameters |
|---|---|
| `quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality` | the quality. Possible values include `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#SD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#FHD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#QHD()`, or `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#UHD()`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector` | the QualitySelector instance. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException.html` | if `quality` is `null`. |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if `quality` is not one of the possible values. |

### from

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

```
java-static fun from(quality: Quality, fallbackStrategy: FallbackStrategy): QualitySelector
```

Gets an instance of QualitySelector with a desired quality and a fallback strategy.

If the quality is not supported, the fallback strategy will be applied. The fallback strategy can be created by `https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy` API such as `https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy#lowerQualityThan(androidx.camera.video.Quality)`.

| Parameters |
|---|---|
| `quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality` | the quality. Possible values include `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#SD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#FHD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#QHD()`, or `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#UHD()`. |
| `fallbackStrategy: https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy` | the fallback strategy that will be applied when the device does not support `quality`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector` | the QualitySelector instance. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException.html` | if `quality` is `null` or `fallbackStrategy` is `null`. |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if `quality` is not one of the possible values. |

### fromOrderedList

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

```
java-static fun fromOrderedList(qualities: (Mutable)List<Quality!>): QualitySelector
```

Gets an instance of QualitySelector with ordered desired qualities.

The final quality will be selected according to the order in the quality list.

| Parameters |
|---|---|
| `qualities: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/video/Quality!>` | the quality list. Possible values include `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#SD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#FHD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#QHD()`, or `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#UHD()`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector` | the QualitySelector instance. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException.html` | if `qualities` is `null`. |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if `qualities` is empty or contains a quality that is not one of the possible values, including a `null` value. |

### fromOrderedList

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

```
java-static fun fromOrderedList(
    qualities: (Mutable)List<Quality!>,
    fallbackStrategy: FallbackStrategy
): QualitySelector
```

Gets an instance of QualitySelector with ordered desired qualities and a fallback strategy.

The final quality will be selected according to the order in the quality list. If no quality is supported, the fallback strategy will be applied. The fallback strategy can be created by `https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy` API such as `https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy#lowerQualityThan(androidx.camera.video.Quality)`.

| Parameters |
|---|---|
| `qualities: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/camera/video/Quality!>` | the quality list. Possible values include `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#SD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#FHD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#QHD()`, or `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#UHD()`. |
| `fallbackStrategy: https://developer.android.com/reference/kotlin/androidx/camera/video/FallbackStrategy` | the fallback strategy that will be applied when the device does not support those `qualities`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException.html` | if `qualities` is `null` or `fallbackStrategy` is `null`. |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if `qualities` is empty or contains a quality that is not one of the possible values, including a `null` value. |

### getResolution

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

```
java-static fun getResolution(cameraInfo: CameraInfo, quality: Quality): Size?
```

Gets the corresponding resolution from the input quality.

Possible values for `quality` include `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#SD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#FHD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#QHD()` and `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#UHD()`.

| Parameters |
|---|---|
| `cameraInfo: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo` | the cameraInfo for checking the quality. |
| `quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality` | one of the quality constants. |

| Returns |
|---|---|
| `https://developer.android.com/reference/android/util/Size.html?` | the corresponding resolution from the input quality, or `null` if the quality is not supported on the device. `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#isQualitySupported(androidx.camera.core.CameraInfo,androidx.camera.video.Quality)` can be used to check if the input quality is supported. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if quality is not one of the possible values. |

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#isQualitySupported(androidx.camera.core.CameraInfo,androidx.camera.video.Quality)` |   |

### getSupportedQualities

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

```
java-static fun [getSupportedQualities](https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#getSupportedQualities(androidx.camera.core.CameraInfo))(cameraInfo: CameraInfo): (Mutable)List<Quality!>
```

> [!CAUTION]
> **This function is deprecated.**   
>
> use `https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapabilities#getSupportedQualities(androidx.camera.core.DynamicRange)` instead.

Gets all supported qualities on the device.

The returned list is sorted by quality size from largest to smallest. For the qualities in the returned list, with the same input cameraInfo, `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#isQualitySupported(androidx.camera.core.CameraInfo,androidx.camera.video.Quality)` will return `true` and `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#getResolution(androidx.camera.core.CameraInfo,androidx.camera.video.Quality)` will return the corresponding resolution.

Note: Constants `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()` and `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()` are not included in the returned list, but their corresponding qualities are included.

| Parameters |
|---|---|
| `cameraInfo: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo` | the cameraInfo |

### isQualitySupported

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

```
java-static fun [isQualitySupported](https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#isQualitySupported(androidx.camera.core.CameraInfo,androidx.camera.video.Quality))(cameraInfo: CameraInfo, quality: Quality): Boolean
```

> [!CAUTION]
> **This function is deprecated.**   
>
> use `https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapabilities#isQualitySupported(androidx.camera.video.Quality,androidx.camera.core.DynamicRange)` instead.

Checks if the quality is supported.

Calling this method with one of the qualities contained in the returned list of `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#getSupportedQualities(androidx.camera.core.CameraInfo)` will return `true`.

Possible values for `quality` include `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#SD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#FHD()`, `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#QHD()` and `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#UHD()`.

If this method is called with `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#LOWEST()` or `https://developer.android.com/reference/kotlin/androidx/camera/video/Quality#HIGHEST()`, it will return `true` except the case that none of the qualities can be supported.

| Parameters |
|---|---|
| `cameraInfo: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo` | the cameraInfo for checking the quality. |
| `quality: https://developer.android.com/reference/kotlin/androidx/camera/video/Quality` | one of the quality constants. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `true` if the quality is supported; `false` otherwise. |

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/video/QualitySelector#getSupportedQualities(androidx.camera.core.CameraInfo)` |   |

### toString

```
fun toString(): String
```