# PacketConsumerCaller

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/PacketConsumerCaller.kt+class:androidx.media3.effect.PacketConsumerCaller)

*** ** * ** ***


```
@ExperimentalApi
class PacketConsumerCaller<T : Any?>
```

<br />

*** ** * ** ***

A utility that connects a producer of `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` of type `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller` to a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` via a `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.channels/-channel/index.html`.

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

The owner of this class is responsible for invoking the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#run()` method, which will start sending the queued `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` to the wrapped `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer`. The owner is also responsible for calling `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#release()` to close the underlying `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.channels/-channel/index.html` once this consumer is no longer needed.

## Summary

| ### Public companion functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller<T>` | `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#create(androidx.media3.effect.PacketConsumer,java.util.concurrent.ExecutorService,java.util.function.Consumer)( packetConsumer: https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer<T>, executorService: https://developer.android.com/reference/java/util/concurrent/ExecutorService.html, errorConsumer: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/java/lang/Exception.html> )` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller` instance. |

| ### Public functions |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-nothing/index.html?>` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#queueEndOfStream()()` Queues end of stream. |
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-nothing/index.html?>` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#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. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#release()()` Releases the internal `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.channels/-channel/index.html` and cancels coroutine to queue `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` to the wrapped `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#run()()` Start sending queued `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` the wrapped `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#tryQueuePacket(androidx.media3.effect.PacketConsumer.Packet)(packet: https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet<T>)` Attempts to queue a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` for processing without suspending. |

## Public companion functions

### create

```
fun <T : Any?> create(
    packetConsumer: PacketConsumer<T>,
    executorService: ExecutorService,
    errorConsumer: Consumer<Exception>
): PacketConsumerCaller<T>
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller` instance.

| Parameters |
|---|---|
| `packetConsumer: https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer<T>` | The `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` to wrap. |
| `executorService: https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` | The `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` on which the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer#queuePacket(androidx.media3.effect.PacketConsumer.Packet)` is invoked. |
| `errorConsumer: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/java/lang/Exception.html>` | A `https://developer.android.com/reference/java/util/function/Consumer.html` for thrown `https://developer.android.com/reference/java/lang/Exception.html`. |

## Public functions

### queueEndOfStream

```
@CanIgnoreReturnValue
fun queueEndOfStream(): ListenableFuture<Nothing?>
```

Queues end of stream.

Reports errors via `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#errorConsumer()`.

### queuePacket

```
@CanIgnoreReturnValue
fun queuePacket(packet: PacketConsumer.Packet<T>): ListenableFuture<Nothing?>
```

Queues a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` for processing.

The ownership of the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#queuePacket(androidx.media3.effect.PacketConsumer.Packet)` is transferred to the wrapped `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` and the caller must not modify the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#queuePacket(androidx.media3.effect.PacketConsumer.Packet)`.

Reports errors via `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#errorConsumer()`.

### release

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

Releases the internal `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.channels/-channel/index.html` and cancels coroutine to queue `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` to the wrapped `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer`.

### run

```
fun run(): Unit
```

Start sending queued `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` the wrapped `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer`

### tryQueuePacket

```
fun tryQueuePacket(packet: PacketConsumer.Packet<T>): Boolean
```

Attempts to queue a `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer.Packet` for processing without suspending.

If this method returns `true`, the ownership of the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#tryQueuePacket(androidx.media3.effect.PacketConsumer.Packet)` is transferred to the wrapped `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` and the caller must not modify the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#tryQueuePacket(androidx.media3.effect.PacketConsumer.Packet)`. If returns `false`, it means the consumer is at capacity and cannot accept the packet at the moment.

| Throws |
|---|---|
| `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.channels/-closed-send-channel-exception/index.html` | If the channel to send `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumerCaller#tryQueuePacket(androidx.media3.effect.PacketConsumer.Packet)` to the `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` is closed. |