# 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
public interface PacketConsumer<T extends Object>
```

<br />

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

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

*** ** * ** ***

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

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

| Parameters |
|---|---|
| `<T extends https://developer.android.com/reference/java/lang/Object.html>` | The type of Packet.payload being consumed. |

## Summary

| ### Nested types |
|---|
| `public fun interface https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Factory<T extends https://developer.android.com/reference/java/lang/Object.html>` A factory for `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer` instances. |
| `public sealed interface https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet<T extends https://developer.android.com/reference/java/lang/Object.html>` Represents a packet. |
| `public static class https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet.EndOfStream implements https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Void.html>` A `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet` implementation to represent an end of stream (EOS) signal. |
| `public final class https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet.Payload<T extends https://developer.android.com/reference/java/lang/Object.html> implements https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet<@https://developer.android.com/reference/androidx/annotation/NonNull T>` A `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet` implementation to wrap a `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet.Payload#payload()` of type `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet.Payload`. |

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer#queuePacket(androidx.media3.effect.PacketConsumer.Packet)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet<@https://developer.android.com/reference/androidx/annotation/NonNull T> packet)` Queues a `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer.Packet` for processing, suspending the caller if the consumer is at capacity. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer#release()()` Releases all resources. |

## Public methods

### queuePacket

```
abstract void queuePacket(@NonNull PacketConsumer.Packet<@NonNull T> packet)
```

Queues a `https://developer.android.com/reference/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/androidx/media3/effect/PacketConsumer#queuePacket(androidx.media3.effect.PacketConsumer.Packet)` is transferred to this `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer`, and the caller should not modify the `https://developer.android.com/reference/androidx/media3/effect/PacketConsumer#queuePacket(androidx.media3.effect.PacketConsumer.Packet)`.

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

### release

```
abstract void release()
```

Releases all resources.