# PacketConsumer

Artifact: [androidx.media3:media3-effect](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/effect/PacketConsumer.kt+class:androidx.media3.effect.PacketConsumer)

*** ** * ** ***


```
@ExperimentalApi
interface PacketConsumer<T : Any?>
```

<br />

Known direct subclasses [PacketProcessor](https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketProcessor), [RecordingPacketConsumer](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/RecordingPacketConsumer), [RenderingPacketConsumer](https://developer.android.com/reference/kotlin/androidx/media3/effect/RenderingPacketConsumer)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketProcessor` | A `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` that processes `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet`s and forwards them to a downstream `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/RecordingPacketConsumer` | A `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` implementation that holds a reference to all queued packets, and optionally releases the underlying frames. |
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/RenderingPacketConsumer` | A `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` that renders input `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet`s to an output `https://developer.android.com/reference/kotlin/androidx/media3/effect/RenderingPacketConsumer`. |

*** ** * ** ***

A consumer that accepts `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet`s.

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

| Parameters |
|---|---|
| `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?>` | The type of Packet.payload being consumed. |

## Summary

| ### Nested types |
|---|
| `fun interface https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Factory<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?>` A factory for `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` instances. |
| `sealed interface https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?>` Represents a packet. |
| `data object https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet.EndOfStream : https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-nothing/index.html>` A `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` implementation to represent an end of stream (EOS) signal. |
| `data class https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet.Payload<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> : https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet<T>` A `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` implementation to wrap a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet.Payload#payload()` of type `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet.Payload`. |

| ### Public functions |
|---|---|
| `suspend https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer#queuePacket(androidx.media3.effect.PacketConsumer.Packet)(packet: https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet<T>)` Queues a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` for processing, suspending the caller if the consumer is at capacity. |
| `suspend https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer#release()()` Releases all resources. |

## Public functions

### queuePacket

```
suspend fun queuePacket(packet: PacketConsumer.Packet<T>): Unit
```

Queues a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` for processing, suspending the caller if the consumer is at capacity.

Once this method returns, the ownership of the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer#queuePacket(androidx.media3.effect.PacketConsumer.Packet)` is transferred to this `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer`, and the caller should not modify the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer#queuePacket(androidx.media3.effect.PacketConsumer.Packet)`.

| Parameters |
|---|---|
| `packet: https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet<T>` | The `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` to process. |

### release

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

Releases all resources.