# VideoPacketEncoder

<a id="videopacketencoder"></a>

# VideoPacketEncoder

```cpp
#include <icy/av/videopacketencoder.h>

class VideoPacketEncoder
```

[Defined in src/av/include/icy/av/videopacketencoder.h:45](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L45)

> **Inherits:** [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder), [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor)

[PacketProcessor](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) that encodes raw video frames ([PlanarVideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-PlanarVideoPacket.md#planarvideopacket) or [VideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-VideoPacket.md#videopacket)) into compressed packets via [VideoEncoder](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder).

Drop this into a [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) between a source that emits raw frames (e.g. [MediaCapture](https://auscaster.com/icey/docs/api-reference/icy-av-MediaCapture.md#mediacapture)) and a sink that expects encoded data (e.g. WebRtcTrackSender or [MultiplexPacketEncoder](https://auscaster.com/icey/docs/api-reference/icy-av-MultiplexPacketEncoder.md#multiplexpacketencoder)).

Example:

auto encoder = std::make_shared<av::VideoPacketEncoder>(); encoder->iparams = capture->videoCodec(); // decoded format encoder->oparams = [av::VideoCodec](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec)("H264", "libx264", 640, 480, 30);

[PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) stream; stream.attachSource(capture); stream.attach(encoder, 1, true); stream.attach(&webrtcSender, 5, false); stream.start();

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`PacketStream`](#packetstream-6) | `friend` | Declared here |
| [`VideoPacketEncoder`](#videopacketencoder-1) | `function` | Declared here |
| [`~VideoPacketEncoder`](#videopacketencoder-2) | `function` | Declared here |
| [`VideoPacketEncoder`](#videopacketencoder-3) | `function` | Declared here |
| [`operator=`](#operator-165) | `function` | Declared here |
| [`process`](#process-13) | `function` | Declared here |
| [`accepts`](#accepts-4) | `function` | Declared here |
| [`_initialized`](#_initialized-1) | `variable` | Declared here |
| [`_mutex`](#_mutex-11) | `variable` | Declared here |
| [`onStreamStateChange`](#onstreamstatechange-8) | `function` | Declared here |
| [`format`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#format-13) | `variable` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder-1) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`~VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder-2) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`create`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#create-7) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`close`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#close-15) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#encode-9) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#encode-10) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#encode-11) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#flush-8) | `function` | Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) |
| [`emitter`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#emitter-8) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`iparams`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#iparams-1) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`oparams`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#oparams-1) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`stream`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#stream-9) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`ctx`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#ctx-1) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`codec`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#codec-6) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`frame`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#frame-1) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`conv`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#conv) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`time`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#time-1) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`pts`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#pts-1) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`seconds`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#seconds-4) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`error`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#error-10) | `variable` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-1) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`~VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-2) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-3) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#operator-153) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-4) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#operator-154) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`create`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#create-5) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`open`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#open-3) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`close`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#close-13) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`decode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#decode-2) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#encode-6) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#encode-7) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#encode-8) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#flush-6) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`convert`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#convert) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`recreateConverter`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#recreateconverter) | `function` | Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext) |
| [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor-1) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`process`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#process-1) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`accepts`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#accepts-1) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#operator-69) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`~PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-2) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-2) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-3) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-4) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-5) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`getEmitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#getemitter) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`retention`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#retention-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#onstreamstatechange-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`_emitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#_emitter) | `variable` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-3) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-72) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-4) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-73) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |

## Inherited from [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`format`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#format-13)  |  |
| `function` | [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder-1)  | Construct an encoder, optionally tied to an existing muxer context. |
| `function` | [`~VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder-2) `noexcept` `override` |  |
| `function` | [`create`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#create-7) `virtual` `override` | Initialise the AVCodecContext using oparams. Adds a video stream to `format` if one was provided at construction. |
| `function` | [`close`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#close-15) `virtual` `override` | Close and free the AVCodecContext and associated resources. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#encode-9) `virtual` `override` | Encode a single video frame. This method is for interleaved video formats. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#encode-10) `virtual` `override` | Encode a single video frame. This method is for planar video formats. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#encode-11) `virtual` `override` | Encode a single AVFrame (typically from a decoder or converter). |
| `function` | [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#flush-8) `virtual` `override` | Flush remaining packets to be encoded. This method should be called once before stream closure. |

## Inherited from [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`emitter`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#emitter-8)  |  |
| `variable` | [`iparams`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#iparams-1)  | input parameters |
| `variable` | [`oparams`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#oparams-1)  | output parameters |
| `variable` | [`stream`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#stream-9)  | encoder or decoder stream |
| `variable` | [`ctx`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#ctx-1)  | encoder or decoder context |
| `variable` | [`codec`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#codec-6)  | encoder or decoder codec |
| `variable` | [`frame`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#frame-1)  | encoder or decoder frame |
| `variable` | [`conv`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#conv)  | video conversion context |
| `variable` | [`time`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#time-1)  | stream time in codec time base |
| `variable` | [`pts`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#pts-1)  | last packet pts value |
| `variable` | [`seconds`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#seconds-4)  | video time in seconds |
| `variable` | [`error`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#error-10)  | error message |
| `function` | [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-1)  |  |
| `function` | [`~VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-2) `virtual` `noexcept` |  |
| `function` | [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-3)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#operator-153)  | Deleted assignment operator. |
| `function` | [`VideoContext`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#videocontext-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#operator-154)  | Deleted assignment operator. |
| `function` | [`create`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#create-5) `virtual` | Initialise the AVCodecContext with codec-specific defaults. Overridden by [VideoEncoder](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) and [VideoDecoder](https://auscaster.com/icey/docs/api-reference/icy-av-VideoDecoder.md#videodecoder). |
| `function` | [`open`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#open-3) `virtual` | Open the codec and create the pixel format conversion context if required. Throws std::runtime_error if the codec context has not been created. |
| `function` | [`close`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#close-13) `virtual` | Close the codec context, free the frame, and reset timestamps. |
| `function` | [`decode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#decode-2) `virtual` | Decode a compressed video packet and emit the resulting frame. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#encode-6) `virtual` | Encode a buffer of interleaved video data. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#encode-7) `virtual` | Encode a planar video frame. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#encode-8) `virtual` | Encode a single AVFrame. |
| `function` | [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#flush-6) `virtual` | Flush any frames buffered inside the codec and emit remaining output. |
| `function` | [`convert`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#convert) `virtual` | Convert the video frame and return the result. |
| `function` | [`recreateConverter`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#recreateconverter) `virtual` | Recreate the [VideoConverter](https://auscaster.com/icey/docs/api-reference/icy-av-VideoConverter.md#videoconverter) if the input or output parameters have changed. Called automatically by [open()](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#open-3) and [convert()](https://auscaster.com/icey/docs/api-reference/icy-av-VideoContext.md#convert). |

## Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor-1) `inline` |  |
| `function` | [`process`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#process-1) `virtual` | This method performs processing on the given packet and emits the result. |
| `function` | [`accepts`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#accepts-1) `virtual` `inline` | This method ensures compatibility with the given packet type. Return false to reject the packet. |
| `function` | [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#operator-69) `virtual` `inline` | [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) operator alias for [process()](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#process-1) |

## Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-1)  | Construct the adapter, binding it to the given packet signal. |
| `function` | [`~PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-2) `virtual` `inline` |  |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-1) `virtual` | Emit a mutable raw buffer as a packet. |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-2) `virtual` | Emit a read-only raw buffer as a packet (data is copied internally). |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-3) `virtual` | Emit a string as a packet (data is copied internally). |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-4) `virtual` | Emit a flag-only packet carrying no payload data. |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-5) `virtual` | Emit an existing packet directly onto the outgoing signal. |
| `function` | [`getEmitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#getemitter)  | Returns a reference to the outgoing packet signal. |
| `function` | [`retention`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#retention-1) `virtual` `const` | Returns how this adapter treats incoming packet lifetime. Most adapters are synchronous and therefore only borrow the packet for the current call chain. Queue-style adapters override this to advertise that they clone before deferred use. Callers may treat the first adapter reporting Cloned or Retained as the explicit ownership boundary in the stream graph. |
| `function` | [`onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#onstreamstatechange-1) `virtual` `inline` | Called by the [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) to notify when the internal [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) state changes. On receiving the Stopped state, it is the responsibility of the adapter to have ceased all outgoing packet transmission, especially in multi-thread scenarios. |
| `variable` | [`_emitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#_emitter)  |  |
| `function` | [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-3)  | NonCopyable and NonMovable. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-72)  | Deleted assignment operator. |
| `function` | [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-73)  | Deleted assignment operator. |

## Friends

| Name | Description |
|------|-------------|
| [`PacketStream`](#packetstream-6)  |  |

---

<a id="packetstream-6"></a>

### PacketStream

```cpp
friend class PacketStream
```

[Defined in src/av/include/icy/av/videopacketencoder.h:65](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L65)

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`VideoPacketEncoder`](#videopacketencoder-1)  |  |
|  | [`~VideoPacketEncoder`](#videopacketencoder-2) `noexcept` `override` |  |
|  | [`VideoPacketEncoder`](#videopacketencoder-3)  | Deleted constructor. |
| [`VideoPacketEncoder`](#videopacketencoder) & | [`operator=`](#operator-165)  | Deleted assignment operator. |
| `void` | [`process`](#process-13) `virtual` `override` | [Process](https://auscaster.com/icey/docs/api-reference/icy-Process.md#process-3) a [VideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-VideoPacket.md#videopacket) or [PlanarVideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-PlanarVideoPacket.md#planarvideopacket) from the stream. Encodes the frame and emits the resulting compressed packet. |
| `bool` | [`accepts`](#accepts-4) `virtual` `override` | Accept [VideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-VideoPacket.md#videopacket) and [PlanarVideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-PlanarVideoPacket.md#planarvideopacket) types. |

---

<a id="videopacketencoder-1"></a>

### VideoPacketEncoder

```cpp
VideoPacketEncoder(AVFormatContext * format = nullptr)
```

[Defined in src/av/include/icy/av/videopacketencoder.h:49](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L49)

---

<a id="videopacketencoder-2"></a>

### ~VideoPacketEncoder

`noexcept` `override`

```cpp
~VideoPacketEncoder() noexcept override
```

[Defined in src/av/include/icy/av/videopacketencoder.h:50](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L50)

---

<a id="videopacketencoder-3"></a>

### VideoPacketEncoder

```cpp
VideoPacketEncoder(const VideoPacketEncoder &) = delete
```

[Defined in src/av/include/icy/av/videopacketencoder.h:52](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L52)

Deleted constructor.

---

<a id="operator-165"></a>

### operator=

```cpp
VideoPacketEncoder & operator=(const VideoPacketEncoder &) = delete
```

[Defined in src/av/include/icy/av/videopacketencoder.h:53](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L53)

Deleted assignment operator.

---

<a id="process-13"></a>

### process

`virtual` `override`

```cpp
virtual void process(IPacket & packet) override
```

[Defined in src/av/include/icy/av/videopacketencoder.h:57](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L57)

[Process](https://auscaster.com/icey/docs/api-reference/icy-Process.md#process-3) a [VideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-VideoPacket.md#videopacket) or [PlanarVideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-PlanarVideoPacket.md#planarvideopacket) from the stream. Encodes the frame and emits the resulting compressed packet.

#### Reimplements

- [`PacketProcessor::process`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#process-1)

---

<a id="accepts-4"></a>

### accepts

`virtual` `override`

```cpp
virtual bool accepts(IPacket * packet) override
```

[Defined in src/av/include/icy/av/videopacketencoder.h:60](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L60)

Accept [VideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-VideoPacket.md#videopacket) and [PlanarVideoPacket](https://auscaster.com/icey/docs/api-reference/icy-av-PlanarVideoPacket.md#planarvideopacket) types.

#### Reimplements

- [`PacketProcessor::accepts`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#accepts-1)

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `bool` | [`_initialized`](#_initialized-1)  |  |
| `std::mutex` | [`_mutex`](#_mutex-11)  |  |

---

<a id="_initialized-1"></a>

### _initialized

```cpp
bool _initialized = false
```

[Defined in src/av/include/icy/av/videopacketencoder.h:67](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L67)

---

<a id="_mutex-11"></a>

### _mutex

```cpp
std::mutex _mutex
```

[Defined in src/av/include/icy/av/videopacketencoder.h:68](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L68)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `void` | [`onStreamStateChange`](#onstreamstatechange-8) `virtual` `override` | Called by the [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) to notify when the internal [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) state changes. On receiving the Stopped state, it is the responsibility of the adapter to have ceased all outgoing packet transmission, especially in multi-thread scenarios. |

---

<a id="onstreamstatechange-8"></a>

### onStreamStateChange

`virtual` `override`

```cpp
virtual void onStreamStateChange(const PacketStreamState &) override
```

[Defined in src/av/include/icy/av/videopacketencoder.h:63](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videopacketencoder.h#L63)

Called by the [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) to notify when the internal [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) state changes. On receiving the Stopped state, it is the responsibility of the adapter to have ceased all outgoing packet transmission, especially in multi-thread scenarios.

#### Reimplements

- [`PacketStreamAdapter::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#onstreamstatechange-1)
