# MediaCodecVideoRenderer.Builder

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

*** ** * ** ***


```
public final class MediaCodecVideoRenderer.Builder
```

<br />

*** ** * ** ***

A builder to create `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` instances.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#Builder(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` Creates a new builder. |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` | `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#build()()` Builds the `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@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/video/MediaCodecVideoRenderer.Builder#experimentalSetLateThresholdToDropDecoderInputUs(long)( long lateThresholdToDropDecoderInputUs )` Sets the late threshold for rendered output buffers, in microseconds, after which decoder input buffers may be dropped. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setAllowedJoiningTimeMs(long)(long allowedJoiningTimeMs)` Sets the maximum duration in milliseconds for which this video renderer can attempt to seamlessly join an ongoing playback. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setAssumedMinimumCodecOperatingRate(float)( float assumedMinimumCodecOperatingRate )` Sets a codec operating rate that all codecs instantiated by this renderer are assumed to meet implicitly (i.e. without the operating rate being set explicitly using `https://developer.android.com/reference/android/media/MediaFormat.html#KEY_OPERATING_RATE`). |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setCodecAdapterFactory(androidx.media3.exoplayer.mediacodec.MediaCodecAdapter.Factory)(https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory codecAdapterFactory)` Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory` used to create `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` instances. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@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/video/MediaCodecVideoRenderer.Builder#setEarlySchedulingThresholdUs(long)(long earlySchedulingThresholdUs)` Sets the threshold for how early a frame may be scheduled for release on the surface. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEnableDecoderFallback(boolean)(boolean enableDecoderFallback)` Sets whether to enable fallback to lower-priority decoders if decoder initialization fails. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventHandler(android.os.Handler)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/os/Handler.html eventHandler)` Sets a handler to use when delivering events to `eventListener`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventListener(androidx.media3.exoplayer.video.VideoRendererEventListener)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener eventListener)` Sets a listener for `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener` events. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setMaxDroppedFramesToNotify(int)(int maxDroppedFramesToNotify)` Sets 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)`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setMediaCodecSelector(androidx.media3.exoplayer.mediacodec.MediaCodecSelector)(https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector mediaCodecSelector)` Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setSkipBuffersWithIdenticalReleaseTime(boolean)( boolean skipBuffersWithIdenticalReleaseTime )` Sets whether to skip buffers that have an identical release time as the previous released buffer. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setVideoSink(androidx.media3.exoplayer.video.VideoSink)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoSink videoSink)` Sets a `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoSink` to consume the frames. |

## Public constructors

### Builder

```
public Builder(Context context)
```

Creates a new builder.

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

## Public methods

### build

```
public MediaCodecVideoRenderer build()
```

Builds the `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer`. Must only be called once per Builder instance.

Throws `https://developer.android.com/reference/java/lang/IllegalStateException.html` if the `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventHandler(android.os.Handler)` and the `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventListener(androidx.media3.exoplayer.video.VideoRendererEventListener)` are neither both `null` nor both non-`
null`.

### experimentalSetLateThresholdToDropDecoderInputUs

```
@CanIgnoreReturnValue
@ExperimentalApi
public MediaCodecVideoRenderer.Builder 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. |

### setAllowedJoiningTimeMs

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setAllowedJoiningTimeMs(long allowedJoiningTimeMs)
```

Sets the maximum duration in milliseconds for which this video renderer can attempt to seamlessly join an ongoing playback.

### setAssumedMinimumCodecOperatingRate

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setAssumedMinimumCodecOperatingRate(
    float assumedMinimumCodecOperatingRate
)
```

Sets a codec operating rate that all codecs instantiated by this renderer are assumed to meet implicitly (i.e. without the operating rate being set explicitly using `https://developer.android.com/reference/android/media/MediaFormat.html#KEY_OPERATING_RATE`).

### setCodecAdapterFactory

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setCodecAdapterFactory(MediaCodecAdapter.Factory codecAdapterFactory)
```

Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory` used to create `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` instances.

### setEarlySchedulingThresholdUs

```
@CanIgnoreReturnValue
@ExperimentalApi
public MediaCodecVideoRenderer.Builder setEarlySchedulingThresholdUs(long earlySchedulingThresholdUs)
```

Sets the threshold for how early a frame may be scheduled 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 earlySchedulingThresholdUs` | The maximum early time threshold in microseconds. |

### setEnableDecoderFallback

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder 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 slower/less efficient than the primary decoder.

### setEventHandler

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setEventHandler(@Nullable Handler eventHandler)
```

Sets a handler to use when delivering events to `eventListener`.

The `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventHandler(android.os.Handler)` and `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventListener(androidx.media3.exoplayer.video.VideoRendererEventListener)` are linked in that both should be set to either `null` or non-`null` values.

### setEventListener

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setEventListener(@Nullable VideoRendererEventListener eventListener)
```

Sets a listener for `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoRendererEventListener` events.

The `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventHandler(android.os.Handler)` and `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder#setEventListener(androidx.media3.exoplayer.video.VideoRendererEventListener)` are linked in that both should be set to either `null` or non-`null` values.

### setMaxDroppedFramesToNotify

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setMaxDroppedFramesToNotify(int maxDroppedFramesToNotify)
```

Sets 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)`.

### setMediaCodecSelector

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setMediaCodecSelector(MediaCodecSelector mediaCodecSelector)
```

Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/mediacodec/MediaCodecSelector`.

### setSkipBuffersWithIdenticalReleaseTime

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setSkipBuffersWithIdenticalReleaseTime(
    boolean skipBuffersWithIdenticalReleaseTime
)
```

Sets whether to skip buffers that have an identical release time as the previous released buffer.

| Parameters |
|---|---|
| `boolean skipBuffersWithIdenticalReleaseTime` | Whether to skip buffers with identical release time. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.Builder` | This builder. |

### setVideoSink

```
@CanIgnoreReturnValue
public MediaCodecVideoRenderer.Builder setVideoSink(@Nullable VideoSink videoSink)
```

Sets a `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoSink` to consume the frames.

If a `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoSink` is not set and effects are `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer#MSG_SET_VIDEO_EFFECTS()`, a `https://developer.android.com/reference/androidx/media3/exoplayer/video/VideoSink` produced by a `https://developer.android.com/reference/androidx/media3/exoplayer/video/PlaybackVideoGraphWrapper` with its default configuration will be used to apply effects and render the frames on the output.