# DefaultMediaCodecAdapterFactory

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory.java+class:androidx.media3.exoplayer.mediacodec.DefaultMediaCodecAdapterFactory)

*** ** * ** ***


```
@UnstableApi
public final class DefaultMediaCodecAdapterFactory implements MediaCodecAdapter.Factory
```

<br />

*** ** * ** ***

The default `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory`.

By default, this factory `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#createAdapter(androidx.media3.exoplayer.mediacodec.MediaCodecAdapter.Configuration)``https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter` instances on devices with API level \>= 31 (Android 12+). For devices with older API versions, the default behavior is to create `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter` instances. The factory offers APIs to force the creation of `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter` or `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter` instances.

## Summary

| ### Public constructors |
|---|
| `[DefaultMediaCodecAdapterFactory](https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#DefaultMediaCodecAdapterFactory())()` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#DefaultMediaCodecAdapterFactory(android.content.Context)` instead. <br /> |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#DefaultMediaCodecAdapterFactory(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` Creates the default media codec adapter factory. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#DefaultMediaCodecAdapterFactory(android.content.Context,com.google.common.base.Supplier<android.os.HandlerThread>,com.google.common.base.Supplier<android.os.HandlerThread>)( https://developer.android.com/reference/android/content/Context.html context, @https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/android/os/HandlerThread.html> callbackThreadSupplier, @https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/android/os/HandlerThread.html> queueingThreadSupplier )` Creates the default media codec adapter factory. |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` | `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#createAdapter(androidx.media3.exoplayer.mediacodec.MediaCodecAdapter.Configuration)(https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration configuration)` Creates a `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` instance. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#forceDisableAsynchronous()()` Forces the factory to always create `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter` instances. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#forceEnableAsynchronous()()` Forces this factory to always create `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter` instances. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#setAsyncCryptoFlagEnabled(boolean)(boolean enableAsyncCryptoFlag)` Sets whether to enable `https://developer.android.com/reference/android/media/MediaCodec.html#CONFIGURE_FLAG_USE_CRYPTO_ASYNC` on API 36 and above for `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter` instances. |

### Inherited Constants

From [androidx.media3.exoplayer.mediacodec.MediaCodecAdapter.Factory](https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory) `static final https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory` `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory#DEFAULT()`

**This field is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory#getDefault(android.content.Context)` instead.

<br />

### Inherited methods

From [androidx.media3.exoplayer.mediacodec.MediaCodecAdapter.Factory](https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory) `static https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory` `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory#getDefault(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)`

Returns the default factory that should be used in most cases.

## Public constructors

### DefaultMediaCodecAdapterFactory

```
public [DefaultMediaCodecAdapterFactory](https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#DefaultMediaCodecAdapterFactory())()
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory#DefaultMediaCodecAdapterFactory(android.content.Context)` instead.

### DefaultMediaCodecAdapterFactory

```
public DefaultMediaCodecAdapterFactory(Context context)
```

Creates the default media codec adapter factory.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | A `https://developer.android.com/reference/android/content/Context.html`. |

### DefaultMediaCodecAdapterFactory

```
public DefaultMediaCodecAdapterFactory(
    Context context,
    @Nullable Supplier<HandlerThread> callbackThreadSupplier,
    @Nullable Supplier<HandlerThread> queueingThreadSupplier
)
```

Creates the default media codec adapter factory.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | A `https://developer.android.com/reference/android/content/Context.html`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/android/os/HandlerThread.html> callbackThreadSupplier` | A supplier of `https://developer.android.com/reference/android/os/HandlerThread.html` used for `https://developer.android.com/reference/android/media/MediaCodec.html` callbacks invoked when buffers are available. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/android/os/HandlerThread.html> queueingThreadSupplier` | A supplier of `https://developer.android.com/reference/android/os/HandlerThread.html` to use for queueing buffers. |

## Public methods

### createAdapter

```
public MediaCodecAdapter createAdapter(MediaCodecAdapter.Configuration configuration)
```

Creates a `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` instance.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### forceDisableAsynchronous

```
@CanIgnoreReturnValue
public DefaultMediaCodecAdapterFactory forceDisableAsynchronous()
```

Forces the factory to always create `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter` instances.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory` | This factory, for convenience. |

### forceEnableAsynchronous

```
@CanIgnoreReturnValue
public DefaultMediaCodecAdapterFactory forceEnableAsynchronous()
```

Forces this factory to always create `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter` instances.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory` | This factory, for convenience. |

### setAsyncCryptoFlagEnabled

```
@CanIgnoreReturnValue
public DefaultMediaCodecAdapterFactory setAsyncCryptoFlagEnabled(boolean enableAsyncCryptoFlag)
```

Sets whether to enable `https://developer.android.com/reference/android/media/MediaCodec.html#CONFIGURE_FLAG_USE_CRYPTO_ASYNC` on API 36 and above for `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter` instances. The default is `true`.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/DefaultMediaCodecAdapterFactory` | This factory, for convenience. |