# DefaultRenderersFactory

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/DefaultRenderersFactory.java+class:androidx.media3.exoplayer.DefaultRenderersFactory)

*** ** * ** ***


```
@UnstableApi
public class DefaultRenderersFactory implements RenderersFactory
```

<br />

*** ** * ** ***

Default `https://developer.android.com/reference/androidx/media3/exoplayer/RenderersFactory` implementation.

## Summary

| ### Nested types |
|---|
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = https://developer.android.com/reference/java/lang/annotation/ElementType.html#TYPE_USE) @https://developer.android.com/reference/androidx/annotation/IntDef(value = ) public annotation https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode` Modes for using extension renderers. |

| ### Constants |
|---|---|
| `static final long` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS() = 5000` The default maximum duration for which a video renderer can attempt to seamlessly join an ongoing playback. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#EXTENSION_RENDERER_MODE_OFF() = 0` Do not allow use of extension renderers. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#EXTENSION_RENDERER_MODE_ON() = 1` Allow use of extension renderers. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#EXTENSION_RENDERER_MODE_PREFER() = 2` Allow use of extension renderers. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY() = 50` The maximum number of frames that can be dropped between invocations of `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener#onDroppedFrames(int,long)`. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#DefaultRenderersFactory(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` |

| ### Public methods |
|---|---|
| `Renderer[]` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#createRenderers(android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,androidx.media3.exoplayer.audio.AudioRendererEventListener,androidx.media3.exoplayer.text.TextOutput,androidx.media3.exoplayer.metadata.MetadataOutput)( https://developer.android.com/reference/android/os/Handler.html eventHandler, https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener videoRendererEventListener, https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioRendererEventListener audioRendererEventListener, https://developer.android.com/reference/androidx/media3/exoplayer/text/TextOutput textRendererOutput, https://developer.android.com/reference/androidx/media3/exoplayer/metadata/MetadataOutput metadataRendererOutput )` Builds the `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` instances for an `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#createSecondaryRenderer(androidx.media3.exoplayer.Renderer,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,androidx.media3.exoplayer.audio.AudioRendererEventListener,androidx.media3.exoplayer.text.TextOutput,androidx.media3.exoplayer.metadata.MetadataOutput)( https://developer.android.com/reference/androidx/media3/exoplayer/Renderer renderer, https://developer.android.com/reference/android/os/Handler.html eventHandler, https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener videoRendererEventListener, https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioRendererEventListener audioRendererEventListener, https://developer.android.com/reference/androidx/media3/exoplayer/text/TextOutput textRendererOutput, https://developer.android.com/reference/androidx/media3/exoplayer/metadata/MetadataOutput metadataRendererOutput )` Provides a secondary `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` instance for an `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` to use for pre-warming. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html @https://developer.android.com/reference/androidx/media3/common/util/ExperimentalApi https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#experimentalSetEnableMediaCodecVideoRendererPrewarming(boolean)( boolean enableMediaCodecVideoRendererPrewarming )` Sets whether a secondary `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` will be created through `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildSecondaryVideoRenderer(androidx.media3.exoplayer.Renderer,android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long)` for use by `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` for pre-warming. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html @https://developer.android.com/reference/androidx/media3/common/util/ExperimentalApi https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#experimentalSetLateThresholdToDropDecoderInputUs(long)( long lateThresholdToDropDecoderInputUs )` Sets the late threshold for rendered output buffers, in microseconds, after which decoder input buffers may be dropped. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html @https://developer.android.com/reference/androidx/media3/common/util/ExperimentalApi https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#experimentalSetMediaCodecAsyncCryptoFlagEnabled(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 when operating the codec in asynchronous mode. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#forceDisableMediaCodecAsynchronousQueueing()()` Disables `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` instances from operating their `https://developer.android.com/reference/android/media/MediaCodec.html` in asynchronous mode and perform asynchronous queueing. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#forceEnableMediaCodecAsynchronousQueueing()()` Enables `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` instances to operate their `https://developer.android.com/reference/android/media/MediaCodec.html` in asynchronous mode and perform asynchronous queueing. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setAllowedVideoJoiningTimeMs(long)(long allowedVideoJoiningTimeMs)` Sets the maximum duration for which video renderers can attempt to seamlessly join an ongoing playback. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setEnableAudioFloatOutput(boolean)(boolean enableFloatOutput)` Sets whether floating point audio should be output when possible. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setEnableAudioOutputPlaybackParameters(boolean)( boolean enableAudioOutputPlaybackParameters )` Sets whether to enable setting playback speed via `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioOutput`, using `https://developer.android.com/reference/android/media/AudioTrack.html#setPlaybackParams(android.media.PlaybackParams)` by default, rather than using application-level audio speed adjustment. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html [setEnableAudioTrackPlaybackParams](https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setEnableAudioTrackPlaybackParams(boolean))( boolean enableAudioTrackPlaybackParams )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setEnableAudioOutputPlaybackParameters(boolean)` instead. <br /> |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setEnableDecoderFallback(boolean)(boolean enableDecoderFallback)` Sets whether to enable fallback to lower-priority decoders if decoder initialization fails. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setExtensionRendererMode(int)( @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode )` Sets the extension renderer mode, which determines if and how available extension renderers are used. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setMediaCodecSelector(androidx.media3.exoplayer.mediacodec.MediaCodecSelector)(https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector)` Sets a `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector` for use by `https://developer.android.com/reference/android/media/MediaCodec.html` based renderers. |
| `final https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html @https://developer.android.com/reference/androidx/media3/common/util/ExperimentalApi https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setVideoRendererEarlySchedulingThresholdUs(long)( long videoRendererEarlySchedulingThresholdUs )` Sets the threshold for how early `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` will schedule a frame for release on the surface. |

| ### Protected methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildAudioRenderers(android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,androidx.media3.exoplayer.audio.AudioSink,android.os.Handler,androidx.media3.exoplayer.audio.AudioRendererEventListener,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)( https://developer.android.com/reference/android/content/Context.html context, @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink audioSink, https://developer.android.com/reference/android/os/Handler.html eventHandler, https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioRendererEventListener eventListener, https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out )` Builds audio renderers for use by the player. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildAudioSink(android.content.Context,boolean,boolean)( https://developer.android.com/reference/android/content/Context.html context, boolean enableFloatOutput, boolean enableAudioOutputPlaybackParams )` Builds an `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` to which the audio renderers will output. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildCameraMotionRenderers(android.content.Context,int,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)( https://developer.android.com/reference/android/content/Context.html context, @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out )` Builds camera motion renderers for use by the player. |
| `void` | `[buildImageRenderers](https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildImageRenderers(java.util.ArrayList<androidx.media3.exoplayer.Renderer>))(https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out)` **This method is deprecated.** Override `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildImageRenderers(android.content.Context,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)` instead. <br /> |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildImageRenderers(android.content.Context,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)(https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out)` Builds image renderers for use by the player. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildMetadataRenderers(android.content.Context,androidx.media3.exoplayer.metadata.MetadataOutput,android.os.Looper,int,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/exoplayer/metadata/MetadataOutput output, https://developer.android.com/reference/android/os/Looper.html outputLooper, @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out )` Builds metadata renderers for use by the player. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildMiscellaneousRenderers(android.content.Context,android.os.Handler,int,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/android/os/Handler.html eventHandler, @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out )` Builds any miscellaneous renderers used by the player. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildSecondaryVideoRenderer(androidx.media3.exoplayer.Renderer,android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long)( https://developer.android.com/reference/androidx/media3/exoplayer/Renderer renderer, https://developer.android.com/reference/android/content/Context.html context, @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, https://developer.android.com/reference/android/os/Handler.html eventHandler, https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener eventListener, long allowedVideoJoiningTimeMs )` Builds a secondary video renderer for an `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` instance to use for pre-warming. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildTextRenderers(android.content.Context,androidx.media3.exoplayer.text.TextOutput,android.os.Looper,int,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/exoplayer/text/TextOutput output, https://developer.android.com/reference/android/os/Looper.html outputLooper, @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out )` Builds text renderers for use by the player. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildVideoRenderers(android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)( https://developer.android.com/reference/android/content/Context.html context, @https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, https://developer.android.com/reference/android/os/Handler.html eventHandler, https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener eventListener, long allowedVideoJoiningTimeMs, https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out )` Builds video renderers for use by the player. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#getCodecAdapterFactory()()` Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory` that will be used when creating `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` instances. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/ForOverride.html https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#getImageDecoderFactory(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory` used to build the image renderer. |

## Constants

### DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS

```
public static final long DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS = 5000
```

The default maximum duration for which a video renderer can attempt to seamlessly join an ongoing playback.

### EXTENSION_RENDERER_MODE_OFF

```
public static final int EXTENSION_RENDERER_MODE_OFF = 0
```

Do not allow use of extension renderers.

### EXTENSION_RENDERER_MODE_ON

```
public static final int EXTENSION_RENDERER_MODE_ON = 1
```

Allow use of extension renderers. Extension renderers are indexed after core renderers of the same type. A `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector` that prefers the first suitable renderer will therefore prefer to use a core renderer to an extension renderer in the case that both are able to play a given track.

### EXTENSION_RENDERER_MODE_PREFER

```
public static final int EXTENSION_RENDERER_MODE_PREFER = 2
```

Allow use of extension renderers. Extension renderers are indexed before core renderers of the same type. A `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector` that prefers the first suitable renderer will therefore prefer to use an extension renderer to a core renderer in the case that both are able to play a given track.

### MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY

```
public static final int MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY = 50
```

The maximum number of frames that can be dropped between invocations of `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener#onDroppedFrames(int,long)`.

## Public constructors

### DefaultRenderersFactory

```
public DefaultRenderersFactory(Context context)
```

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

## Public methods

### createRenderers

```
public Renderer[] createRenderers(
    Handler eventHandler,
    VideoRendererEventListener videoRendererEventListener,
    AudioRendererEventListener audioRendererEventListener,
    TextOutput textRendererOutput,
    MetadataOutput metadataRendererOutput
)
```

Builds the `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` instances for an `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/os/Handler.html eventHandler` | A handler to use when invoking event listeners and outputs. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener videoRendererEventListener` | An event listener for video renderers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioRendererEventListener audioRendererEventListener` | An event listener for audio renderers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/text/TextOutput textRendererOutput` | An output for text renderers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/metadata/MetadataOutput metadataRendererOutput` | An output for metadata renderers. |

| Returns |
|---|---|
| `Renderer[]` | The `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer`. |

### createSecondaryRenderer

```
public @Nullable Renderer createSecondaryRenderer(
    Renderer renderer,
    Handler eventHandler,
    VideoRendererEventListener videoRendererEventListener,
    AudioRendererEventListener audioRendererEventListener,
    TextOutput textRendererOutput,
    MetadataOutput metadataRendererOutput
)
```

Provides a secondary `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` instance for an `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` to use for pre-warming.

The created secondary `Renderer` should match its primary in its reported track type support and `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer renderer` | The primary `Renderer` for which to create the backup. |
| `https://developer.android.com/reference/android/os/Handler.html eventHandler` | A handler to use when invoking event listeners and outputs. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener videoRendererEventListener` | An event listener for video renderers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioRendererEventListener audioRendererEventListener` | An event listener for audio renderers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/text/TextOutput textRendererOutput` | An output for text renderers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/metadata/MetadataOutput metadataRendererOutput` | An output for metadata renderers. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` | The `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer`. |

### experimentalSetEnableMediaCodecVideoRendererPrewarming

```
@CanIgnoreReturnValue
@ExperimentalApi
public final DefaultRenderersFactory experimentalSetEnableMediaCodecVideoRendererPrewarming(
    boolean enableMediaCodecVideoRendererPrewarming
)
```

Sets whether a secondary `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` will be created through `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildSecondaryVideoRenderer(androidx.media3.exoplayer.Renderer,android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long)` for use by `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` for pre-warming.

If enabled, `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` will pre-process the video of consecutive media items during playback to reduce media item transition latency.

If `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildVideoRenderers(android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)` is overridden to provide custom video renderers then to still enable pre-warming,`https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildSecondaryVideoRenderer(androidx.media3.exoplayer.Renderer,android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long)` must also be overridden to provide matching secondary custom video renderers.

This method is experimental. Its default value may change, or it may be renamed or removed in a future release.

| Parameters |
|---|---|
| `boolean enableMediaCodecVideoRendererPrewarming` | Whether to enable `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildSecondaryVideoRenderer(androidx.media3.exoplayer.Renderer,android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long)` to provide a secondary `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` for pre-warming. |

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

### experimentalSetLateThresholdToDropDecoderInputUs

```
@CanIgnoreReturnValue
@ExperimentalApi
public final DefaultRenderersFactory experimentalSetLateThresholdToDropDecoderInputUs(
    long lateThresholdToDropDecoderInputUs
)
```

Sets the late threshold for rendered output buffers, in microseconds, after which decoder input buffers may be dropped.

The default value is `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer#DEFAULT_LATE_THRESHOLD_TO_DROP_DECODER_INPUT_US()` and therefore input buffers that are predicted to be rendered late will be dropped.

If `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` is passed, decoder input buffers will not be dropped.

This method is experimental and will be renamed or removed in a future release.

| Parameters |
|---|---|
| `long lateThresholdToDropDecoderInputUs` | The threshold in microseconds to drop decoder input buffers, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` to disable dropping decoder input buffers. |

### experimentalSetMediaCodecAsyncCryptoFlagEnabled

```
@CanIgnoreReturnValue
@ExperimentalApi
public final DefaultRenderersFactory experimentalSetMediaCodecAsyncCryptoFlagEnabled(
    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 when operating the codec in asynchronous mode.

This method is experimental. Its default value may change, or it may be renamed or removed in a future release.

### forceDisableMediaCodecAsynchronousQueueing

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory forceDisableMediaCodecAsynchronousQueueing()
```

Disables `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` instances from operating their `https://developer.android.com/reference/android/media/MediaCodec.html` in asynchronous mode and perform asynchronous queueing. `https://developer.android.com/reference/android/media/MediaCodec.html` instances will be operated synchronous mode.

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

### forceEnableMediaCodecAsynchronousQueueing

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory forceEnableMediaCodecAsynchronousQueueing()
```

Enables `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` instances to operate their `https://developer.android.com/reference/android/media/MediaCodec.html` in asynchronous mode and perform asynchronous queueing.

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

### setAllowedVideoJoiningTimeMs

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory setAllowedVideoJoiningTimeMs(long allowedVideoJoiningTimeMs)
```

Sets the maximum duration for which video renderers can attempt to seamlessly join an ongoing playback.

The default value is `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS()`.

| Parameters |
|---|---|
| `long allowedVideoJoiningTimeMs` | The maximum duration for which video renderers can attempt to seamlessly join an ongoing playback, in milliseconds. |

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

### setEnableAudioFloatOutput

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory setEnableAudioFloatOutput(boolean enableFloatOutput)
```

Sets whether floating point audio should be output when possible.

Enabling floating point output disables audio processing, but may allow for higher quality audio output.

The default value is `false`.

| Parameters |
|---|---|
| `boolean enableFloatOutput` | Whether to enable use of floating point audio output, if available. |

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

### setEnableAudioOutputPlaybackParameters

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory setEnableAudioOutputPlaybackParameters(
    boolean enableAudioOutputPlaybackParameters
)
```

Sets whether to enable setting playback speed via `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioOutput`, using `https://developer.android.com/reference/android/media/AudioTrack.html#setPlaybackParams(android.media.PlaybackParams)` by default, rather than using application-level audio speed adjustment.

If enabled and supported, new playback speed settings will take effect more quickly because they are applied at the audio mixer, rather than at the point of writing data to the output. However, the setting is more device-dependent, less reliable and may offer fewer available speeds.

If the requested speed is not supported the player's event listener will be notified twice on setting playback speed, once with the requested speed, then again with the old playback speed reflecting the fact that the requested speed was not supported.

| Parameters |
|---|---|
| `boolean enableAudioOutputPlaybackParameters` | Whether to enable setting playback speed via `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioOutput`. |

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

### setEnableAudioTrackPlaybackParams

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory [setEnableAudioTrackPlaybackParams](https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setEnableAudioTrackPlaybackParams(boolean))(
    boolean enableAudioTrackPlaybackParams
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#setEnableAudioOutputPlaybackParameters(boolean)` instead.

### setEnableDecoderFallback

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory setEnableDecoderFallback(boolean enableDecoderFallback)
```

Sets whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is less efficient or slower than the primary decoder.

| Parameters |
|---|---|
| `boolean enableDecoderFallback` | Whether to enable fallback to lower-priority decoders if decoder initialization fails. |

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

### setExtensionRendererMode

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory setExtensionRendererMode(
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode
)
```

Sets the extension renderer mode, which determines if and how available extension renderers are used. Note that extensions must be included in the application build for them to be considered available.

The default value is `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#EXTENSION_RENDERER_MODE_OFF()`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |

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

### setMediaCodecSelector

```
@CanIgnoreReturnValue
public final DefaultRenderersFactory setMediaCodecSelector(MediaCodecSelector mediaCodecSelector)
```

Sets a `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector` for use by `https://developer.android.com/reference/android/media/MediaCodec.html` based renderers.

The default value is `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector#DEFAULT()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector` | The `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector`. |

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

### setVideoRendererEarlySchedulingThresholdUs

```
@CanIgnoreReturnValue
@ExperimentalApi
public final DefaultRenderersFactory setVideoRendererEarlySchedulingThresholdUs(
    long videoRendererEarlySchedulingThresholdUs
)
```

Sets the threshold for how early `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` will schedule a frame for release on the surface.

This value is in microseconds. The default value is `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer#DEFAULT_EARLY_SCHEDULING_THRESHOLD_US()`.

This method is experimental and will be renamed or removed in a future release.

| Parameters |
|---|---|
| `long videoRendererEarlySchedulingThresholdUs` | The maximum early time threshold in microseconds. |

## Protected methods

### buildAudioRenderers

```
protected void buildAudioRenderers(
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    MediaCodecSelector mediaCodecSelector,
    boolean enableDecoderFallback,
    AudioSink audioSink,
    Handler eventHandler,
    AudioRendererEventListener eventListener,
    ArrayList<Renderer> out
)
```

Builds audio renderers for use by the player.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector` | A decoder selector. |
| `boolean enableDecoderFallback` | Whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is slower/less efficient than the primary decoder. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink audioSink` | A sink to which the renderers will output. |
| `https://developer.android.com/reference/android/os/Handler.html eventHandler` | A handler to use when invoking event listeners and outputs. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioRendererEventListener eventListener` | An event listener. |
| `https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out` | An array to which the built renderers should be appended. |

### buildAudioSink

```
protected @Nullable AudioSink buildAudioSink(
    Context context,
    boolean enableFloatOutput,
    boolean enableAudioOutputPlaybackParams
)
```

Builds an `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` to which the audio renderers will output.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `boolean enableFloatOutput` | Whether to enable use of floating point audio output, if available. |
| `boolean enableAudioOutputPlaybackParams` | Whether to enable setting playback speed via the `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioOutput`, using `https://developer.android.com/reference/android/media/AudioTrack.html#setPlaybackParams(android.media.PlaybackParams)` by default, if supported. The `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioOutput` speed adjustment is lower latency, but device-dependent, less reliable or may offer fewer available speeds. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` | The `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` to which the audio renderers will output. May be `null` if no audio renderers are required. If `null` is returned then `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildAudioRenderers(android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,androidx.media3.exoplayer.audio.AudioSink,android.os.Handler,androidx.media3.exoplayer.audio.AudioRendererEventListener,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)` will not be called. |

### buildCameraMotionRenderers

```
protected void buildCameraMotionRenderers(
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)
```

Builds camera motion renderers for use by the player.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |
| `https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out` | An array to which the built renderers should be appended. |

### buildImageRenderers

```
protected void [buildImageRenderers](https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildImageRenderers(java.util.ArrayList<androidx.media3.exoplayer.Renderer>))(ArrayList<Renderer> out)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Override `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildImageRenderers(android.content.Context,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)` instead.

### buildImageRenderers

```
protected void buildImageRenderers(Context context, ArrayList<Renderer> out)
```

Builds image renderers for use by the player.

The `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageRenderer` is built with `ImageOutput` set to null and `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory` set to `ImageDecoder.Factory.DEFAULT` by default.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out` | An array to which the built renderers should be appended. |

### buildMetadataRenderers

```
protected void buildMetadataRenderers(
    Context context,
    MetadataOutput output,
    Looper outputLooper,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)
```

Builds metadata renderers for use by the player.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/metadata/MetadataOutput output` | An output for the renderers. |
| `https://developer.android.com/reference/android/os/Looper.html outputLooper` | The looper associated with the thread on which the output should be called. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |
| `https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out` | An array to which the built renderers should be appended. |

### buildMiscellaneousRenderers

```
protected void buildMiscellaneousRenderers(
    Context context,
    Handler eventHandler,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)
```

Builds any miscellaneous renderers used by the player.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `https://developer.android.com/reference/android/os/Handler.html eventHandler` | A handler to use when invoking event listeners and outputs. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |
| `https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out` | An array to which the built renderers should be appended. |

### buildSecondaryVideoRenderer

```
protected @Nullable Renderer buildSecondaryVideoRenderer(
    Renderer renderer,
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    MediaCodecSelector mediaCodecSelector,
    boolean enableDecoderFallback,
    Handler eventHandler,
    VideoRendererEventListener eventListener,
    long allowedVideoJoiningTimeMs
)
```

Builds a secondary video renderer for an `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` instance to use for pre-warming.

The created secondary video `Renderer` should match its primary `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` in reported track type support and `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities`.

If `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory#buildVideoRenderers(android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,android.os.Handler,androidx.media3.exoplayer.video.VideoRendererEventListener,long,java.util.ArrayList<androidx.media3.exoplayer.Renderer>)` is overridden to provide custom video renderers, then this method must also be overridden to supply corresponding custom secondary video renderers.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer renderer` | The primary `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` for which to create the secondary. |
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector` | A decoder selector. |
| `boolean enableDecoderFallback` | Whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is slower/less efficient than the primary decoder. |
| `https://developer.android.com/reference/android/os/Handler.html eventHandler` | A handler associated with the main thread's looper. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener eventListener` | An event listener. |
| `long allowedVideoJoiningTimeMs` | The maximum duration for which video renderers can attempt to seamlessly join an ongoing playback, in milliseconds. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/Renderer` | The created secondary `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer`. |

### buildTextRenderers

```
protected void buildTextRenderers(
    Context context,
    TextOutput output,
    Looper outputLooper,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)
```

Builds text renderers for use by the player.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/text/TextOutput output` | An output for the renderers. |
| `https://developer.android.com/reference/android/os/Looper.html outputLooper` | The looper associated with the thread on which the output should be called. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |
| `https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out` | An array to which the built renderers should be appended. |

### buildVideoRenderers

```
protected void buildVideoRenderers(
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    MediaCodecSelector mediaCodecSelector,
    boolean enableDecoderFallback,
    Handler eventHandler,
    VideoRendererEventListener eventListener,
    long allowedVideoJoiningTimeMs,
    ArrayList<Renderer> out
)
```

Builds video renderers for use by the player.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html` associated with the player. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode` | The extension renderer mode. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector` | A decoder selector. |
| `boolean enableDecoderFallback` | Whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is slower/less efficient than the primary decoder. |
| `https://developer.android.com/reference/android/os/Handler.html eventHandler` | A handler associated with the main thread's looper. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener eventListener` | An event listener. |
| `long allowedVideoJoiningTimeMs` | The maximum duration for which video renderers can attempt to seamlessly join an ongoing playback, in milliseconds. |
| `https://developer.android.com/reference/java/util/ArrayList.html<https://developer.android.com/reference/androidx/media3/exoplayer/Renderer> out` | An array to which the built renderers should be appended. |

### getCodecAdapterFactory

```
protected MediaCodecAdapter.Factory getCodecAdapterFactory()
```

Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory` that will be used when creating `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` instances.

### getImageDecoderFactory

```
@ForOverride
protected ImageDecoder.Factory getImageDecoderFactory(Context context)
```

Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory` used to build the image renderer.