# IEncoder

<a id="iencoder"></a>

# IEncoder

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

class IEncoder
```

[Defined in src/av/include/icy/av/iencoder.h:81](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L81)

> **Inherits:** [`Stateful< EncoderState >`](https://auscaster.com/icey/docs/api-reference/icy-Stateful.md#stateful)
> **Subclassed by:** [`MultiplexEncoder`](https://auscaster.com/icey/docs/api-reference/icy-av-MultiplexEncoder.md#multiplexencoder)

This is the abstract class for all encoders.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`init`](#init-6) | `function` | Declared here |
| [`uninit`](#uninit) | `function` | Declared here |
| [`cleanup`](#cleanup) | `function` | Declared here |
| [`options`](#options-2) | `function` | Declared here |
| [`createVideo`](#createvideo) | `function` | Declared here |
| [`freeVideo`](#freevideo) | `function` | Declared here |
| [`encodeVideo`](#encodevideo) | `function` | Declared here |
| [`createAudio`](#createaudio) | `function` | Declared here |
| [`freeAudio`](#freeaudio) | `function` | Declared here |
| [`flush`](#flush-2) | `function` | Declared here |
| [`isNone`](#isnone) | `function` | Declared here |
| [`isReady`](#isready) | `function` | Declared here |
| [`isEncoding`](#isencoding) | `function` | Declared here |
| [`isActive`](#isactive) | `function` | Declared here |
| [`isStopped`](#isstopped) | `function` | Declared here |
| [`isError`](#iserror) | `function` | Declared here |
| [`Type`](#type-6) | `enum` | Declared here |
| [`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 [`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 Methods

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

---

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

### init

`virtual`

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

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

Initialise the encoder, open codec contexts, and transition to Ready or Encoding state.

#### Reimplemented by

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

---

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

### uninit

`virtual`

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

[Defined in src/av/include/icy/av/iencoder.h:96](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L96)

Flush remaining packets, close codec contexts, and release all encoder resources.

#### Reimplemented by

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

---

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

### cleanup

`virtual` `inline`

```cpp
virtual inline void cleanup()
```

[Defined in src/av/include/icy/av/iencoder.h:99](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L99)

Perform any additional cleanup after [uninit()](#uninit). Default is a no-op.

#### Reimplemented by

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

---

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

### options

`virtual` `const`

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

[Defined in src/av/include/icy/av/iencoder.h:102](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L102)

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

#### Reimplemented by

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

---

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

### createVideo

`virtual` `inline`

```cpp
virtual inline void createVideo()
```

[Defined in src/av/include/icy/av/iencoder.h:105](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L105)

Initialise the video codec context and stream.

#### Reimplemented by

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

---

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

### freeVideo

`virtual` `inline`

```cpp
virtual inline void freeVideo()
```

[Defined in src/av/include/icy/av/iencoder.h:108](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L108)

Free the video codec context and stream.

#### Reimplemented by

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

---

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

### encodeVideo

`virtual` `inline`

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

[Defined in src/av/include/icy/av/iencoder.h:113](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L113)

Encode a single AVFrame of video. 
#### Returns
True if a packet was successfully encoded and written.

#### Reimplemented by

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

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `frame` | `AVFrame *` | The source video frame; all fields (format, width, height, pts) must be set. |

---

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

### createAudio

`virtual` `inline`

```cpp
virtual inline void createAudio()
```

[Defined in src/av/include/icy/av/iencoder.h:116](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L116)

Initialise the audio codec context and stream.

#### Reimplemented by

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

---

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

### freeAudio

`virtual` `inline`

```cpp
virtual inline void freeAudio()
```

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

Free the audio codec context and stream.

#### Reimplemented by

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

---

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

### flush

`virtual` `inline`

```cpp
virtual inline void flush()
```

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

Flush any internally buffered packets to the output.

#### Reimplemented by

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

---

<a id="isnone"></a>

### isNone

`const` `inline`

```cpp
inline bool isNone() const
```

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

#### Returns
True if the encoder is in the None state.

---

<a id="isready"></a>

### isReady

`const` `inline`

```cpp
inline bool isReady() const
```

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

#### Returns
True if the encoder is ready but not yet encoding.

---

<a id="isencoding"></a>

### isEncoding

`virtual` `const` `inline`

```cpp
virtual inline bool isEncoding() const
```

[Defined in src/av/include/icy/av/iencoder.h:131](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L131)

#### Returns
True if the encoder is actively encoding.

---

<a id="isactive"></a>

### isActive

`virtual` `const` `inline`

```cpp
virtual inline bool isActive() const
```

[Defined in src/av/include/icy/av/iencoder.h:134](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L134)

#### Returns
True if the encoder is in the Ready or Encoding state.

---

<a id="isstopped"></a>

### isStopped

`virtual` `const` `inline`

```cpp
virtual inline bool isStopped() const
```

[Defined in src/av/include/icy/av/iencoder.h:137](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L137)

#### Returns
True if the encoder has stopped.

---

<a id="iserror"></a>

### isError

`virtual` `const` `inline`

```cpp
virtual inline bool isError() const
```

[Defined in src/av/include/icy/av/iencoder.h:140](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L140)

#### Returns
True if the encoder is in an error state.

## Public Types

| Name | Description |
|------|-------------|
| [`Type`](#type-6)  |  |

---

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

### Type

```cpp
enum Type
```

[Defined in src/av/include/icy/av/iencoder.h:84](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/iencoder.h#L84)

| Value | Description |
|-------|-------------|
| `None` | huh? |
| `Video` | video only |
| `Audio` | audio only |
| `Multiplex` | both video & audio |
