# BaseRenderer

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

*** ** * ** ***


```
@UnstableApi
abstract class BaseRenderer : Renderer, RendererCapabilities
```

<br />

Known direct subclasses [CameraMotionRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/video/spherical/CameraMotionRenderer), [DecoderAudioRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/DecoderAudioRenderer), [DecoderVideoRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/video/DecoderVideoRenderer), [FakeRenderer](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeRenderer), [ImageRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/image/ImageRenderer), [MediaCodecRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer), [MetadataRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/metadata/MetadataRenderer), [TextRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/text/TextRenderer)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/video/spherical/CameraMotionRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` that parses the camera motion track. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/DecoderAudioRenderer` | Decodes and renders audio using a `https://developer.android.com/reference/kotlin/androidx/media3/decoder/Decoder`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/video/DecoderVideoRenderer` | Decodes and renders video using a `https://developer.android.com/reference/kotlin/androidx/media3/decoder/Decoder`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeRenderer` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` that supports any format with the matching track type. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/image/ImageRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` implementation for images. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` | An abstract renderer that uses `https://developer.android.com/reference/android/media/MediaCodec.html` to decode samples for rendering. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/metadata/MetadataRenderer` | A renderer for metadata. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/text/TextRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` for text. |

Known indirect subclasses [CapturingRenderersFactory.CapturingMediaCodecVideoRenderer](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/robolectric/CapturingRenderersFactory.CapturingMediaCodecVideoRenderer), [FakeAudioRenderer](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAudioRenderer), [FakeMediaClockRenderer](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaClockRenderer), [FakeVideoRenderer](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeVideoRenderer), [MediaCodecAudioRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/MediaCodecAudioRenderer), [MediaCodecVideoRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/video/MediaCodecVideoRenderer)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/robolectric/CapturingRenderersFactory.CapturingMediaCodecVideoRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` that will not skip or drop buffers due to slow processing. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAudioRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeRenderer` that supports `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TRACK_TYPE_AUDIO()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaClockRenderer` | Fake abstract `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` which is also a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeVideoRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeRenderer` that supports `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TRACK_TYPE_VIDEO()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/MediaCodecAudioRenderer` | Decodes and renders audio using `https://developer.android.com/reference/android/media/MediaCodec.html` and an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/AudioSink`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/video/MediaCodecVideoRenderer` | Decodes and renders video using `https://developer.android.com/reference/android/media/MediaCodec.html`. |

*** ** * ** ***

An abstract base class suitable for most `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` implementations.

It converts many of the state transitions explained in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` docs to protected callbacks and provides utilities to access current state values without tracking them manually:

- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onInit()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onEnabled(boolean,boolean)`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onStarted()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onStopped()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onDisabled()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onReset()` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onRelease()` are called for the corresponding `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` method.
- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onStreamChanged(androidx.media3.common.Format[],long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)` is called for both the initial stream set via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#enable(androidx.media3.exoplayer.RendererConfiguration,androidx.media3.common.Format[],androidx.media3.exoplayer.source.SampleStream,long,boolean,boolean,long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)` as well as subsequent streams set via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#replaceStream(androidx.media3.common.Format[],androidx.media3.exoplayer.source.SampleStream,long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)`.
- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onPositionReset(long,boolean,boolean)` is called for the initial reset via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#enable(androidx.media3.exoplayer.RendererConfiguration,androidx.media3.common.Format[],androidx.media3.exoplayer.source.SampleStream,long,boolean,boolean,long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)` as well as subsequent resets via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#resetPosition(long,boolean)`.
- The current `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` can be read with `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#readSource(androidx.media3.exoplayer.FormatHolder,androidx.media3.decoder.DecoderInputBuffer,int)` or skipped with `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#skipSource(long)`. `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#isSourceReady()` returning `true` indicates that samples are available to be read.
- Current state is available with additional getter methods like `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#getLastResetPositionUs()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#getPlayerId()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#getTimeline()`.
- Exceptions can be created with `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#createRendererException(java.lang.Throwable,androidx.media3.common.Format,int)` to fill in additional metadata about the renderer automatically.
- The renderer can call `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onRendererCapabilitiesChanged()` to tell the player of a change in its capabilities, which may lead to new tracks being selected for playback.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#BaseRenderer(int)(@https://developer.android.com/reference/kotlin/androidx/media3/common/C.TrackType trackType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` |

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#clearListener()()` Clears the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#disable()()` Disable the renderer, transitioning it to the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_DISABLED()` state. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#enable(androidx.media3.exoplayer.RendererConfiguration,androidx.media3.common.Format[],androidx.media3.exoplayer.source.SampleStream,long,boolean,boolean,long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)( configuration: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererConfiguration!, formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!, stream: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream!, positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, joining: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, mayRenderStartOfStream: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, offsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId! )` Enables the renderer to consume from the specified `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#getCapabilities()()` Returns the capabilities of the renderer. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#getMediaClock()()` If the renderer advances its own playback position then this method returns a corresponding `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#handleMessage(int,java.lang.Object)(@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer.MessageType messageType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?)` Handles a message delivered to the target. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#hasReadStreamToEnd()()` Returns whether the renderer has read the current `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` to the end. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#init(int,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.common.util.Clock)(index: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, playerId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlayerId!, clock: https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock!)` Initializes the renderer for playback with a player. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#isCurrentStreamFinal()()` Returns whether the current `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` will be the final one supplied before the renderer is next disabled or reset. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#maybeThrowStreamError()()` Throws an error that's preventing the renderer from reading from its `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#release()()` Releases the renderer. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#replaceStream(androidx.media3.common.Format[],androidx.media3.exoplayer.source.SampleStream,long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)( formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!, stream: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream!, startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, offsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId! )` Replaces the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` from which samples will be consumed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#reset()()` Forces the renderer to give up any resources (e.g. media decoders) that it may be holding. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#resetPosition(long,boolean)(positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, sampleStreamIsResetToKeyFrame: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Signals to the renderer that a position discontinuity has occurred. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#setCurrentStreamFinal()()` Signals to the renderer that the current `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` will be the final one supplied before it is next disabled or reset. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#setListener(androidx.media3.exoplayer.RendererCapabilities.Listener)(listener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#start()()` Starts the renderer, meaning that calls to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#render(long,long)` will cause media to be rendered. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#stop()()` Stops the renderer, transitioning it to the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()` state. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#supportsMixedMimeTypeAdaptation()()` Returns the extent to which the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` supports adapting between supported formats that have different MIME types. |

| ### Protected functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#createRendererException(java.lang.Throwable,androidx.media3.common.Format,int)( cause: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-throwable/index.html!, format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format?, @https://developer.android.com/reference/kotlin/androidx/media3/common/PlaybackException.ErrorCode errorCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html )` Creates an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` of type `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException#TYPE_RENDERER()` for this renderer. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#createRendererException(java.lang.Throwable,androidx.media3.common.Format,boolean,int)( cause: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-throwable/index.html!, format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format?, isRecoverable: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, @https://developer.android.com/reference/kotlin/androidx/media3/common/PlaybackException.ErrorCode errorCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html )` Creates an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` of type `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException#TYPE_RENDERER()` for this renderer. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#isSourceReady()()` Returns whether the upstream source is ready. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onDisabled()()` Called when the renderer is disabled. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onEnabled(boolean,boolean)(joining: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, mayRenderStartOfStream: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Called when the renderer is enabled. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onInit()()` Called when the renderer is initialized. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onPositionReset(long,boolean,boolean)( positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, joining: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, sampleStreamIsResetToKeyFrame: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Called when the position is reset. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onRelease()()` Called when the renderer is released. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onRendererCapabilitiesChanged()()` Called when the renderer capabilities are changed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onReset()()` Called when the renderer is reset. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onStarted()()` Called when the renderer is started. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onStopped()()` Called when the renderer is stopped. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onStreamChanged(androidx.media3.common.Format[],long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)( formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!, startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, offsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId! )` Called when the renderer's stream has changed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onTimelineChanged(androidx.media3.common.Timeline)(timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!)` Called when a new timeline is `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#setTimeline(androidx.media3.common.Timeline)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream.ReadDataResult https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#readSource(androidx.media3.exoplayer.FormatHolder,androidx.media3.decoder.DecoderInputBuffer,int)( formatHolder: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/FormatHolder!, buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!, @https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream.ReadFlags readFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html )` Reads from the enabled upstream source. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#skipSource(long)(positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Attempts to skip to the keyframe before the specified position, or to the end of the stream if `positionUs` is beyond it. |

| ### Public properties |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#readingPositionUs()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#state()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#stream()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/C.TrackType https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#trackType()` |

| ### Protected properties |
|---|---|
| `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock!` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#clock()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererConfiguration?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#configuration()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/FormatHolder!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#formatHolder()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#index()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#lastResetPositionUs()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#mediaPeriodId()` |
| `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlayerId!` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#playerId()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#streamEndPositionUs()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#streamFormats()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#streamOffsetUs()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#timeline()` |

### Inherited Constants

From [androidx.media3.exoplayer.Renderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer) `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#DEFAULT_DURATION_TO_PROGRESS_US() = 10000`

Default minimum duration that the playback clock must advance before `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#render(long,long)` can make progress.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#DEFAULT_IDLE_DURATION_TO_PROGRESS_US() = 1000000`

Default duration to progress reported if the renderer does not need calls to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#render(long,long)` to progress, if it's in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()` and already `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#isReady()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#isEnded()`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_CUSTOM_BASE() = 10000`

Applications or extensions may define custom `MSG_*` constants that can be passed to renderers.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_AUDIO_ATTRIBUTES() = 3`

A type of a message that can be passed to an audio renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_AUDIO_OUTPUT_PROVIDER() = 20`

The type of a message that can be passed to audio renderers via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_AUDIO_SESSION_ID() = 10`

The type of a message that can be passed to audio and video renderers via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_AUX_EFFECT_INFO() = 6`

A type of a message that can be passed to an audio renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_CAMERA_MOTION_LISTENER() = 8`

The type of a message that can be passed to a camera motion renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_CHANGE_FRAME_RATE_STRATEGY() = 5`

The type of a message that can be passed to a video renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_CODEC_PARAMETERS() = 21`

The type of a message that can be passed to renderers via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_IMAGE_METADATA_LISTENER() = 23`

The type of a message that can be passed to an image renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_IMAGE_OUTPUT() = 15`

The type of message that can be passed to an image renderer to set a desired image output.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_PREFERRED_AUDIO_DEVICE() = 12`

The type of a message that can be passed to audio renderers via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_PRIORITY() = 16`

The type of message that can be passed to a renderer to set its priority.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_SCALING_MODE() = 4`

The type of a message that can be passed to a `https://developer.android.com/reference/android/media/MediaCodec.html`-based video renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_SCRUBBING_MODE() = 18`

The type of message that can be passed to a renderer to direct it to enable or disable scrubbing mode.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_SKIP_SILENCE_ENABLED() = 9`

The type of a message that can be passed to an audio renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_SUBSCRIBED_CODEC_PARAMETER_KEYS() = 22`

A message to set the keys for which a renderer should report parameter changes.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_VIDEO_EFFECTS() = 13`

The type of a message that can be passed to a video renderer.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_VIDEO_FRAME_METADATA_LISTENER() = 7`

The type of a message that can be passed to a video renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_VIDEO_OUTPUT() = 1`

The type of a message that can be passed to a video renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_VIDEO_OUTPUT_RESOLUTION() = 14`

The type of a message that can be passed to a video renderer to set the desired output resolution.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_VIRTUAL_DEVICE_ID() = 19`

The type of a message that can be passed to audio renderers via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_VOLUME() = 2`

A type of a message that can be passed to an audio renderer via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_SET_WAKEUP_LISTENER() = 11`

The type of a message that can be passed to a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)`, to inform the renderer that it can schedule waking up another component.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#MSG_TRANSFER_RESOURCES() = 17`

The type of message that can be passed to a renderer to direct it to transfer relevant resources to another renderer.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_DISABLED() = 0`

The renderer is disabled.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED() = 1`

The renderer is enabled but not started.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED() = 2`

The renderer is started.
From [androidx.media3.exoplayer.RendererCapabilities](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities) `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#ADAPTIVE_NOT_SEAMLESS() = 8`

The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` can adapt between formats, but may suffer a brief discontinuity (\~50-100ms) when adaptation occurs.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#ADAPTIVE_NOT_SUPPORTED() = 0`

The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` does not support adaptation between formats.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#ADAPTIVE_SEAMLESS() = 16`

The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` can seamlessly adapt between formats.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#ADAPTIVE_SUPPORT_MASK() = 24`

A mask to apply to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` to obtain the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` only.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#AUDIO_OFFLOAD_GAPLESS_SUPPORTED() = 1024`

The renderer supports audio offload and gapless transitions with this format.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#AUDIO_OFFLOAD_NOT_SUPPORTED() = 0`

Audio offload is not supported with this format.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#AUDIO_OFFLOAD_SPEED_CHANGE_SUPPORTED() = 2048`

The renderer supports audio offload and speed changes with this format.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#AUDIO_OFFLOAD_SUPPORTED() = 512`

The renderer supports audio offload with this format.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#AUDIO_OFFLOAD_SUPPORT_MASK() = 3584`

A mask to apply to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` to obtain `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AudioOffloadSupport` only.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#DECODER_SUPPORT_FALLBACK() = 0`

The format exceeds the primary decoder's capabilities but is supported by fallback decoder
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#DECODER_SUPPORT_FALLBACK_MIMETYPE() = 256`

The format's MIME type is unsupported and the renderer may use a decoder for a fallback MIME type.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#DECODER_SUPPORT_MASK() = 384`

A mask to apply to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` to obtain `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.DecoderSupport` only.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#DECODER_SUPPORT_PRIMARY() = 128`

The renderer is able to use the primary decoder for the format's MIME type.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#FORMAT_SUPPORT_MASK() = 7`

A mask to apply to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` to obtain the `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport` only.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#HARDWARE_ACCELERATION_NOT_SUPPORTED() = 0`

The renderer is not able to use hardware acceleration.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#HARDWARE_ACCELERATION_SUPPORTED() = 64`

The renderer is able to use hardware acceleration.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#HARDWARE_ACCELERATION_SUPPORT_MASK() = 64`

A mask to apply to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` to obtain `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.HardwareAccelerationSupport` only.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#TUNNELING_NOT_SUPPORTED() = 0`

The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` does not support tunneled output.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#TUNNELING_SUPPORTED() = 32`

The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` supports tunneled output.
`const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#TUNNELING_SUPPORT_MASK() = 32`

A mask to apply to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` to obtain `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport` only.

### Inherited functions

From [androidx.media3.exoplayer.Renderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#enableMayRenderStartOfStream()()`

Enables this renderer to render the start of the stream even if the state is not `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()` yet.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#getDurationToProgressUs(long,long)(positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)`

Returns minimum amount of playback clock time that must pass from `elapsedRealtimeUs` in order for the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#render(long,long)` call to make progress.
`abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#getName()()`

Returns the name of this renderer, for logging and debugging purposes.
`abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#isEnded()()`

Whether the renderer is ready for the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` instance to transition to `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#STATE_ENDED()`.
`abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#isReady()()`

Whether the renderer is able to immediately render media from the current position.
`abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#render(long,long)(positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)`

Incrementally renders the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#setPlaybackSpeed(float,float)(currentPlaybackSpeed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, targetPlaybackSpeed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html)`

Indicates the playback speed to this renderer.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#supportsResetPositionWithoutKeyFrameReset(long)(positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)`

Returns whether the renderer can support processing a position discontinuity without a key frame reset.
From [androidx.media3.exoplayer.RendererCapabilities](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities) `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#create(int)(@https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport formatSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Returns `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for the given `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#create(int,int,int)(
@https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport formatSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport adaptiveSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport tunnelingSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)`

Returns `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` combining the given `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#create(int,int,int,int)(
@https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport formatSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport adaptiveSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport tunnelingSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AudioOffloadSupport audioOffloadSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)`

Returns `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` combining the given `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport`, and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AudioOffloadSupport`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#create(int,int,int,int,int)(
@https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport formatSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport adaptiveSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport tunnelingSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.HardwareAccelerationSupport hardwareAccelerationSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.DecoderSupport decoderSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)`

Returns `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` combining the given `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.HardwareAccelerationSupport`, and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.DecoderSupport`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#create(int,int,int,int,int,int)(
@https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport formatSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport adaptiveSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport tunnelingSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.HardwareAccelerationSupport hardwareAccelerationSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.DecoderSupport decoderSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AudioOffloadSupport audioOffloadSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)`

Returns `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` combining the given `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.HardwareAccelerationSupport`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.DecoderSupport` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AudioOffloadSupport`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#getAdaptiveSupport(int)(@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities supportFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` from the combined `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AudioOffloadSupport
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#getAudioOffloadSupport(int)(
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities supportFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)`

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AudioOffloadSupport` from the combined `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.DecoderSupport
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#getDecoderSupport(int)(@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities supportFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.DecoderSupport` from the combined `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#getFormatSupport(int)(@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities supportFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport` from the combined `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.HardwareAccelerationSupport
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#getHardwareAccelerationSupport(int)(
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities supportFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html
)`

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.HardwareAccelerationSupport` from the combined `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#getTunnelingSupport(int)(@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities supportFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.TunnelingSupport` from the combined `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities`.
`java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#isFormatSupported(int,boolean)(
@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities supportFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,
allowExceedsCapabilities: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html
)`

Returns whether the `https://developer.android.com/reference/kotlin/androidx/media3/common/C.FormatSupport` from the combined `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` indicates the format is supported.
`abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#supportsFormat(androidx.media3.common.Format)(format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!)`

Returns the extent to which the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` supports a given format.

## Public constructors

### BaseRenderer

```
BaseRenderer(@C.TrackType trackType: Int)
```

| Parameters |
|---|---|
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/C.TrackType trackType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The track type that the renderer handles. One of the `https://developer.android.com/reference/kotlin/androidx/media3/common/C`` TRACK_TYPE_*` constants. |

## Public functions

### clearListener

```
fun clearListener(): Unit
```

Clears the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener`.

### disable

```
fun disable(): Unit
```

Disable the renderer, transitioning it to the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_DISABLED()` state.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`.

### enable

```
fun enable(
    configuration: RendererConfiguration!,
    formats: Array<Format!>!,
    stream: SampleStream!,
    positionUs: Long,
    joining: Boolean,
    mayRenderStartOfStream: Boolean,
    startPositionUs: Long,
    offsetUs: Long,
    mediaPeriodId: MediaSource.MediaPeriodId!
): Unit
```

Enables the renderer to consume from the specified `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream`.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_DISABLED()`.

| Parameters |
|---|---|
| `configuration: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererConfiguration!` | The renderer configuration. |
| `formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!` | The enabled formats. |
| `stream: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` from which the renderer should consume. |
| `positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The player's current position. |
| `joining: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether this renderer is being enabled to join an ongoing playback. |
| `mayRenderStartOfStream: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether this renderer is allowed to render the start of the stream even if the state is not `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()` yet. |
| `startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The start position of the stream in renderer time (microseconds). |
| `offsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The offset to be added to timestamps of buffers read from `stream` before they are rendered. |
| `mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` producing the ` stream`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

### getCapabilities

```
fun getCapabilities(): RendererCapabilities!
```

Returns the capabilities of the renderer.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities!` | The capabilities of the renderer. |

### getMediaClock

```
fun getMediaClock(): MediaClock?
```

If the renderer advances its own playback position then this method returns a corresponding `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock`. If provided, the player will use the returned `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock` as its source of time during playback. A player may have at most one renderer that returns a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock` from this method.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock?` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock` tracking the playback position of the renderer, or null. |

### handleMessage

```
fun handleMessage(@Renderer.MessageType messageType: Int, message: Any?): Unit
```

Handles a message delivered to the target.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer.MessageType messageType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The message type. |
| `message: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | The message payload. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurred whilst handling the message. Should only be thrown by targets that handle messages on the playback thread. |

### hasReadStreamToEnd

```
fun hasReadStreamToEnd(): Boolean
```

Returns whether the renderer has read the current `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` to the end.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

### init

```
fun init(index: Int, playerId: PlayerId!, clock: Clock!): Unit
```

Initializes the renderer for playback with a player.

| Parameters |
|---|---|
| `index: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The renderer index within the player. |
| `playerId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlayerId!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlayerId` of the player. |
| `clock: https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock`. |

### isCurrentStreamFinal

```
fun isCurrentStreamFinal(): Boolean
```

Returns whether the current `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` will be the final one supplied before the renderer is next disabled or reset.

### maybeThrowStreamError

```
fun maybeThrowStreamError(): Unit
```

Throws an error that's preventing the renderer from reading from its `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream`. Does nothing if no such error exists.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | An error that's preventing the renderer from making progress or buffering more data. |

### release

```
fun release(): Unit
```

Releases the renderer.

The renderer must not be used after calling this method.

### replaceStream

```
fun replaceStream(
    formats: Array<Format!>!,
    stream: SampleStream!,
    startPositionUs: Long,
    offsetUs: Long,
    mediaPeriodId: MediaSource.MediaPeriodId!
): Unit
```

Replaces the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` from which samples will be consumed.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

| Parameters |
|---|---|
| `formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!` | The enabled formats. |
| `stream: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` from which the renderer should consume. |
| `startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The start position of the new stream in renderer time (microseconds). |
| `offsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The offset to be added to timestamps of buffers read from `stream` before they are rendered. |
| `mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` producing the ` stream`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

### reset

```
fun reset(): Unit
```

Forces the renderer to give up any resources (e.g. media decoders) that it may be holding. If the renderer is not holding any resources, the call is a no-op.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_DISABLED()`.

### resetPosition

```
fun resetPosition(positionUs: Long, sampleStreamIsResetToKeyFrame: Boolean): Unit
```

Signals to the renderer that a position discontinuity has occurred.

If `sampleStreamIsResetToKeyFrame` is `true` then after the position discontinuity, the renderer's `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` is guaranteed to provide samples starting from a key frame.

`sampleStreamIsResetToKeyFrame` is guaranteed to be `true` unless the implementation overrides `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#supportsResetPositionWithoutKeyFrameReset(long)` to return `true`.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

| Parameters |
|---|---|
| `positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The new playback position in microseconds. |
| `sampleStreamIsResetToKeyFrame: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the renderer's `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` is guaranteed to provide samples starting from a key frame. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs handling the reset. |

### setCurrentStreamFinal

```
fun setCurrentStreamFinal(): Unit
```

Signals to the renderer that the current `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` will be the final one supplied before it is next disabled or reset.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

### setListener

```
fun setListener(listener: RendererCapabilities.Listener!): Unit
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener`.

| Parameters |
|---|---|
| `listener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener!` | The listener to be set. |

### start

```
fun start(): Unit
```

Starts the renderer, meaning that calls to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#render(long,long)` will cause media to be rendered.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`.

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

### stop

```
fun stop(): Unit
```

Stops the renderer, transitioning it to the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()` state.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

### supportsMixedMimeTypeAdaptation

```
@RendererCapabilities.AdaptiveSupport
fun supportsMixedMimeTypeAdaptation(): Int
```

Returns the extent to which the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` supports adapting between supported formats that have different MIME types.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` for adapting between supported formats that have different MIME types. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

## Protected functions

### createRendererException

```
protected fun createRendererException(
    cause: Throwable!,
    format: Format?,
    @PlaybackException.ErrorCode errorCode: Int
): ExoPlaybackException!
```

Creates an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` of type `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException#TYPE_RENDERER()` for this renderer.

| Parameters |
|---|---|
| `cause: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-throwable/index.html!` | The cause of the exception. |
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format?` | The current format used by the renderer. May be null. |
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/PlaybackException.ErrorCode errorCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | A `https://developer.android.com/reference/kotlin/androidx/media3/common/PlaybackException.ErrorCode` to identify the cause of the playback failure. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException!` | The created instance, in which `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException#isRecoverable()` is ` false`. |

### createRendererException

```
protected fun createRendererException(
    cause: Throwable!,
    format: Format?,
    isRecoverable: Boolean,
    @PlaybackException.ErrorCode errorCode: Int
): ExoPlaybackException!
```

Creates an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` of type `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException#TYPE_RENDERER()` for this renderer.

| Parameters |
|---|---|
| `cause: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-throwable/index.html!` | The cause of the exception. |
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format?` | The current format used by the renderer. May be null. |
| `isRecoverable: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | If the error is recoverable by disabling and re-enabling the renderer. |
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/PlaybackException.ErrorCode errorCode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | A `https://developer.android.com/reference/kotlin/androidx/media3/common/PlaybackException.ErrorCode` to identify the cause of the playback failure. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException!` | The created instance. |

### isSourceReady

```
protected fun isSourceReady(): Boolean
```

Returns whether the upstream source is ready.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

### onDisabled

```
protected fun onDisabled(): Unit
```

Called when the renderer is disabled.

The default implementation is a no-op.

### onEnabled

```
protected fun onEnabled(joining: Boolean, mayRenderStartOfStream: Boolean): Unit
```

Called when the renderer is enabled.

The default implementation is a no-op.

| Parameters |
|---|---|
| `joining: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether this renderer is being enabled to join an ongoing playback. |
| `mayRenderStartOfStream: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether this renderer is allowed to render the start of the stream even if the state is not `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()` yet. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

### onInit

```
protected fun onInit(): Unit
```

Called when the renderer is initialized.

### onPositionReset

```
protected fun onPositionReset(
    positionUs: Long,
    joining: Boolean,
    sampleStreamIsResetToKeyFrame: Boolean
): Unit
```

Called when the position is reset. This occurs when the renderer is enabled after `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onStreamChanged(androidx.media3.common.Format[],long,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)` has been called, and also when a position discontinuity is encountered.

After a position reset, the renderer's `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` is guaranteed to provide samples starting from a key frame if `sampleStreamIsResetToKeyFrame` is `true`. `
sampleStreamIsResetToKeyFrame` is guaranteed to be `true` unless the implementation overrides `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#supportsResetPositionWithoutKeyFrameReset(long)` to return `
true`.

The default implementation is a no-op.

| Parameters |
|---|---|
| `positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The new playback position in microseconds. |
| `joining: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether this renderer is being enabled to join an ongoing playback. |
| `sampleStreamIsResetToKeyFrame: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the renderer's `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` is guaranteed to provide samples starting from a key frame. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

### onRelease

```
protected fun onRelease(): Unit
```

Called when the renderer is released.

The default implementation is a no-op.

### onRendererCapabilitiesChanged

```
protected fun onRendererCapabilitiesChanged(): Unit
```

Called when the renderer capabilities are changed.

### onReset

```
protected fun onReset(): Unit
```

Called when the renderer is reset.

The default implementation is a no-op.

### onStarted

```
protected fun onStarted(): Unit
```

Called when the renderer is started.

The default implementation is a no-op.

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

### onStopped

```
protected fun onStopped(): Unit
```

Called when the renderer is stopped.

The default implementation is a no-op.

### onStreamChanged

```
protected fun onStreamChanged(
    formats: Array<Format!>!,
    startPositionUs: Long,
    offsetUs: Long,
    mediaPeriodId: MediaSource.MediaPeriodId!
): Unit
```

Called when the renderer's stream has changed. This occurs when the renderer is enabled after `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#onEnabled(boolean,boolean)` has been called, and also when the stream has been replaced whilst the renderer is enabled or started.

The default implementation is a no-op.

| Parameters |
|---|---|
| `formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!` | The enabled formats. |
| `startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The start position of the new stream in renderer time (microseconds). |
| `offsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The offset that will be added to the timestamps of buffers read via `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#readSource(androidx.media3.exoplayer.FormatHolder,androidx.media3.decoder.DecoderInputBuffer,int)` so that decoder input buffers have monotonically increasing timestamps. |
| `mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` that produces the stream. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs. |

### onTimelineChanged

```
protected fun onTimelineChanged(timeline: Timeline!): Unit
```

Called when a new timeline is `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#setTimeline(androidx.media3.common.Timeline)`.

The default implementation is a no-op.

| Parameters |
|---|---|
| `timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!` | The new timeline, which can also be obtained from `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#getTimeline()`. |

### readSource

```
@SampleStream.ReadDataResult
protected fun readSource(
    formatHolder: FormatHolder!,
    buffer: DecoderInputBuffer!,
    @SampleStream.ReadFlags readFlags: Int
): Int
```

Reads from the enabled upstream source. If the upstream source has been read to the end then `https://developer.android.com/reference/kotlin/androidx/media3/common/C#RESULT_BUFFER_READ()` is only returned if `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer#setCurrentStreamFinal()` has been called. `https://developer.android.com/reference/kotlin/androidx/media3/common/C#RESULT_NOTHING_READ()` is returned otherwise.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

Value is one of the following:

- `C.RESULT_NOTHING_READ`
- `C.RESULT_FORMAT_READ`
- `C.RESULT_BUFFER_READ`

<br />

| Parameters |
|---|---|
| `formatHolder: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/FormatHolder!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/FormatHolder` to populate in the case of reading a format. |
| `buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!` | A `https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer` to populate in the case of reading a sample or the end of the stream. If the end of the stream has been reached, the `https://developer.android.com/reference/kotlin/androidx/media3/common/C#BUFFER_FLAG_END_OF_STREAM()` flag will be set on the buffer. |
| `@https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream.ReadFlags readFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | Flags controlling the behavior of this read operation. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream.ReadDataResult` of the read operation. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer.InsufficientCapacityException` | If the `buffer` has insufficient capacity to hold the data of a sample being read. The buffer `https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer#timeUs()` and flags are populated if this exception is thrown, but the read position is not advanced. |

### skipSource

```
protected fun skipSource(positionUs: Long): Int
```

Attempts to skip to the keyframe before the specified position, or to the end of the stream if `positionUs` is beyond it.

This method may be called when the renderer is in the following states: `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`.

| Parameters |
|---|---|
| `positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The position in microseconds. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The number of samples that were skipped. |

## Public properties

### readingPositionUs

```
val readingPositionUs: Long
```

### state

```
val state: Int
```

### stream

```
val stream: SampleStream?
```

### trackType

```
@C.TrackType
val trackType: Int
```

## Protected properties

### clock

```
@MonotonicNonNull
protected val clock: @MonotonicNonNull Clock!
```

### configuration

```
protected val configuration: RendererConfiguration?
```

### formatHolder

```
protected val formatHolder: FormatHolder!
```

### index

```
protected val index: Int
```

### lastResetPositionUs

```
protected val lastResetPositionUs: Long
```

### mediaPeriodId

```
protected val mediaPeriodId: MediaSource.MediaPeriodId?
```

### playerId

```
@MonotonicNonNull
protected val playerId: @MonotonicNonNull PlayerId!
```

### streamEndPositionUs

```
protected val streamEndPositionUs: Long
```

### streamFormats

```
protected val streamFormats: Array<Format!>?
```

### streamOffsetUs

```
protected val streamOffsetUs: Long
```

### timeline

```
protected var timeline: Timeline!
```