# 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)

*** ** * ** ***


```
class CompositionPlayer.Builder
```

<br />

*** ** * ** ***

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

## Summary

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

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

## Public constructors

### Builder

```
Builder(context: Context!)
```

Creates an instance

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

## Public functions

### build

```
fun build(): CompositionPlayer!
```

Builds the `https://developer.android.com/reference/kotlin/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/kotlin/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/kotlin/androidx/media3/common/Player.Listener` callbacks are dispatched.

### experimentalSetEnableReplayableCache

```
@CanIgnoreReturnValue
@ExperimentalApi
fun experimentalSetEnableReplayableCache(enableReplayableCache: Boolean): CompositionPlayer.Builder!
```

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 |
|---|---|
| `enableReplayableCache: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether replayable cache is enabled. |

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

### experimentalSetLateThresholdToDropInputUs

```
@CanIgnoreReturnValue
@ExperimentalApi
fun experimentalSetLateThresholdToDropInputUs(
    lateThresholdToDropInputUs: Long
): CompositionPlayer.Builder!
```

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/kotlin/androidx/media3/exoplayer/video/PlaybackVideoGraphWrapper#LATE_US_TO_DROP_INPUT_FRAME()`.

Set this threshold to `https://developer.android.com/reference/kotlin/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 |
|---|---|
| `lateThresholdToDropInputUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The threshold. |

### setAudioAttributes

```
@CanIgnoreReturnValue
fun setAudioAttributes(
    audioAttributes: AudioAttributes!,
    handleAudioFocus: Boolean
): CompositionPlayer.Builder!
```

Sets `https://developer.android.com/reference/kotlin/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/kotlin/androidx/media3/common/AudioAttributes#usage()` must be `https://developer.android.com/reference/kotlin/androidx/media3/common/C#USAGE_MEDIA()` or `https://developer.android.com/reference/kotlin/androidx/media3/common/C#USAGE_GAME()`. Other usages will throw an `https://developer.android.com/reference/java/lang/IllegalArgumentException.html`.

| Parameters |
|---|---|
| `audioAttributes: https://developer.android.com/reference/kotlin/androidx/media3/common/AudioAttributes!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/AudioAttributes`. |
| `handleAudioFocus: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the player should handle audio focus. |

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

### setAudioMixerFactory

```
@CanIgnoreReturnValue
fun setAudioMixerFactory(audioMixerFactory: AudioMixer.Factory!): CompositionPlayer.Builder!
```

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

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

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

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

### setAudioSink

```
@CanIgnoreReturnValue
fun setAudioSink(audioSink: AudioSink!): CompositionPlayer.Builder!
```

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

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

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

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

### setClock

```
@VisibleForTesting
@CanIgnoreReturnValue
fun setClock(clock: Clock!): CompositionPlayer.Builder!
```

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

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

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

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

### setFrameProcessorFactory

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

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

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

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

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

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

### setGlObjectsProvider

```
@CanIgnoreReturnValue
fun setGlObjectsProvider(glObjectsProvider: GlObjectsProvider!): CompositionPlayer.Builder!
```

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

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

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

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

### setGlThreadExecutorService

```
@CanIgnoreReturnValue
fun setGlThreadExecutorService(glExecutorService: ExecutorService!): CompositionPlayer.Builder!
```

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/kotlin/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/kotlin/androidx/media3/transformer/CompositionPlayer` has been `https://developer.android.com/reference/kotlin/androidx/media3/common/SimpleBasePlayer#release()`.

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

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/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/kotlin/androidx/media3/common/VideoGraph.Factory` is `https://developer.android.com/reference/kotlin/androidx/media3/transformer/CompositionPlayer.Builder#setVideoGraphFactory(androidx.media3.common.VideoGraph.Factory)`. |

### setImageDecoderFactory

```
@CanIgnoreReturnValue
fun setImageDecoderFactory(imageDecoderFactory: ImageDecoder.Factory!): CompositionPlayer.Builder!
```

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

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

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

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

### setLoadControl

```
@CanIgnoreReturnValue
fun setLoadControl(loadControl: LoadControl!): CompositionPlayer.Builder!
```

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

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

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

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

### setLooper

```
@CanIgnoreReturnValue
fun setLooper(looper: Looper!): CompositionPlayer.Builder!
```

Sets the `https://developer.android.com/reference/android/os/Looper.html` from which the player can be accessed and `https://developer.android.com/reference/kotlin/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/kotlin/androidx/media3/transformer/CompositionPlayer.Builder#build()`.

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

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

### setMediaSourceFactory

```
@CanIgnoreReturnValue
fun setMediaSourceFactory(mediaSourceFactory: MediaSource.Factory!): CompositionPlayer.Builder!
```

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

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

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

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

### setNativeHardwareBufferHelpers

```
@CanIgnoreReturnValue
@ExperimentalApi
fun setNativeHardwareBufferHelpers(
    hardwareBufferJniWrapper: HardwareBufferJniWrapper!
): CompositionPlayer.Builder!
```

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

The default value is `https://developer.android.com/reference/kotlin/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/kotlin/androidx/media3/transformer/CompositionPlayer.Builder#setFrameProcessorFactory(androidx.media3.common.video.FrameProcessor.Factory)` is set.

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

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

### setVideoGraphFactory

```
@CanIgnoreReturnValue
fun setVideoGraphFactory(videoGraphFactory: VideoGraph.Factory!): CompositionPlayer.Builder!
```

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

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

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

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/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/kotlin/androidx/media3/transformer/CompositionPlayer.Builder#setGlThreadExecutorService(java.util.concurrent.ExecutorService)`. |