# CompositionPlayer.Builder

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

*** ** * ** ***


```
public final class CompositionPlayer.Builder
```

<br />

*** ** * ** ***

A builder for `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer` instances.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#Builder(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` Creates an instance |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer` | `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#build()()` Builds the `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer` instance. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.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/transformer/CompositionPlayer.Builder#experimentalSetEnableReplayableCache(boolean)(boolean enableReplayableCache)` Sets whether to enable replayable cache. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.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/transformer/CompositionPlayer.Builder#experimentalSetLateThresholdToDropInputUs(long)( long lateThresholdToDropInputUs )` Sets the late threshold for decoded frames, in microseconds, after which frames may be dropped before applying effects. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setAudioAttributes(androidx.media3.common.AudioAttributes,boolean)( https://developer.android.com/reference/androidx/media3/common/AudioAttributes audioAttributes, boolean handleAudioFocus )` Sets `https://developer.android.com/reference/androidx/media3/common/AudioAttributes` that will be used by the player and whether to handle audio focus. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setAudioMixerFactory(androidx.media3.transformer.AudioMixer.Factory)(https://developer.android.com/reference/androidx/media3/transformer/AudioMixer.Factory audioMixerFactory)` Sets the `https://developer.android.com/reference/androidx/media3/transformer/AudioMixer.Factory` to be used when `https://developer.android.com/reference/androidx/media3/transformer/AudioMixer` is needed. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setAudioSink(androidx.media3.exoplayer.audio.AudioSink)(https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink audioSink)` Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` that will be used to play out audio. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://developer.android.com/reference/androidx/annotation/VisibleForTesting @https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setClock(androidx.media3.common.util.Clock)(https://developer.android.com/reference/androidx/media3/common/util/Clock clock)` Sets the `https://developer.android.com/reference/androidx/media3/common/util/Clock` that will be used by the player. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 28) @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/transformer/CompositionPlayer.Builder#setFrameProcessorFactory(androidx.media3.common.video.FrameProcessor.Factory)(https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor.Factory frameProcessorFactory)` Sets the `https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor.Factory` to be used to create `https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor` instances that are used to process `https://developer.android.com/reference/androidx/media3/common/video/HardwareBufferFrame`s. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setGlObjectsProvider(androidx.media3.common.GlObjectsProvider)(https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider glObjectsProvider)` Sets the `https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider` to be used by the effect processing pipeline. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setGlThreadExecutorService(java.util.concurrent.ExecutorService)(https://developer.android.com/reference/java/util/concurrent/ExecutorService.html glExecutorService)` Sets the `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` to execute GL commands from. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setImageDecoderFactory(androidx.media3.exoplayer.image.ImageDecoder.Factory)(https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory imageDecoderFactory)` Sets an `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory` that will create the `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder` instances to decode images. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setLoadControl(androidx.media3.exoplayer.LoadControl)(https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl loadControl)` Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl` that will be used by the player to control buffering of all `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem#mediaItem()` in a `https://developer.android.com/reference/androidx/media3/transformer/Composition`. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setLooper(android.os.Looper)(https://developer.android.com/reference/android/os/Looper.html looper)` Sets the `https://developer.android.com/reference/android/os/Looper.html` from which the player can be accessed and `https://developer.android.com/reference/androidx/media3/common/Player.Listener` callbacks are dispatched too. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setMediaSourceFactory(androidx.media3.exoplayer.source.MediaSource.Factory)(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory mediaSourceFactory)` Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` that \*creates\* the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` for `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem#mediaItem()` in a `https://developer.android.com/reference/androidx/media3/transformer/Composition`. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.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/transformer/CompositionPlayer.Builder#setNativeHardwareBufferHelpers(androidx.media3.effect.HardwareBufferJniWrapper)( https://developer.android.com/reference/androidx/media3/effect/HardwareBufferJniWrapper hardwareBufferJniWrapper )` Sets the `https://developer.android.com/reference/androidx/media3/effect/HardwareBufferJniWrapper` used to provide native helpers. |
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setVideoGraphFactory(androidx.media3.common.VideoGraph.Factory)(https://developer.android.com/reference/androidx/media3/common/VideoGraph.Factory videoGraphFactory)` Sets the `https://developer.android.com/reference/androidx/media3/common/VideoGraph.Factory` that will be used by the player. |

## Public constructors

### Builder

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

Creates an instance

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

## Public methods

### build

```
public CompositionPlayer build()
```

Builds the `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer` instance. Must be called at most once.

If no `https://developer.android.com/reference/android/os/Looper.html` has been called with `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setLooper(android.os.Looper)`, then this method must be called within a `https://developer.android.com/reference/android/os/Looper.html` thread which is the thread that can access the player instance and where `https://developer.android.com/reference/androidx/media3/common/Player.Listener` callbacks are dispatched.

### experimentalSetEnableReplayableCache

```
@CanIgnoreReturnValue
@ExperimentalApi
public CompositionPlayer.Builder experimentalSetEnableReplayableCache(boolean enableReplayableCache)
```

Sets whether to enable replayable cache.

By default, the replayable cache is not enabled. Enable it to achieve accurate effect update, at the cost of using more power and computing resources.

| Parameters |
|---|---|
| `boolean enableReplayableCache` | Whether replayable cache is enabled. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### experimentalSetLateThresholdToDropInputUs

```
@CanIgnoreReturnValue
@ExperimentalApi
public CompositionPlayer.Builder experimentalSetLateThresholdToDropInputUs(
    long lateThresholdToDropInputUs
)
```

Sets the late threshold for decoded frames, in microseconds, after which frames may be dropped before applying effects.

The default value is `https://developer.android.com/reference/androidx/media3/exoplayer/video/PlaybackVideoGraphWrapper#LATE_US_TO_DROP_INPUT_FRAME()`.

Set this threshold to `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` to disable frame dropping before effects are applied.

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

| Parameters |
|---|---|
| `long lateThresholdToDropInputUs` | The threshold. |

### setAudioAttributes

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setAudioAttributes(
    AudioAttributes audioAttributes,
    boolean handleAudioFocus
)
```

Sets `https://developer.android.com/reference/androidx/media3/common/AudioAttributes` that will be used by the player and whether to handle audio focus.

If audio focus should be handled, the `https://developer.android.com/reference/androidx/media3/common/AudioAttributes#usage()` must be `https://developer.android.com/reference/androidx/media3/common/C#USAGE_MEDIA()` or `https://developer.android.com/reference/androidx/media3/common/C#USAGE_GAME()`. Other usages will throw an `https://developer.android.com/reference/java/lang/IllegalArgumentException.html`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/AudioAttributes audioAttributes` | `https://developer.android.com/reference/androidx/media3/common/AudioAttributes`. |
| `boolean handleAudioFocus` | Whether the player should handle audio focus. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder. |

### setAudioMixerFactory

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setAudioMixerFactory(AudioMixer.Factory audioMixerFactory)
```

Sets the `https://developer.android.com/reference/androidx/media3/transformer/AudioMixer.Factory` to be used when `https://developer.android.com/reference/androidx/media3/transformer/AudioMixer` is needed.

The default value is a `https://developer.android.com/reference/androidx/media3/transformer/DefaultAudioMixer.Factory` with default values.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/AudioMixer.Factory audioMixerFactory` | A `https://developer.android.com/reference/androidx/media3/transformer/AudioMixer.Factory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder. |

### setAudioSink

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setAudioSink(AudioSink audioSink)
```

Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` that will be used to play out audio.

By default, a `https://developer.android.com/reference/androidx/media3/exoplayer/audio/DefaultAudioSink` with its default configuration is used.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink audioSink` | The `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### setClock

```
@VisibleForTesting
@CanIgnoreReturnValue
public CompositionPlayer.Builder setClock(Clock clock)
```

Sets the `https://developer.android.com/reference/androidx/media3/common/util/Clock` that will be used by the player.

By default, `https://developer.android.com/reference/androidx/media3/common/util/Clock#DEFAULT()` is used.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/util/Clock clock` | The `https://developer.android.com/reference/androidx/media3/common/util/Clock`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### setFrameProcessorFactory

```
@RequiresApi(value = 28)
@CanIgnoreReturnValue
@ExperimentalApi
public CompositionPlayer.Builder setFrameProcessorFactory(FrameProcessor.Factory frameProcessorFactory)
```

Sets the `https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor.Factory` to be used to create `https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor` instances that are used to process `https://developer.android.com/reference/androidx/media3/common/video/HardwareBufferFrame`s.

If a `https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor.Factory` is not set, a `https://developer.android.com/reference/androidx/media3/effect/SingleInputVideoGraph.Factory` is used and `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer` will not process `https://developer.android.com/reference/androidx/media3/common/video/HardwareBufferFrame`s.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor.Factory frameProcessorFactory` | The `https://developer.android.com/reference/androidx/media3/common/video/FrameProcessor.Factory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if a `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setVideoGraphFactory(androidx.media3.common.VideoGraph.Factory)` is set. |

### setGlObjectsProvider

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setGlObjectsProvider(GlObjectsProvider glObjectsProvider)
```

Sets the `https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider` to be used by the effect processing pipeline.

Setting a `https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider` is no-op if a `https://developer.android.com/reference/androidx/media3/common/VideoGraph.Factory` is `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setVideoGraphFactory(androidx.media3.common.VideoGraph.Factory)`. By default, a `https://developer.android.com/reference/androidx/media3/effect/DefaultGlObjectsProvider` is used.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider glObjectsProvider` | The `https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### setGlThreadExecutorService

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setGlThreadExecutorService(ExecutorService glExecutorService)
```

Sets the `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` to execute GL commands from.

By default, a `https://developer.android.com/reference/androidx/media3/common/util/Util#newSingleThreadScheduledExecutor(java.lang.String)`, owned and `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html#shutdown()` by the effects pipeline is used.

If set, the `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` must be `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html#shutdown()` by the caller after `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer` has been `https://developer.android.com/reference/androidx/media3/common/SimpleBasePlayer#release()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html glExecutorService` | The `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if a `https://developer.android.com/reference/androidx/media3/common/VideoGraph.Factory` is `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setVideoGraphFactory(androidx.media3.common.VideoGraph.Factory)`. |

### setImageDecoderFactory

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setImageDecoderFactory(ImageDecoder.Factory imageDecoderFactory)
```

Sets an `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory` that will create the `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder` instances to decode images.

By default, an instance of `https://developer.android.com/reference/androidx/media3/exoplayer/image/BitmapFactoryImageDecoder.Factory` is used, with a `https://developer.android.com/reference/androidx/media3/exoplayer/image/BitmapFactoryImageDecoder.Factory#setMaxOutputSize(int)` set to be consistent with `https://developer.android.com/reference/androidx/media3/transformer/Transformer`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory imageDecoderFactory` | The `https://developer.android.com/reference/androidx/media3/exoplayer/image/ImageDecoder.Factory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### setLoadControl

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setLoadControl(LoadControl loadControl)
```

Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl` that will be used by the player to control buffering of all `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem#mediaItem()` in a `https://developer.android.com/reference/androidx/media3/transformer/Composition`.

By default, a `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl` is used.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl loadControl` | A `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### setLooper

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setLooper(Looper looper)
```

Sets the `https://developer.android.com/reference/android/os/Looper.html` from which the player can be accessed and `https://developer.android.com/reference/androidx/media3/common/Player.Listener` callbacks are dispatched too.

By default, the builder uses the looper of the thread that calls `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#build()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/os/Looper.html looper` | The `https://developer.android.com/reference/android/os/Looper.html`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### setMediaSourceFactory

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setMediaSourceFactory(MediaSource.Factory mediaSourceFactory)
```

Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` that \*creates\* the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` for `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem#mediaItem()` in a `https://developer.android.com/reference/androidx/media3/transformer/Composition`.

To use an external image loader, one could create a `https://developer.android.com/reference/androidx/media3/exoplayer/source/DefaultMediaSourceFactory`, `https://developer.android.com/reference/androidx/media3/exoplayer/source/DefaultMediaSourceFactory#setExternalImageLoader(androidx.media3.exoplayer.source.ExternalLoader)`, and pass in the `https://developer.android.com/reference/androidx/media3/exoplayer/source/DefaultMediaSourceFactory` here.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory mediaSourceFactory` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

### setNativeHardwareBufferHelpers

```
@CanIgnoreReturnValue
@ExperimentalApi
public CompositionPlayer.Builder setNativeHardwareBufferHelpers(
    HardwareBufferJniWrapper hardwareBufferJniWrapper
)
```

Sets the `https://developer.android.com/reference/androidx/media3/effect/HardwareBufferJniWrapper` used to provide native helpers.

The default value is `https://developer.android.com/reference/androidx/media3/effect/HardwareBufferJni#INSTANCE()`.

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

This will only be used if `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setFrameProcessorFactory(androidx.media3.common.video.FrameProcessor.Factory)` is set.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/effect/HardwareBufferJniWrapper hardwareBufferJniWrapper` | The `https://developer.android.com/reference/androidx/media3/effect/HardwareBufferJniWrapper` to provide native helpers. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder. |

### setVideoGraphFactory

```
@CanIgnoreReturnValue
public CompositionPlayer.Builder setVideoGraphFactory(VideoGraph.Factory videoGraphFactory)
```

Sets the `https://developer.android.com/reference/androidx/media3/common/VideoGraph.Factory` that will be used by the player.

By default, a `https://developer.android.com/reference/androidx/media3/effect/SingleInputVideoGraph.Factory` is used.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/VideoGraph.Factory videoGraphFactory` | The `https://developer.android.com/reference/androidx/media3/common/VideoGraph.Factory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder` | This builder, for convenience. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if an `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` is `https://developer.android.com/reference/androidx/media3/transformer/CompositionPlayer.Builder#setGlThreadExecutorService(java.util.concurrent.ExecutorService)`. |