# MultiplexEncoder

<a id="multiplexencoder"></a>

# MultiplexEncoder

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

class MultiplexEncoder
```

[Defined in src/av/include/icy/av/multiplexencoder.h:41](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L41)

> **Inherits:** [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder)
> **Subclassed by:** [`MultiplexPacketEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-MultiplexPacketEncoder.md#multiplexpacketencoder)

Multiplexing encoder that writes synchronized audio and video streams.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`emitter`](#emitter-9) | `variable` | Declared here |
| [`MultiplexEncoder`](#multiplexencoder-1) | `function` | Declared here |
| [`~MultiplexEncoder`](#multiplexencoder-2) | `function` | Declared here |
| [`MultiplexEncoder`](#multiplexencoder-3) | `function` | Declared here |
| [`operator=`](#operator-162) | `function` | Declared here |
| [`MultiplexEncoder`](#multiplexencoder-4) | `function` | Declared here |
| [`operator=`](#operator-163) | `function` | Declared here |
| [`init`](#init-7) | `function` | Declared here |
| [`uninit`](#uninit-1) | `function` | Declared here |
| [`cleanup`](#cleanup-1) | `function` | Declared here |
| [`createVideo`](#createvideo-1) | `function` | Declared here |
| [`freeVideo`](#freevideo-1) | `function` | Declared here |
| [`encodeVideo`](#encodevideo-1) | `function` | Declared here |
| [`encodeVideo`](#encodevideo-2) | `function` | Declared here |
| [`encodeVideo`](#encodevideo-3) | `function` | Declared here |
| [`createAudio`](#createaudio-1) | `function` | Declared here |
| [`freeAudio`](#freeaudio-1) | `function` | Declared here |
| [`encodeAudio`](#encodeaudio) | `function` | Declared here |
| [`encodeAudio`](#encodeaudio-1) | `function` | Declared here |
| [`flush`](#flush-9) | `function` | Declared here |
| [`options`](#options-3) | `function` | Declared here |
| [`video`](#video-2) | `function` | Declared here |
| [`audio`](#audio-2) | `function` | Declared here |
| [`_options`](#_options) | `variable` | Declared here |
| [`_formatCtx`](#_formatctx-1) | `variable` | Declared here |
| [`_video`](#_video-1) | `variable` | Declared here |
| [`_audio`](#_audio-1) | `variable` | Declared here |
| [`_ioCtx`](#_ioctx) | `variable` | Declared here |
| [`_ioBuffer`](#_iobuffer) | `variable` | Declared here |
| [`_videoPts`](#_videopts) | `variable` | Declared here |
| [`_audioPts`](#_audiopts) | `variable` | Declared here |
| [`_mutex`](#_mutex-9) | `variable` | Declared here |
| [`writeOutputPacket`](#writeoutputpacket) | `function` | Declared here |
| [`updateStreamPts`](#updatestreampts) | `function` | Declared here |
| [`onVideoEncoded`](#onvideoencoded) | `function` | Declared here |
| [`onAudioEncoded`](#onaudioencoded) | `function` | Declared here |
| [`init`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#init-6) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`uninit`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#uninit) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`cleanup`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#cleanup) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`options`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#options-2) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`createVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#createvideo) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`freeVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#freevideo) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`encodeVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#encodevideo) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`createAudio`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#createaudio) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`freeAudio`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#freeaudio) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#flush-2) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`isNone`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isnone) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`isReady`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isready) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`isEncoding`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isencoding) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`isActive`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isactive) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`isStopped`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isstopped) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`isError`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iserror) | `function` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`Type`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#type-6) | `enum` | Inherited from [`IEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iencoder) |
| [`StateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statechange) | `variable` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-1) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`~Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-2) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`stateEquals`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateequals) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`stateBetween`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statebetween) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-4) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-5) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`_state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#_state) | `variable` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`beforeStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#beforestatechange) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`onStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#onstatechange-2) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |
| [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate-1) | `function` | Inherited from [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful) |

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

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`init`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#init-6) `virtual` | Initialise the encoder, open codec contexts, and transition to Ready or Encoding state. |
| `function` | [`uninit`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#uninit) `virtual` | Flush remaining packets, close codec contexts, and release all encoder resources. |
| `function` | [`cleanup`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#cleanup) `virtual` `inline` | Perform any additional cleanup after [uninit()](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#uninit). Default is a no-op. |
| `function` | [`options`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#options-2) `virtual` `const` |  |
| `function` | [`createVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#createvideo) `virtual` `inline` | Initialise the video codec context and stream. |
| `function` | [`freeVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#freevideo) `virtual` `inline` | Free the video codec context and stream. |
| `function` | [`encodeVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#encodevideo) `virtual` `inline` | Encode a single AVFrame of video. |
| `function` | [`createAudio`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#createaudio) `virtual` `inline` | Initialise the audio codec context and stream. |
| `function` | [`freeAudio`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#freeaudio) `virtual` `inline` | Free the audio codec context and stream. |
| `function` | [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#flush-2) `virtual` `inline` | Flush any internally buffered packets to the output. |
| `function` | [`isNone`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isnone) `const` `inline` |  |
| `function` | [`isReady`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isready) `const` `inline` |  |
| `function` | [`isEncoding`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isencoding) `virtual` `const` `inline` |  |
| `function` | [`isActive`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isactive) `virtual` `const` `inline` |  |
| `function` | [`isStopped`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#isstopped) `virtual` `const` `inline` |  |
| `function` | [`isError`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#iserror) `virtual` `const` `inline` |  |
| `enum` | [`Type`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#type-6)  |  |

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

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`StateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statechange)  | Signals when the state changes. |
| `function` | [`Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-1) `inline` |  |
| `function` | [`~Stateful`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful-2) `virtual` `inline` |  |
| `function` | [`stateEquals`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateequals) `virtual` `const` `inline` | Returns true if the current state ID equals the given ID. |
| `function` | [`stateBetween`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#statebetween) `virtual` `const` `inline` | Returns true if the current state ID is in the inclusive range [lid, rid]. |
| `function` | [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-4) `virtual` `inline` | Returns a mutable reference to the current state. |
| `function` | [`state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#state-5) `virtual` `const` `inline` | Returns a copy of the current state. |
| `variable` | [`_state`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#_state)  |  |
| `function` | [`beforeStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#beforestatechange) `virtual` `inline` | Override to handle pre state change logic. Return false to prevent state change. |
| `function` | [`onStateChange`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#onstatechange-2) `virtual` `inline` | Override to handle post state change logic. |
| `function` | [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate) `virtual` `inline` | Sets the state and sends the state signal if the state change was successful. |
| `function` | [`setState`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#setstate-1) `virtual` `inline` | Sets the state and sends the state signal if the state change was successful. |

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`PacketSignal`](https://auscaster.com/icey/docs/api-reference/base.md#packetsignal) | [`emitter`](#emitter-9)  |  |

---

<a id="emitter-9"></a>

### emitter

```cpp
PacketSignal emitter
```

Type: [`PacketSignal`](https://auscaster.com/icey/docs/api-reference/base.md#packetsignal)

[Defined in src/av/include/icy/av/multiplexencoder.h:130](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L130)

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`MultiplexEncoder`](#multiplexencoder-1)  | Construct the encoder with the given options. |
|  | [`~MultiplexEncoder`](#multiplexencoder-2) `noexcept` `override` |  |
|  | [`MultiplexEncoder`](#multiplexencoder-3)  | Deleted constructor. |
| [`MultiplexEncoder`](#multiplexencoder) & | [`operator=`](#operator-162)  | Deleted assignment operator. |
|  | [`MultiplexEncoder`](#multiplexencoder-4)  | Deleted constructor. |
| [`MultiplexEncoder`](#multiplexencoder) & | [`operator=`](#operator-163)  | Deleted assignment operator. |
| `void` | [`init`](#init-7) `virtual` `override` | Open the output container, create codec streams, and write the format header. |
| `void` | [`uninit`](#uninit-1) `virtual` `override` | Flush encoded packets, write the format trailer, and close the output container. |
| `void` | [`cleanup`](#cleanup-1) `virtual` `override` | Release all resources allocated by [init()](#init-7) without writing a trailer. |
| `void` | [`createVideo`](#createvideo-1) `virtual` `override` | Create the video encoder and add the stream to the output container. |
| `void` | [`freeVideo`](#freevideo-1) `virtual` `override` | Flush and free the video encoder and its stream. |
| `bool` | [`encodeVideo`](#encodevideo-1) `virtual` `override` | Encode a single video frame. All frame values must be set, such as size, pixel format, and PTS. |
| `bool` | [`encodeVideo`](#encodevideo-2) `virtual` | Encode a single interleaved video frame. If the frame time is specified it should be the microseconds offset since the start of the input stream. If no time is specified a real-time value will be assigned to the frame. |
| `bool` | [`encodeVideo`](#encodevideo-3) `virtual` | Encode a single planar video frame. |
| `void` | [`createAudio`](#createaudio-1) `virtual` `override` | Create the audio encoder and add the stream to the output container. |
| `void` | [`freeAudio`](#freeaudio-1) `virtual` `override` | Flush and free the audio encoder and its stream. |
| `bool` | [`encodeAudio`](#encodeaudio) `virtual` | Encode a single interleaved audio frame. |
| `bool` | [`encodeAudio`](#encodeaudio-1) `virtual` | Encode a single planar audio frame. |
| `void` | [`flush`](#flush-9) `virtual` `override` | Flush any buffered or queued packets to the output container. |
| const [`EncoderOptions`](https://auscaster.com/icey/docs/api-reference/icy-av-EncoderOptions.md#encoderoptions) & | [`options`](#options-3) `virtual` `const` `override` |  |
| [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) * | [`video`](#video-2)  |  |
| [`AudioEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioEncoder.md#audioencoder) * | [`audio`](#audio-2)  |  |

---

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

### MultiplexEncoder

```cpp
MultiplexEncoder(const EncoderOptions & options = EncoderOptions())
```

[Defined in src/av/include/icy/av/multiplexencoder.h:46](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L46)

Construct the encoder with the given options.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `options` | const [`EncoderOptions`](https://auscaster.com/icey/docs/api-reference/icy-av-EncoderOptions.md#encoderoptions) & | The encoder configuration (input/output formats and file paths). |

---

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

### ~MultiplexEncoder

`noexcept` `override`

```cpp
~MultiplexEncoder() noexcept override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:47](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L47)

---

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

### MultiplexEncoder

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

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

Deleted constructor.

---

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

### operator=

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

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

Deleted assignment operator.

---

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

### MultiplexEncoder

```cpp
MultiplexEncoder(MultiplexEncoder &&) = delete
```

[Defined in src/av/include/icy/av/multiplexencoder.h:51](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L51)

Deleted constructor.

---

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

### operator=

```cpp
MultiplexEncoder & operator=(MultiplexEncoder &&) = delete
```

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

Deleted assignment operator.

---

<a id="init-7"></a>

### init

`virtual` `override`

```cpp
virtual void init() override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:55](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L55)

Open the output container, create codec streams, and write the format header.

#### Reimplements

- [`IEncoder::init`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#init-6)

---

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

### uninit

`virtual` `override`

```cpp
virtual void uninit() override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:58](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L58)

Flush encoded packets, write the format trailer, and close the output container.

#### Reimplements

- [`IEncoder::uninit`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#uninit)

---

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

### cleanup

`virtual` `override`

```cpp
virtual void cleanup() override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:61](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L61)

Release all resources allocated by [init()](#init-7) without writing a trailer.

#### Reimplements

- [`IEncoder::cleanup`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#cleanup)

---

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

### createVideo

`virtual` `override`

```cpp
virtual void createVideo() override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:64](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L64)

Create the video encoder and add the stream to the output container.

#### Reimplements

- [`IEncoder::createVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#createvideo)

---

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

### freeVideo

`virtual` `override`

```cpp
virtual void freeVideo() override
```

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

Flush and free the video encoder and its stream.

#### Reimplements

- [`IEncoder::freeVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#freevideo)

---

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

### encodeVideo

`virtual` `override`

```cpp
virtual bool encodeVideo(AVFrame * frame) override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:71](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L71)

Encode a single video frame. All frame values must be set, such as size, pixel format, and PTS.

#### Reimplements

- [`IEncoder::encodeVideo`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#encodevideo)

---

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

### encodeVideo

`virtual`

```cpp
virtual bool encodeVideo(uint8_t * buffer, int bufferSize, int width, int height, int64_t time = AV_NOPTS_VALUE)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:83](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L83)

Encode a single interleaved video frame. If the frame time is specified it should be the microseconds offset since the start of the input stream. If no time is specified a real-time value will be assigned to the frame.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `buffer` | `uint8_t *` | The raw video frame buffer. |
| `bufferSize` | `int` | The buffer size in bytes. |
| `width` | `int` | The frame width in pixels. |
| `height` | `int` | The frame height in pixels. |
| `time` | `int64_t` | The timestamp in microseconds, or AV_NOPTS_VALUE for realtime. |

---

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

### encodeVideo

`virtual`

```cpp
virtual bool encodeVideo(uint8_t * data, int linesize, int width, int height, int64_t time = AV_NOPTS_VALUE)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:93](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L93)

Encode a single planar video frame.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `data` | `uint8_t *` | Array of per-plane data pointers (up to 4 planes). |
| `linesize` | `int` | Array of per-plane byte strides. |
| `width` | `int` | The frame width in pixels. |
| `height` | `int` | The frame height in pixels. |
| `time` | `int64_t` | The timestamp in microseconds, or AV_NOPTS_VALUE for realtime. |

---

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

### createAudio

`virtual` `override`

```cpp
virtual void createAudio() override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:97](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L97)

Create the audio encoder and add the stream to the output container.

#### Reimplements

- [`IEncoder::createAudio`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#createaudio)

---

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

### freeAudio

`virtual` `override`

```cpp
virtual void freeAudio() override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:100](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L100)

Flush and free the audio encoder and its stream.

#### Reimplements

- [`IEncoder::freeAudio`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#freeaudio)

---

<a id="encodeaudio"></a>

### encodeAudio

`virtual`

```cpp
virtual bool encodeAudio(uint8_t * buffer, int numSamples, int64_t time = AV_NOPTS_VALUE)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:107](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L107)

Encode a single interleaved audio frame.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `buffer` | `uint8_t *` | The interleaved audio sample buffer. |
| `numSamples` | `int` | The number of samples per channel. |
| `time` | `int64_t` | The timestamp in microseconds, or AV_NOPTS_VALUE for realtime. |

---

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

### encodeAudio

`virtual`

```cpp
virtual bool encodeAudio(uint8_t * data, int numSamples, int64_t time = AV_NOPTS_VALUE)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:115](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L115)

Encode a single planar audio frame.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `data` | `uint8_t *` | Array of per-plane sample buffers (one per channel). |
| `numSamples` | `int` | The number of samples per channel. |
| `time` | `int64_t` | The timestamp in microseconds, or AV_NOPTS_VALUE for realtime. |

---

<a id="flush-9"></a>

### flush

`virtual` `override`

```cpp
virtual void flush() override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:119](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L119)

Flush any buffered or queued packets to the output container.

#### Reimplements

- [`IEncoder::flush`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#flush-2)

---

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

### options

`virtual` `const` `override`

```cpp
virtual const EncoderOptions & options() const override
```

[Defined in src/av/include/icy/av/multiplexencoder.h:122](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L122)

#### Returns
A read-only view of the encoder's configuration options.

#### Reimplements

- [`IEncoder::options`](https://auscaster.com/icey/docs/api-reference/icy-av-IEncoder.md#options-2)

---

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

### video

```cpp
VideoEncoder * video()
```

[Defined in src/av/include/icy/av/multiplexencoder.h:125](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L125)

#### Returns
The active [VideoEncoder](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder), or nullptr if video has not been created.

---

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

### audio

```cpp
AudioEncoder * audio()
```

[Defined in src/av/include/icy/av/multiplexencoder.h:128](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L128)

#### Returns
The active [AudioEncoder](https://auscaster.com/icey/docs/api-reference/icy-av-AudioEncoder.md#audioencoder), or nullptr if audio has not been created.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`EncoderOptions`](https://auscaster.com/icey/docs/api-reference/icy-av-EncoderOptions.md#encoderoptions) | [`_options`](#_options)  |  |
| `AVFormatContext *` | [`_formatCtx`](#_formatctx-1)  |  |
| std::unique_ptr< [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) > | [`_video`](#_video-1)  |  |
| std::unique_ptr< [`AudioEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioEncoder.md#audioencoder) > | [`_audio`](#_audio-1)  |  |
| `AVIOContext *` | [`_ioCtx`](#_ioctx)  |  |
| `std::unique_ptr< uint8_t[]>` | [`_ioBuffer`](#_iobuffer)  |  |
| `int64_t` | [`_videoPts`](#_videopts)  |  |
| `int64_t` | [`_audioPts`](#_audiopts)  |  |
| `std::mutex` | [`_mutex`](#_mutex-9)  |  |

---

<a id="_options"></a>

### _options

```cpp
EncoderOptions _options
```

Type: [`EncoderOptions`](https://auscaster.com/icey/docs/api-reference/icy-av-EncoderOptions.md#encoderoptions)

[Defined in src/av/include/icy/av/multiplexencoder.h:144](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L144)

---

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

### _formatCtx

```cpp
AVFormatContext * _formatCtx
```

[Defined in src/av/include/icy/av/multiplexencoder.h:145](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L145)

---

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

### _video

```cpp
std::unique_ptr< VideoEncoder > _video
```

Type: std::unique_ptr< [`VideoEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoEncoder.md#videoencoder) >

[Defined in src/av/include/icy/av/multiplexencoder.h:146](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L146)

---

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

### _audio

```cpp
std::unique_ptr< AudioEncoder > _audio
```

Type: std::unique_ptr< [`AudioEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioEncoder.md#audioencoder) >

[Defined in src/av/include/icy/av/multiplexencoder.h:147](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L147)

---

<a id="_ioctx"></a>

### _ioCtx

```cpp
AVIOContext * _ioCtx
```

[Defined in src/av/include/icy/av/multiplexencoder.h:148](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L148)

---

<a id="_iobuffer"></a>

### _ioBuffer

```cpp
std::unique_ptr< uint8_t[]> _ioBuffer
```

[Defined in src/av/include/icy/av/multiplexencoder.h:149](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L149)

---

<a id="_videopts"></a>

### _videoPts

```cpp
int64_t _videoPts
```

[Defined in src/av/include/icy/av/multiplexencoder.h:150](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L150)

---

<a id="_audiopts"></a>

### _audioPts

```cpp
int64_t _audioPts
```

[Defined in src/av/include/icy/av/multiplexencoder.h:151](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L151)

---

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

### _mutex

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

[Defined in src/av/include/icy/av/multiplexencoder.h:152](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L152)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `bool` | [`writeOutputPacket`](#writeoutputpacket)  |  |
| `bool` | [`updateStreamPts`](#updatestreampts)  | Convert input microseconds to the stream time base. |
| `void` | [`onVideoEncoded`](#onvideoencoded)  |  |
| `void` | [`onAudioEncoded`](#onaudioencoded)  |  |

---

<a id="writeoutputpacket"></a>

### writeOutputPacket

```cpp
bool writeOutputPacket(AVPacket & packet)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:133](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L133)

---

<a id="updatestreampts"></a>

### updateStreamPts

```cpp
bool updateStreamPts(AVStream * stream, int64_t * pts)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:139](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L139)

Convert input microseconds to the stream time base.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `stream` | `AVStream *` | The target stream for time base conversion. |
| `pts` | `int64_t *` | Pointer to the timestamp; converted in place. |

---

<a id="onvideoencoded"></a>

### onVideoEncoded

```cpp
void onVideoEncoded(av::VideoPacket & packet)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:141](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L141)

---

<a id="onaudioencoded"></a>

### onAudioEncoded

```cpp
void onAudioEncoded(av::AudioPacket & packet)
```

[Defined in src/av/include/icy/av/multiplexencoder.h:142](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/multiplexencoder.h#L142)
