# MediaCodecRenderer

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

*** ** * ** ***


```
@UnstableApi
abstract class MediaCodecRenderer : BaseRenderer
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.media3.exoplayer.BaseRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer) ||
|   | ↳ | [androidx.media3.exoplayer.mediacodec.MediaCodecRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer) |

Known direct subclasses [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/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`. |

Known indirect subclasses [CapturingRenderersFactory.CapturingMediaCodecVideoRenderer](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/robolectric/CapturingRenderersFactory.CapturingMediaCodecVideoRenderer)

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

*** ** * ** ***

An abstract renderer that uses `https://developer.android.com/reference/android/media/MediaCodec.html` to decode samples for rendering.

## Summary

| ### Nested types |
|---|
| `class https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer.DecoderInitializationException : https://developer.android.com/reference/java/lang/Exception.html` Thrown when a failure occurs instantiating a decoder. |

| ### Constants |
|---|---|
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#CODEC_OPERATING_RATE_UNSET() = -1.0f` Indicates no codec operating rate should be set. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#DEBUG_LOG_ENABLED() = false` Compile-time flag to enable detailed logging for codec interactions. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#DEBUG_LOG_TAG() = "MCRdebug"` Logging tag that should be used for all `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#DEBUG_LOG_ENABLED()` logs. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#MediaCodecRenderer(android.content.Context,int,androidx.media3.exoplayer.mediacodec.MediaCodecAdapter.Factory,androidx.media3.exoplayer.mediacodec.MediaCodecSelector,boolean,float)( context: https://developer.android.com/reference/android/content/Context.html!, @https://developer.android.com/reference/kotlin/androidx/media3/common/C.TrackType trackType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, codecAdapterFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory!, mediaCodecSelector: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecSelector!, enableDecoderFallback: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, assumedMinimumCodecOperatingRate: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html )` |

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#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. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#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/mediacodec/MediaCodecRenderer#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()`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#isReady()()` Whether the renderer is able to immediately render media from the current position. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#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/mediacodec/MediaCodecRenderer#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/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#setRenderTimeLimitMs(long)(renderTimeLimitMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Sets a limit on the time a single `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#render(long,long)` call can spend draining and filling the decoder. |
| `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/mediacodec/MediaCodecRenderer#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. |
| `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/mediacodec/MediaCodecRenderer#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://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#applyCodecParametersToMediaFormat(android.media.MediaFormat)(mediaFormat: https://developer.android.com/reference/android/media/MediaFormat.html!)` Applies the currently active `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/CodecParameters` to the given `https://developer.android.com/reference/android/media/MediaFormat.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DecoderReuseEvaluation!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#canReuseCodec(androidx.media3.exoplayer.mediacodec.MediaCodecInfo,androidx.media3.common.Format,androidx.media3.common.Format,boolean)( codecInfo: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo!, oldFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!, newFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!, isAdaptiveFormatChange: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Evaluates whether the existing `https://developer.android.com/reference/android/media/MediaCodec.html` can be kept for a new `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`, and if it can, whether it requires reconfiguration. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecDecoderException!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#createDecoderException(java.lang.Throwable,androidx.media3.exoplayer.mediacodec.MediaCodecInfo)(cause: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-throwable/index.html!, codecInfo: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo?)` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#flushOrReinitializeCodec()()` Flushes the codec. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getCodecBufferFlags(androidx.media3.decoder.DecoderInputBuffer)(buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!)` Returns the flags that should be set on `https://developer.android.com/reference/android/media/MediaCodec.html#queueInputBuffer(int, int, int, long, int)` or `https://developer.android.com/reference/android/media/MediaCodec.html#queueSecureInputBuffer(int, int, android.media.MediaCodec.CryptoInfo, long, int)` for this buffer. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getCodecOperatingRateV23(float,androidx.media3.common.Format,androidx.media3.common.Format[])( targetPlaybackSpeed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!, streamFormats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>! )` Returns the `https://developer.android.com/reference/android/media/MediaFormat.html#KEY_OPERATING_RATE` value for a given playback speed, current `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` and set of possible stream formats. |
| `abstract (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo!>!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getDecoderInfos(androidx.media3.exoplayer.mediacodec.MediaCodecSelector,androidx.media3.common.Format,boolean)( mediaCodecSelector: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecSelector!, format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!, requiresSecureDecoder: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Returns a list of decoders that can decode media in the specified format, in priority order. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getDurationToProgressUs(long,long,boolean)( positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, isOnBufferAvailableListenerRegistered: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Returns minimum time playback must advance in order for the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#render(long,long)` call to make progress. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getLastBufferInStreamPresentationTimeUs()()` Returns the presentation time of the last buffer in the stream. |
| `abstract https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getMediaCodecConfiguration(androidx.media3.exoplayer.mediacodec.MediaCodecInfo,androidx.media3.common.Format,android.media.MediaCrypto,float)( codecInfo: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo!, format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!, crypto: https://developer.android.com/reference/android/media/MediaCrypto.html?, codecOperatingRate: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html )` Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration` that will be used to create and configure a `https://developer.android.com/reference/android/media/MediaCodec.html` to decode the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` for a playback. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getOutputStreamOffsetUs()()` Returns the offset that should be subtracted from `bufferPresentationTimeUs` in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#processOutputBuffer(long,long,androidx.media3.exoplayer.mediacodec.MediaCodecAdapter,java.nio.ByteBuffer,int,int,int,long,boolean,boolean,androidx.media3.common.Format)` to get the playback position with respect to the media. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getOutputStreamStartPositionUs()()` Returns the start position of the current output stream in microseconds. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#getPlaybackSpeed()()` Returns the current playback speed, as set by `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#setPlaybackSpeed(float,float)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#handleInputBufferSupplementalData(androidx.media3.decoder.DecoderInputBuffer)(buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!)` Handles supplemental data associated with an input buffer. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#isBypassEnabled()()` Returns whether bypass is enabled by the renderer. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#isBypassPossible(androidx.media3.common.Format)(format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!)` Returns whether buffers in the input format can be processed without a codec. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#isReadyForDecoding()()` Returns whether the renderer is ready to start or continue decoding. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#maybeInitCodecOrBypass()()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#maybeInitializeProcessingPipeline(androidx.media3.common.Format)(format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!)` Initializes the processing pipeline, if needed by the implementation. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onCodecError(java.lang.Exception)(codecError: https://developer.android.com/reference/java/lang/Exception.html!)` Called when a codec error has occurred. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onCodecInitialized(java.lang.String,androidx.media3.exoplayer.mediacodec.MediaCodecAdapter.Configuration,long,long)( name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!, configuration: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration!, initializedTimestampMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, initializationDurationMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Called when a `https://developer.android.com/reference/android/media/MediaCodec.html` has been created and configured. |
| `abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onCodecParametersChanged(androidx.media3.exoplayer.CodecParameters)(codecParameters: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/CodecParameters!)` Called when one or more of the subscribed codec parameters have changed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onCodecReleased(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!)` Called when a `https://developer.android.com/reference/android/media/MediaCodec.html` has been released. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#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/mediacodec/MediaCodecRenderer#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://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DecoderReuseEvaluation?` | `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onInputFormatChanged(androidx.media3.exoplayer.FormatHolder)(formatHolder: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/FormatHolder!)` Called when a new `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` is read from the upstream `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onOutputFormatChanged(androidx.media3.common.Format,android.media.MediaFormat)(format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!, mediaFormat: https://developer.android.com/reference/android/media/MediaFormat.html?)` Called when one of the output formats changes. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onOutputStreamOffsetUsChanged(long)(outputStreamOffsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Called after the output stream offset changes. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#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/annotation/CallSuper https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onProcessedOutputBuffer(long)(presentationTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Called when an output buffer is successfully processed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onProcessedStreamChange()()` Called after the last output buffer before a stream change has been processed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onQueueInputBuffer(androidx.media3.decoder.DecoderInputBuffer)(buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!)` Called immediately before an input buffer is queued into the codec. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#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/mediacodec/MediaCodecRenderer#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/mediacodec/MediaCodecRenderer#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/mediacodec/MediaCodecRenderer#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/mediacodec/MediaCodecRenderer#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)`. |
| `abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#processOutputBuffer(long,long,androidx.media3.exoplayer.mediacodec.MediaCodecAdapter,java.nio.ByteBuffer,int,int,int,long,boolean,boolean,androidx.media3.common.Format)( positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, codec: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter?, buffer: https://developer.android.com/reference/java/nio/ByteBuffer.html?, bufferIndex: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, bufferFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, sampleCount: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, bufferPresentationTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, isDecodeOnlyBuffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, isLastBuffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format! )` Processes an output media buffer. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#releaseCodec()()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#renderToEndOfStream()()` Incrementally renders any remaining output. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#resetCodecStateForFlush()()` Resets the renderer internal state after a codec flush. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#resetCodecStateForRelease()()` Resets the renderer internal state after a codec release. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#setPendingOutputEndOfStream()()` Notifies the renderer that output end of stream is pending and should be handled on the next render. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#setPendingPlaybackException(androidx.media3.exoplayer.ExoPlaybackException)(exception: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException!)` Sets an exception to be re-thrown by render. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldDiscardDecoderInputBuffer(androidx.media3.decoder.DecoderInputBuffer)(buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!)` Returns whether the input buffer should be discarded before decoding. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldFlushCodec()()` Returns whether the codec should be flushed in cases such that the codec was not released. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldInitCodec(androidx.media3.exoplayer.mediacodec.MediaCodecInfo)(codecInfo: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo!)` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/ExperimentalApi https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldProcessStreamChangeAtStart()()` Returns whether `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onProcessedStreamChange()` should be invoked on the first stream. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldReinitCodec()()` Returns whether the renderer needs to re-initialize the codec, possibly as a result of a change in device capabilities. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldReleaseCodecInsteadOfFlushing()()` Returns whether the codec should be released rather than flushed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldSkipDecoderInputBuffer(androidx.media3.decoder.DecoderInputBuffer)(buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!)` Returns whether the input buffer should be skipped before the decoder. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#shouldUseBypass(androidx.media3.common.Format)(format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!)` Returns whether buffers in the input format can be processed without a codec. |
| `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/mediacodec/MediaCodecRenderer#supportsFormat(androidx.media3.exoplayer.mediacodec.MediaCodecSelector,androidx.media3.common.Format)(mediaCodecSelector: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecSelector!, format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!)` Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`. |
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#supportsFormatDrm(androidx.media3.common.Format)(format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!)` Returns whether this renderer supports the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` DRM scheme. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#updateCodecOperatingRate()()` Updates the codec operating rate. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#updateOutputFormatForTime(long)(presentationTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Updates the output formats for the specified output buffer timestamp, calling `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onOutputFormatChanged(androidx.media3.common.Format,android.media.MediaFormat)` if a change has occurred. |

| ### Protected properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#codec()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#codecInfo()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/Format?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#codecInputFormat()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#codecOperatingRate()` |
| `https://developer.android.com/reference/android/media/MediaFormat.html?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#codecOutputMediaFormat()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DecoderCounters!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#decoderCounters()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#largestQueuedPresentationTimeUs()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#lastProcessedOutputBufferTimeUs()` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#skippedFlushOffsetUs()` |
| `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer.WakeupListener!` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#wakeupListener()` |

### 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.BaseRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer) `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://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/-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/-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/-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#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#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#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/-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/-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/-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.
`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.
From [androidx.media3.exoplayer.Renderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer) `abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#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://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.
`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/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#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/-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.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities#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`.

### Inherited properties

From [androidx.media3.exoplayer.BaseRenderer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/BaseRenderer) `@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#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/-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()` `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()`

## Constants

### CODEC_OPERATING_RATE_UNSET

```
protected const val CODEC_OPERATING_RATE_UNSET = -1.0f: Float
```

Indicates no codec operating rate should be set.

### DEBUG_LOG_ENABLED

```
protected const val DEBUG_LOG_ENABLED = false: Boolean
```

Compile-time flag to enable detailed logging for codec interactions.

### DEBUG_LOG_TAG

```
protected const val DEBUG_LOG_TAG = "MCRdebug": String!
```

Logging tag that should be used for all `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#DEBUG_LOG_ENABLED()` logs.

## Public constructors

### MediaCodecRenderer

```
MediaCodecRenderer(
    context: Context!,
    @C.TrackType trackType: Int,
    codecAdapterFactory: MediaCodecAdapter.Factory!,
    mediaCodecSelector: MediaCodecSelector!,
    enableDecoderFallback: Boolean,
    assumedMinimumCodecOperatingRate: Float
)
```

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | A context. |
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/C.TrackType trackType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/C.TrackType` that the renderer handles. |
| `codecAdapterFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Factory!` | A factory for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` instances. |
| `mediaCodecSelector: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecSelector!` | A decoder selector. |
| `enableDecoderFallback: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is less efficient or slower than the primary decoder. |
| `assumedMinimumCodecOperatingRate: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | A codec operating rate that all codecs instantiated by this renderer are assumed to meet implicitly (i.e. without the operating rate being set explicitly using `https://developer.android.com/reference/android/media/MediaFormat.html#KEY_OPERATING_RATE`). |

## Public functions

### getDurationToProgressUs

```
fun getDurationToProgressUs(positionUs: Long, elapsedRealtimeUs: Long): Long
```

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.

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

The default return time is `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#DEFAULT_DURATION_TO_PROGRESS_US()` if the renderer is in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()`, or in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()` and not yet `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#isReady()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#isEnded()`. Otherwise, it returns `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#DEFAULT_IDLE_DURATION_TO_PROGRESS_US()`.

| Parameters |
|---|---|
| `positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The current render position in microseconds, measured at the start of the current iteration of the rendering loop. |
| `elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` in microseconds, measured at the start of the current iteration of the rendering loop. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | Minimum amount of playback clock time that must pass before renderer is able to make progress. |

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

### isEnded

```
fun isEnded(): Boolean
```

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()`. The player will make this transition as soon as `true` is returned by all of its renderers.

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

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the renderer is ready for the player to transition to the ended state. |

### isReady

```
fun isReady(): Boolean
```

Whether the renderer is able to immediately render media from the current position.

If the renderer is in the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()` state then returning true indicates that the renderer has everything that it needs to continue playback. Returning false indicates that the player should pause until the renderer is ready.

If the renderer is in the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()` state then returning true indicates that the renderer is ready for playback to be started. Returning false indicates that it is not.

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

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the renderer is ready to render media. |

### render

```
fun render(positionUs: Long, elapsedRealtimeUs: Long): Unit
```

Incrementally renders the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream`.

If the renderer is in the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()` state then each call to this method will do work toward being ready to render the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` when the renderer is started. If the renderer is in the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_STARTED()` state then calls to this method will render the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` in sync with the specified media positions.

The renderer may also render the very start of the media at the current position (e.g. the first frame of a video stream) while still in the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#STATE_ENABLED()` state, unless it's the initial start of the media after calling `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer#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)` with `
mayRenderStartOfStream` set to `false`.

This method should return quickly, and should not block if the renderer is unable to make useful progress.

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 current media time in microseconds, measured at the start of the current iteration of the rendering loop. |
| `elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` in microseconds, measured at the start of the current iteration of the rendering loop. |

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

### setPlaybackSpeed

```
fun setPlaybackSpeed(currentPlaybackSpeed: Float, targetPlaybackSpeed: Float): Unit
```

Indicates the playback speed to this renderer.

The default implementation is a no-op.

| Parameters |
|---|---|
| `currentPlaybackSpeed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The factor by which playback is currently sped up. |
| `targetPlaybackSpeed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The target factor by which playback should be sped up. This may be different from `currentPlaybackSpeed`, for example, if the speed is temporarily adjusted for live playback. |

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

### setRenderTimeLimitMs

```
fun setRenderTimeLimitMs(renderTimeLimitMs: Long): Unit
```

Sets a limit on the time a single `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#render(long,long)` call can spend draining and filling the decoder.

This method should be called right after creating an instance of this class.

| Parameters |
|---|---|
| `renderTimeLimitMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The render time limit in milliseconds, or `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TIME_UNSET()` for no limit. |

### supportsFormat

```
@RendererCapabilities.Capabilities
fun supportsFormat(format: Format!): Int
```

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

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

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for this format. |

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

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

### applyCodecParametersToMediaFormat

```
protected fun applyCodecParametersToMediaFormat(mediaFormat: MediaFormat!): Unit
```

Applies the currently active `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/CodecParameters` to the given `https://developer.android.com/reference/android/media/MediaFormat.html`.

### canReuseCodec

```
protected fun canReuseCodec(
    codecInfo: MediaCodecInfo!,
    oldFormat: Format!,
    newFormat: Format!,
    isAdaptiveFormatChange: Boolean
): DecoderReuseEvaluation!
```

Evaluates whether the existing `https://developer.android.com/reference/android/media/MediaCodec.html` can be kept for a new `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`, and if it can, whether it requires reconfiguration.

The default implementation does not allow decoder reuse.

| Parameters |
|---|---|
| `codecInfo: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo` describing the decoder. |
| `oldFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` for which the existing instance is configured. |
| `newFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The new `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`. |
| `isAdaptiveFormatChange: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the format change happens within the same stream after having queued samples for `oldFormat`, typically indicating an adaptive format change. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DecoderReuseEvaluation!` | The result of the evaluation. |

### createDecoderException

```
protected fun createDecoderException(cause: Throwable!, codecInfo: MediaCodecInfo?): MediaCodecDecoderException!
```

### flushOrReinitializeCodec

```
protected fun flushOrReinitializeCodec(): Boolean
```

Flushes the codec. If flushing is not possible, the codec will be released and re-instantiated. This method is a no-op if the codec is `null`.

The implementation of this method calls `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#flushOrReleaseCodec()`, and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#maybeInitCodecOrBypass()` if the codec needs to be re-instantiated.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the codec was released and reinitialized, rather than being flushed. |

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

### getCodecBufferFlags

```
protected fun getCodecBufferFlags(buffer: DecoderInputBuffer!): Int
```

Returns the flags that should be set on `https://developer.android.com/reference/android/media/MediaCodec.html#queueInputBuffer(int, int, int, long, int)` or `https://developer.android.com/reference/android/media/MediaCodec.html#queueSecureInputBuffer(int, int, android.media.MediaCodec.CryptoInfo, long, int)` for this buffer.

| Parameters |
|---|---|
| `buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!` | The input buffer. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The flags to set on `https://developer.android.com/reference/android/media/MediaCodec.html#queueInputBuffer(int, int, int, long, int)` or `https://developer.android.com/reference/android/media/MediaCodec.html#queueSecureInputBuffer(int, int, android.media.MediaCodec.CryptoInfo, long, int)`. |

### getCodecOperatingRateV23

```
protected fun getCodecOperatingRateV23(
    targetPlaybackSpeed: Float,
    format: Format!,
    streamFormats: Array<Format!>!
): Float
```

Returns the `https://developer.android.com/reference/android/media/MediaFormat.html#KEY_OPERATING_RATE` value for a given playback speed, current `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` and set of possible stream formats.

The default implementation returns `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#CODEC_OPERATING_RATE_UNSET()`.

| Parameters |
|---|---|
| `targetPlaybackSpeed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The target factor by which playback should be sped up. This may be different from the current playback speed, for example, if the speed is temporarily adjusted for live playback. |
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` for which the codec is being configured. |
| `streamFormats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!` | The possible stream formats. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The codec operating rate, or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#CODEC_OPERATING_RATE_UNSET()` if no codec operating rate should be set. |

### getDecoderInfos

```
protected abstract fun getDecoderInfos(
    mediaCodecSelector: MediaCodecSelector!,
    format: Format!,
    requiresSecureDecoder: Boolean
): (Mutable)List<MediaCodecInfo!>!
```

Returns a list of decoders that can decode media in the specified format, in priority order.

| Parameters |
|---|---|
| `mediaCodecSelector: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecSelector!` | The decoder selector. |
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` for which a decoder is required. |
| `requiresSecureDecoder: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether a secure decoder is required. |

| Returns |
|---|---|
| `(https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo!>!` | A list of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo`s corresponding to decoders. May be empty. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecUtil.DecoderQueryException` | Thrown if there was an error querying decoders. |

### getDurationToProgressUs

```
protected fun getDurationToProgressUs(
    positionUs: Long,
    elapsedRealtimeUs: Long,
    isOnBufferAvailableListenerRegistered: Boolean
): Long
```

Returns minimum time playback must advance in order for the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#render(long,long)` call to make progress.

If the `Renderer` has a registered `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.OnBufferAvailableListener`, then the `Renderer` will be notified when decoder input and output buffers become available. These callbacks may affect the calculated minimum time playback must advance before a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#render(long,long)` call can make progress.

| Parameters |
|---|---|
| `positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The current media time in microseconds, measured at the start of the current iteration of the rendering loop. |
| `elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` in microseconds, measured at the start of the current iteration of the rendering loop. |
| `isOnBufferAvailableListenerRegistered: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the `Renderer` is using a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` with successfully registered `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.OnBufferAvailableListener`. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | minimum time playback must advance before renderer is able to make progress. |

### getLastBufferInStreamPresentationTimeUs

```
protected fun getLastBufferInStreamPresentationTimeUs(): Long
```

Returns the presentation time of the last buffer in the stream.

If the last buffer has not yet been read off the sample queue then the return value will be `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TIME_UNSET()`.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The presentation time of the last buffer in the stream. |

### getMediaCodecConfiguration

```
protected abstract fun getMediaCodecConfiguration(
    codecInfo: MediaCodecInfo!,
    format: Format!,
    crypto: MediaCrypto?,
    codecOperatingRate: Float
): MediaCodecAdapter.Configuration!
```

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration` that will be used to create and configure a `https://developer.android.com/reference/android/media/MediaCodec.html` to decode the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` for a playback.

| Parameters |
|---|---|
| `codecInfo: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecInfo!` | Information about the `https://developer.android.com/reference/android/media/MediaCodec.html` being configured. |
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` for which the codec is being configured. |
| `crypto: https://developer.android.com/reference/android/media/MediaCrypto.html?` | For drm protected playbacks, a `https://developer.android.com/reference/android/media/MediaCrypto.html` to use for decryption. |
| `codecOperatingRate: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The codec operating rate, or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#CODEC_OPERATING_RATE_UNSET()` if no codec operating rate should be set. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration!` | The parameters needed to call `https://developer.android.com/reference/android/media/MediaCodec.html#configure(android.media.MediaFormat, android.view.Surface, android.media.MediaCrypto, int)`. |

### getOutputStreamOffsetUs

```
protected fun getOutputStreamOffsetUs(): Long
```

Returns the offset that should be subtracted from `bufferPresentationTimeUs` in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#processOutputBuffer(long,long,androidx.media3.exoplayer.mediacodec.MediaCodecAdapter,java.nio.ByteBuffer,int,int,int,long,boolean,boolean,androidx.media3.common.Format)` to get the playback position with respect to the media.

### getOutputStreamStartPositionUs

```
protected fun getOutputStreamStartPositionUs(): Long
```

Returns the start position of the current output stream in microseconds.

### getPlaybackSpeed

```
protected fun getPlaybackSpeed(): Float
```

Returns the current playback speed, as set by `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#setPlaybackSpeed(float,float)`.

### handleInputBufferSupplementalData

```
protected fun handleInputBufferSupplementalData(buffer: DecoderInputBuffer!): Unit
```

Handles supplemental data associated with an input buffer.

The default implementation is a no-op.

| Parameters |
|---|---|
| `buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!` | The input buffer that is about to be queued. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | Thrown if an error occurs handling supplemental data. |

### isBypassEnabled

```
protected fun isBypassEnabled(): Boolean
```

Returns whether bypass is enabled by the renderer.

### isBypassPossible

```
protected fun isBypassPossible(format: Format!): Boolean
```

Returns whether buffers in the input format can be processed without a codec.

This method returns the possibility of bypass mode with checking both the renderer capabilities and DRM protection.

| Parameters |
|---|---|
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The input `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether playback bypassing `https://developer.android.com/reference/android/media/MediaCodec.html` is possible. |

### isReadyForDecoding

```
protected fun isReadyForDecoding(): Boolean
```

Returns whether the renderer is ready to start or continue decoding.

### maybeInitCodecOrBypass

```
protected fun maybeInitCodecOrBypass(): Unit
```

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

### maybeInitializeProcessingPipeline

```
protected fun maybeInitializeProcessingPipeline(format: Format!): Boolean
```

Initializes the processing pipeline, if needed by the implementation.

The default implementation is a no-op.

| Parameters |
|---|---|
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` for which the codec is being configured. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Returns `true` when the processing pipeline is successfully initialized, or the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer` does not use a processing pipeline. The caller should try again later, if `false` is returned. |

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

### onCodecError

```
protected fun onCodecError(codecError: Exception!): Unit
```

Called when a codec error has occurred.

The default implementation is a no-op.

| Parameters |
|---|---|
| `codecError: https://developer.android.com/reference/java/lang/Exception.html!` | The error. |

### onCodecInitialized

```
protected fun onCodecInitialized(
    name: String!,
    configuration: MediaCodecAdapter.Configuration!,
    initializedTimestampMs: Long,
    initializationDurationMs: Long
): Unit
```

Called when a `https://developer.android.com/reference/android/media/MediaCodec.html` has been created and configured.

The default implementation is a no-op.

| Parameters |
|---|---|
| `name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | The name of the codec that was initialized. |
| `configuration: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.Configuration` used to configure the codec. |
| `initializedTimestampMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` when initialization finished. |
| `initializationDurationMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The time taken to initialize the codec in milliseconds. |

### onCodecParametersChanged

```
protected abstract fun onCodecParametersChanged(codecParameters: CodecParameters!): Unit
```

Called when one or more of the subscribed codec parameters have changed.

| Parameters |
|---|---|
| `codecParameters: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/CodecParameters!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/CodecParameters` instance containing the current values for the subscribed keys as reported by the underlying codec. |

### onCodecReleased

```
protected fun onCodecReleased(name: String!): Unit
```

Called when a `https://developer.android.com/reference/android/media/MediaCodec.html` has been released.

The default implementation is a no-op.

| Parameters |
|---|---|
| `name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | The name of the codec that was released. |

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

### onInputFormatChanged

```
@CallSuper
protected fun onInputFormatChanged(formatHolder: FormatHolder!): DecoderReuseEvaluation?
```

Called when a new `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` is read from the upstream `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`.

| Parameters |
|---|---|
| `formatHolder: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/FormatHolder!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/FormatHolder` that holds the new `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DecoderReuseEvaluation?` | The result of the evaluation to determine whether the existing decoder instance can be reused for the new format, or `null` if the renderer did not have a decoder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs re-initializing the `https://developer.android.com/reference/android/media/MediaCodec.html`. |

### onOutputFormatChanged

```
protected fun onOutputFormatChanged(format: Format!, mediaFormat: MediaFormat?): Unit
```

Called when one of the output formats changes.

The default implementation is a no-op.

| Parameters |
|---|---|
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The input `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` to which future output now corresponds. If the renderer is in bypass mode, this is also the output format. |
| `mediaFormat: https://developer.android.com/reference/android/media/MediaFormat.html?` | The codec output `https://developer.android.com/reference/android/media/MediaFormat.html`, or `null` if the renderer is in bypass mode. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | Thrown if an error occurs configuring the output. |

### onOutputStreamOffsetUsChanged

```
protected fun onOutputStreamOffsetUsChanged(outputStreamOffsetUs: Long): Unit
```

Called after the output stream offset changes.

The default implementation is a no-op.

| Parameters |
|---|---|
| `outputStreamOffsetUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The output stream offset in microseconds. |

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

### onProcessedOutputBuffer

```
@CallSuper
protected fun onProcessedOutputBuffer(presentationTimeUs: Long): Unit
```

Called when an output buffer is successfully processed.

| Parameters |
|---|---|
| `presentationTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The timestamp associated with the output buffer. |

### onProcessedStreamChange

```
protected fun onProcessedStreamChange(): Unit
```

Called after the last output buffer before a stream change has been processed.

### onQueueInputBuffer

```
protected fun onQueueInputBuffer(buffer: DecoderInputBuffer!): Unit
```

Called immediately before an input buffer is queued into the codec.

The default implementation is a no-op.

| Parameters |
|---|---|
| `buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!` | The buffer to be queued. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | Thrown if an error occurs handling the input buffer. |

### 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()`. |

### processOutputBuffer

```
protected abstract fun processOutputBuffer(
    positionUs: Long,
    elapsedRealtimeUs: Long,
    codec: MediaCodecAdapter?,
    buffer: ByteBuffer?,
    bufferIndex: Int,
    bufferFlags: Int,
    sampleCount: Int,
    bufferPresentationTimeUs: Long,
    isDecodeOnlyBuffer: Boolean,
    isLastBuffer: Boolean,
    format: Format!
): Boolean
```

Processes an output media buffer.

When a new `https://developer.android.com/reference/java/nio/ByteBuffer.html` is passed to this method its position and limit delineate the data to be processed. The return value indicates whether the buffer was processed in full. If true is returned then the next call to this method will receive a new buffer to be processed. If false is returned then the same buffer will be passed to the next call. An implementation of this method is free to modify the buffer and can assume that the buffer will not be externally modified between successive calls. Hence an implementation can, for example, modify the buffer's position to keep track of how much of the data it has processed.

Note that the first call to this method following a call to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onPositionReset(long,boolean,boolean)` will always receive a new `https://developer.android.com/reference/java/nio/ByteBuffer.html` to be processed.

| Parameters |
|---|---|
| `positionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The current media time in microseconds, measured at the start of the current iteration of the rendering loop. |
| `elapsedRealtimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` in microseconds, measured at the start of the current iteration of the rendering loop. |
| `codec: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter?` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter` instance, or null in bypass mode were no codec is used. |
| `buffer: https://developer.android.com/reference/java/nio/ByteBuffer.html?` | The output buffer to process, or null if the buffer data is not made available to the application layer (see `https://developer.android.com/reference/android/media/MediaCodec.html#getOutputBuffer(int)`). This `buffer` can only be null for video data. Note that the buffer data can still be rendered in this case by using the `bufferIndex`. |
| `bufferIndex: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The index of the output buffer. |
| `bufferFlags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The flags attached to the output buffer. |
| `sampleCount: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The number of samples extracted from the sample queue in the buffer. This allows handling multiple samples as a batch for efficiency. |
| `bufferPresentationTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The presentation time of the output buffer in microseconds. |
| `isDecodeOnlyBuffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the buffer timestamp is less than the intended playback start position. |
| `isLastBuffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the buffer is known to contain the last sample of the current stream. This flag is set on a best effort basis, and any logic relying on it should degrade gracefully to handle cases where it's not set. |
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` associated with the buffer. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the output buffer was fully processed (for example, rendered or skipped). |

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

### releaseCodec

```
protected fun releaseCodec(): Unit
```

### renderToEndOfStream

```
protected fun renderToEndOfStream(): Unit
```

Incrementally renders any remaining output.

The default implementation is a no-op.

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | Thrown if an error occurs rendering remaining output. |

### resetCodecStateForFlush

```
@CallSuper
protected fun resetCodecStateForFlush(): Unit
```

Resets the renderer internal state after a codec flush.

### resetCodecStateForRelease

```
@CallSuper
protected fun resetCodecStateForRelease(): Unit
```

Resets the renderer internal state after a codec release.

Note that this only needs to reset state variables that are changed in addition to those already changed in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#resetCodecStateForFlush()`.

### setPendingOutputEndOfStream

```
protected fun setPendingOutputEndOfStream(): Unit
```

Notifies the renderer that output end of stream is pending and should be handled on the next render.

### setPendingPlaybackException

```
protected fun setPendingPlaybackException(exception: ExoPlaybackException!): Unit
```

Sets an exception to be re-thrown by render.

| Parameters |
|---|---|
| `exception: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException!` | The exception. |

### shouldDiscardDecoderInputBuffer

```
protected fun shouldDiscardDecoderInputBuffer(buffer: DecoderInputBuffer!): Boolean
```

Returns whether the input buffer should be discarded before decoding.

Implement this method to to skip decoding of buffers that are not needed during a seek, or to drop input buffers that cannot be rendered on time. See `https://developer.android.com/reference/kotlin/androidx/media3/common/C#BUFFER_FLAG_NOT_DEPENDED_ON()`.

Subclasses that implement this method are responsible for updating `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#decoderCounters()`. For codecs with out-of-order buffers, consecutive dropped input buffers may have to be counted after frame reordering. For example, in `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#processOutputBuffer(long,long,androidx.media3.exoplayer.mediacodec.MediaCodecAdapter,java.nio.ByteBuffer,int,int,int,long,boolean,boolean,androidx.media3.common.Format)`.

Implementations of this method must update the `https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer#data()`. Data that is only used for output at the current `https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer#timeUs()` should be removed. Data that is referenced by later input buffers should remain in the current buffer.

| Parameters |
|---|---|
| `buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!` | The input buffer. |

### shouldFlushCodec

```
protected fun shouldFlushCodec(): Boolean
```

Returns whether the codec should be flushed in cases such that the codec was not released.

The default implementation returns whether buffers have been received by the codec.

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#flushOrReleaseCodec()` |   |

### shouldInitCodec

```
protected fun shouldInitCodec(codecInfo: MediaCodecInfo!): Boolean
```

### shouldProcessStreamChangeAtStart

```
@ExperimentalApi
protected fun shouldProcessStreamChangeAtStart(): Boolean
```

Returns whether `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onProcessedStreamChange()` should be invoked on the first stream.

Subclasses can override this method if they need stream change processing for the initial stream even when `https://developer.android.com/reference/kotlin/androidx/media3/common/Flags#FLAG_PROCESSED_STREAM_CHANGED_AT_START()` is disabled.

### shouldReinitCodec

```
protected fun shouldReinitCodec(): Boolean
```

Returns whether the renderer needs to re-initialize the codec, possibly as a result of a change in device capabilities.

### shouldReleaseCodecInsteadOfFlushing

```
protected fun shouldReleaseCodecInsteadOfFlushing(): Boolean
```

Returns whether the codec should be released rather than flushed.

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#flushOrReleaseCodec()` |   |

### shouldSkipDecoderInputBuffer

```
protected fun shouldSkipDecoderInputBuffer(buffer: DecoderInputBuffer!): Boolean
```

Returns whether the input buffer should be skipped before the decoder.

This can be used to skip decoding of buffers that are not depended on during seeking. See `https://developer.android.com/reference/kotlin/androidx/media3/common/C#BUFFER_FLAG_NOT_DEPENDED_ON()`.

| Parameters |
|---|---|
| `buffer: https://developer.android.com/reference/kotlin/androidx/media3/decoder/DecoderInputBuffer!` | The input buffer. |

### shouldUseBypass

```
protected fun shouldUseBypass(format: Format!): Boolean
```

Returns whether buffers in the input format can be processed without a codec.

This method is only called if the content is not DRM protected, because if the content is DRM protected use of bypass is never possible.

| Parameters |
|---|---|
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The input `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether playback bypassing `https://developer.android.com/reference/android/media/MediaCodec.html` is supported. |

### supportsFormat

```
@RendererCapabilities.Capabilities
protected abstract fun supportsFormat(mediaCodecSelector: MediaCodecSelector!, format: Format!): Int
```

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`.

| Parameters |
|---|---|
| `mediaCodecSelector: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecSelector!` | The decoder selector. |
| `format: https://developer.android.com/reference/kotlin/androidx/media3/common/Format!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for this `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecUtil.DecoderQueryException` | If there was an error querying decoders. |

### supportsFormatDrm

```
protected java-static fun supportsFormatDrm(format: Format!): Boolean
```

Returns whether this renderer supports the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` DRM scheme.

### updateCodecOperatingRate

```
protected fun updateCodecOperatingRate(): Unit
```

Updates the codec operating rate.

### updateOutputFormatForTime

```
protected fun updateOutputFormatForTime(presentationTimeUs: Long): Unit
```

Updates the output formats for the specified output buffer timestamp, calling `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer#onOutputFormatChanged(androidx.media3.common.Format,android.media.MediaFormat)` if a change has occurred.

Subclasses should only call this method if operating in a mode where buffers are not dequeued from the decoder, for example when using video tunneling).

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlaybackException` | Thrown if an error occurs as a result of the output format change. |

## Protected properties

### codec

```
protected val codec: MediaCodecAdapter?
```

### codecInfo

```
protected val codecInfo: MediaCodecInfo?
```

### codecInputFormat

```
protected val codecInputFormat: Format?
```

### codecOperatingRate

```
protected val codecOperatingRate: Float
```

### codecOutputMediaFormat

```
protected val codecOutputMediaFormat: MediaFormat?
```

### decoderCounters

```
protected val decoderCounters: DecoderCounters!
```

### largestQueuedPresentationTimeUs

```
protected val largestQueuedPresentationTimeUs: Long
```

### lastProcessedOutputBufferTimeUs

```
protected val lastProcessedOutputBufferTimeUs: Long
```

### skippedFlushOffsetUs

```
protected val skippedFlushOffsetUs: Long
```

### wakeupListener

```
@MonotonicNonNull
protected val wakeupListener: @MonotonicNonNull Renderer.WakeupListener!
```