Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/android/media/MediaCodec.Callback#pubctors) \| [Methods](https://developer.android.com/reference/android/media/MediaCodec.Callback#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/media/MediaCodec.Callback#inhmethods)

# MediaCodec.Callback

*** ** * ** ***

` public static abstract class MediaCodec.Callback `   
` extends https://developer.android.com/reference/java/lang/Object ` ` `

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.media.MediaCodec.Callback |

<br />

*** ** * ** ***

MediaCodec callback interface. Used to notify the user asynchronously of various MediaCodec events.

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/media/MediaCodec.Callback#Callback()() ` |

| ### Public methods ||
|---|---|
| ` void` | ` https://developer.android.com/reference/android/media/MediaCodec.Callback#onCryptoError(android.media.MediaCodec,%20android.media.MediaCodec.CryptoException)(https://developer.android.com/reference/android/media/MediaCodec codec, https://developer.android.com/reference/android/media/MediaCodec.CryptoException e) ` Called only when MediaCodec encountered a crypto(decryption) error when using a decoder configured with CONFIGURE_FLAG_USE_CRYPTO_ASYNC flag along with crypto or descrambler object. |
| ` abstract void` | ` https://developer.android.com/reference/android/media/MediaCodec.Callback#onError(android.media.MediaCodec,%20android.media.MediaCodec.CodecException)(https://developer.android.com/reference/android/media/MediaCodec codec, https://developer.android.com/reference/android/media/MediaCodec.CodecException e) ` Called when the MediaCodec encountered an error |
| ` abstract void` | ` https://developer.android.com/reference/android/media/MediaCodec.Callback#onInputBufferAvailable(android.media.MediaCodec,%20int)(https://developer.android.com/reference/android/media/MediaCodec codec, int index) ` Called when an input buffer becomes available. |
| ` void` | ` https://developer.android.com/reference/android/media/MediaCodec.Callback#onMetricsFlushed(android.media.MediaCodec,%20android.os.PersistableBundle)(https://developer.android.com/reference/android/media/MediaCodec codec, https://developer.android.com/reference/android/os/PersistableBundle metrics) ` Called when the metrics for this codec have been flushed "mid-stream" due to the start of a new subsession during execution. |
| ` abstract void` | ` https://developer.android.com/reference/android/media/MediaCodec.Callback#onOutputBufferAvailable(android.media.MediaCodec,%20int,%20android.media.MediaCodec.BufferInfo)(https://developer.android.com/reference/android/media/MediaCodec codec, int index, https://developer.android.com/reference/android/media/MediaCodec.BufferInfo info) ` Called when an output buffer becomes available. |
| ` void` | ` https://developer.android.com/reference/android/media/MediaCodec.Callback#onOutputBuffersAvailable(android.media.MediaCodec,%20int,%20java.util.ArrayDeque<android.media.MediaCodec.BufferInfo>)(https://developer.android.com/reference/android/media/MediaCodec codec, int index, https://developer.android.com/reference/java/util/ArrayDeque<https://developer.android.com/reference/android/media/MediaCodec.BufferInfo> infos) ` Called when multiple access-units are available in the output. |
| ` abstract void` | ` https://developer.android.com/reference/android/media/MediaCodec.Callback#onOutputFormatChanged(android.media.MediaCodec,%20android.media.MediaFormat)(https://developer.android.com/reference/android/media/MediaCodec codec, https://developer.android.com/reference/android/media/MediaFormat format) ` Called when the output format has changed |

### Inherited methods

From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.

## Public constructors

### Callback

```
public Callback ()
```

<br />

<br />

## Public methods

### onCryptoError

Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void onCryptoError (MediaCodec codec, 
                MediaCodec.CryptoException e)
```

Called only when MediaCodec encountered a crypto(decryption) error when using a decoder configured with CONFIGURE_FLAG_USE_CRYPTO_ASYNC flag along with crypto or descrambler object.

<br />

| Parameters ||
|---|---|
| `codec` | `MediaCodec`: The MediaCodec object. This value cannot be `null`. <br /> |
| `e` | `MediaCodec.CryptoException`: The `https://developer.android.com/reference/android/media/MediaCodec.CryptoException` object with error details. This value cannot be `null`. <br /> |

### onError

Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void onError (MediaCodec codec, 
                MediaCodec.CodecException e)
```

Called when the MediaCodec encountered an error

<br />

| Parameters ||
|---|---|
| `codec` | `MediaCodec`: The MediaCodec object. This value cannot be `null`. <br /> |
| `e` | `MediaCodec.CodecException`: The `https://developer.android.com/reference/android/media/MediaCodec.CodecException` object describing the error. This value cannot be `null`. <br /> |

### onInputBufferAvailable

Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void onInputBufferAvailable (MediaCodec codec, 
                int index)
```

Called when an input buffer becomes available.

<br />

| Parameters ||
|---|---|
| `codec` | `MediaCodec`: The MediaCodec object. This value cannot be `null`. <br /> |
| `index` | `int`: The index of the available input buffer. <br /> |

### onMetricsFlushed

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void onMetricsFlushed (MediaCodec codec, 
                PersistableBundle metrics)
```

Called when the metrics for this codec have been flushed "mid-stream" due to the start of a new subsession during execution.

A new codec subsession normally starts when the codec is reconfigured after stop(), but it can also happen mid-stream e.g. if the video size changes. When this happens, the metrics for the previous subsession are flushed, and `https://developer.android.com/reference/android/media/MediaCodec#getMetrics()` will return the metrics for the new subsession.

For subsessions that begin due to a reconfiguration, the metrics for the prior subsession can be retrieved via `https://developer.android.com/reference/android/media/MediaCodec#getMetrics()` prior to calling `https://developer.android.com/reference/android/media/MediaCodec#configure(android.media.MediaFormat,%20android.view.Surface,%20android.media.MediaCrypto,%20int)`.

When a new subsession begins "mid-stream", the metrics for the prior subsession are flushed just before the `https://developer.android.com/reference/android/media/MediaCodec.Callback#onOutputFormatChanged(android.media.MediaCodec,%20android.media.MediaFormat)` event, so this **optional** callback is provided to be able to capture the final metrics for the previous subsession.

<br />

| Parameters ||
|---|---|
| `codec` | `MediaCodec`: The MediaCodec object. This value cannot be `null`. <br /> |
| `metrics` | `PersistableBundle`: The flushed metrics for this codec. This is a `https://developer.android.com/reference/android/os/PersistableBundle` containing the set of attributes and values available for the media being handled by this instance of MediaCodec. The attributes are described in `https://developer.android.com/reference/android/media/MediaCodec.MetricsConstants`. Additional vendor-specific fields may also be present. This value cannot be `null`. <br /> |

### onOutputBufferAvailable

Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void onOutputBufferAvailable (MediaCodec codec, 
                int index, 
                MediaCodec.BufferInfo info)
```

Called when an output buffer becomes available.

<br />

| Parameters ||
|---|---|
| `codec` | `MediaCodec`: The MediaCodec object. This value cannot be `null`. <br /> |
| `index` | `int`: The index of the available output buffer. <br /> |
| `info` | `MediaCodec.BufferInfo`: Info regarding the available output buffer `https://developer.android.com/reference/android/media/MediaCodec.BufferInfo`. This value cannot be `null`. <br /> |

### onOutputBuffersAvailable

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void onOutputBuffersAvailable (MediaCodec codec, 
                int index, 
                ArrayDeque<MediaCodec.BufferInfo> infos)
```

Called when multiple access-units are available in the output.

<br />

| Parameters ||
|---|---|
| `codec` | `MediaCodec`: The MediaCodec object. This value cannot be `null`. <br /> |
| `index` | `int`: The index of the available output buffer. <br /> |
| `infos` | `ArrayDeque`: Infos describing the available output buffer `https://developer.android.com/reference/android/media/MediaCodec.BufferInfo`. Access units present in the output buffer are laid out contiguously without gaps and in order. This value cannot be `null`. <br /> |

### onOutputFormatChanged

Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void onOutputFormatChanged (MediaCodec codec, 
                MediaFormat format)
```

Called when the output format has changed

<br />

| Parameters ||
|---|---|
| `codec` | `MediaCodec`: The MediaCodec object. This value cannot be `null`. <br /> |
| `format` | `MediaFormat`: The new output format. This value cannot be `null`. <br /> |