# VideoConverter

<a id="videoconverter"></a>

# VideoConverter

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

struct VideoConverter
```

[Defined in src/av/include/icy/av/videoconverter.h:32](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L32)

Converts video frames between pixel formats and resolutions.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| `SwsContext *` | [`ctx`](#ctx-3)  | libswscale conversion context. |
| `AVFrame *` | [`oframe`](#oframe)  | Reusable output frame allocated by [create()](#create-8). |
| [`VideoCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) | [`iparams`](#iparams-3)  | Expected input video parameters. |
| [`VideoCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) | [`oparams`](#oparams-3)  | Target output video parameters. |

---

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

### ctx

```cpp
SwsContext * ctx
```

[Defined in src/av/include/icy/av/videoconverter.h:56](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L56)

libswscale conversion context.

---

<a id="oframe"></a>

### oframe

```cpp
AVFrame * oframe
```

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

Reusable output frame allocated by [create()](#create-8).

---

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

### iparams

```cpp
VideoCodec iparams
```

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

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

Expected input video parameters.

---

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

### oparams

```cpp
VideoCodec oparams
```

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

[Defined in src/av/include/icy/av/videoconverter.h:59](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L59)

Target output video parameters.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`VideoConverter`](#videoconverter-1)  |  |
|  | [`~VideoConverter`](#videoconverter-2) `virtual` `noexcept` |  |
|  | [`VideoConverter`](#videoconverter-3)  | Deleted constructor. |
| [`VideoConverter`](#videoconverter) & | [`operator=`](#operator-160)  | Deleted assignment operator. |
|  | [`VideoConverter`](#videoconverter-4)  | Deleted constructor. |
| [`VideoConverter`](#videoconverter) & | [`operator=`](#operator-161)  | Deleted assignment operator. |
| `void` | [`create`](#create-8) `virtual` | Initialise the libswscale context and allocate the output frame. Uses iparams and oparams to configure the conversion pipeline. Throws std::runtime_error if already initialised or if parameters are invalid. |
| `void` | [`close`](#close-17) `virtual` | Free the libswscale context and the output frame. |
| `AVFrame *` | [`convert`](#convert-1) `virtual` | Convert `iframe` to the output pixel format and resolution. The returned frame is owned by this converter and is overwritten on the next call. |

---

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

### VideoConverter

```cpp
VideoConverter()
```

[Defined in src/av/include/icy/av/videoconverter.h:34](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L34)

---

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

### ~VideoConverter

`virtual` `noexcept`

```cpp
virtual ~VideoConverter() noexcept
```

[Defined in src/av/include/icy/av/videoconverter.h:35](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L35)

---

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

### VideoConverter

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

[Defined in src/av/include/icy/av/videoconverter.h:37](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L37)

Deleted constructor.

---

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

### operator=

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

[Defined in src/av/include/icy/av/videoconverter.h:38](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L38)

Deleted assignment operator.

---

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

### VideoConverter

```cpp
VideoConverter(VideoConverter &&) = delete
```

[Defined in src/av/include/icy/av/videoconverter.h:39](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L39)

Deleted constructor.

---

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

### operator=

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

[Defined in src/av/include/icy/av/videoconverter.h:40](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L40)

Deleted assignment operator.

---

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

### create

`virtual`

```cpp
virtual void create()
```

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

Initialise the libswscale context and allocate the output frame. Uses iparams and oparams to configure the conversion pipeline. Throws std::runtime_error if already initialised or if parameters are invalid.

---

<a id="close-17"></a>

### close

`virtual`

```cpp
virtual void close()
```

[Defined in src/av/include/icy/av/videoconverter.h:48](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L48)

Free the libswscale context and the output frame.

---

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

### convert

`virtual`

```cpp
virtual AVFrame * convert(AVFrame * iframe)
```

[Defined in src/av/include/icy/av/videoconverter.h:54](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/videoconverter.h#L54)

Convert `iframe` to the output pixel format and resolution. The returned frame is owned by this converter and is overwritten on the next call. 
#### Returns
The converted output AVFrame.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `iframe` | `AVFrame *` | The source AVFrame; must match iparams dimensions and pixel format. |
