# AudioDecoder

<a id="audiodecoder"></a>

# AudioDecoder

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

struct AudioDecoder
```

[Defined in src/av/include/icy/av/audiodecoder.h:28](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiodecoder.h#L28)

> **Inherits:** [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext)

Decodes compressed audio packets into raw sample frames.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`AudioDecoder`](#audiodecoder-1) | `function` | Declared here |
| [`~AudioDecoder`](#audiodecoder-2) | `function` | Declared here |
| [`create`](#create-3) | `function` | Declared here |
| [`close`](#close-10) | `function` | Declared here |
| [`decode`](#decode-1) | `function` | Declared here |
| [`flush`](#flush-4) | `function` | Declared here |
| [`emitter`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#emitter-7) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`iparams`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#iparams) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`oparams`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#oparams) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`stream`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#stream-8) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`ctx`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#ctx) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`codec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#codec-5) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`frame`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#frame) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`resampler`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#resampler) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`outputFrameSize`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#outputframesize) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`time`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#time) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`pts`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#pts) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`seconds`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#seconds-3) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`error`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#error-8) | `variable` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-1) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`~AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-2) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-3) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#operator-149) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-4) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#operator-150) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`create`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#create-2) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`open`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#open-2) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`close`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#close-9) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`decode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#decode) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#encode) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#encode-1) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#encode-2) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#flush-3) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |
| [`recreateResampler`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#recreateresampler) | `function` | Inherited from [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext) |

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

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`emitter`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#emitter-7)  |  |
| `variable` | [`iparams`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#iparams)  | input parameters |
| `variable` | [`oparams`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#oparams)  | output parameters |
| `variable` | [`stream`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#stream-8)  | encoder or decoder stream |
| `variable` | [`ctx`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#ctx)  | encoder or decoder context |
| `variable` | [`codec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#codec-5)  | encoder or decoder codec |
| `variable` | [`frame`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#frame)  | last encoded or decoded frame |
| `variable` | [`resampler`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#resampler)  | audio resampler |
| `variable` | [`outputFrameSize`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#outputframesize)  | encoder or decoder output frame size |
| `variable` | [`time`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#time)  | stream time in codec time base |
| `variable` | [`pts`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#pts)  | last packet pts value |
| `variable` | [`seconds`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#seconds-3)  | audio time in seconds |
| `variable` | [`error`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#error-8)  | error message |
| `function` | [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-1)  |  |
| `function` | [`~AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-2) `virtual` `noexcept` |  |
| `function` | [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-3)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#operator-149)  | Deleted assignment operator. |
| `function` | [`AudioContext`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#audiocontext-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#operator-150)  | Deleted assignment operator. |
| `function` | [`create`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#create-2) `virtual` | Initialise the AVCodecContext with codec-specific defaults. Implemented by [AudioEncoder](https://auscaster.com/icey/docs/api-reference/icy-av-AudioEncoder.md#audioencoder) and [AudioDecoder](#audiodecoder). |
| `function` | [`open`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#open-2) `virtual` | Open the codec and create the resampler if input/output parameters differ. Throws std::runtime_error if the codec context has not been created. |
| `function` | [`close`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#close-9) `virtual` | Close the codec context, free the frame, and reset timestamps. |
| `function` | [`decode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#decode) `virtual` | Decode a compressed audio packet and emit the resulting samples. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#encode) `virtual` | Encode a buffer of interleaved audio samples. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#encode-1) `virtual` | Encode a buffer of planar audio samples. |
| `function` | [`encode`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#encode-2) `virtual` | Encode a single AVFrame. |
| `function` | [`flush`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#flush-3) `virtual` | Flush any frames buffered inside the codec and emit remaining output. |
| `function` | [`recreateResampler`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#recreateresampler) `virtual` | Recreate the [AudioResampler](https://auscaster.com/icey/docs/api-reference/icy-av-AudioResampler.md#audioresampler) using the current iparams and oparams. Called automatically by [open()](https://auscaster.com/icey/docs/api-reference/icy-av-AudioContext.md#open-2) when format conversion is required. |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`AudioDecoder`](#audiodecoder-1)  | Construct a decoder for the given stream. The codec parameters are read from the stream's codecpar. |
|  | [`~AudioDecoder`](#audiodecoder-2) `noexcept` `override` |  |
| `void` | [`create`](#create-3) `virtual` `override` | Initialise the AVCodecContext from the stream's codec parameters. |
| `void` | [`close`](#close-10) `virtual` `override` | Close and free the AVCodecContext and associated resources. |
| `bool` | [`decode`](#decode-1) `virtual` `override` | Decode the given compressed audio packet and emit the decoded samples. |
| `void` | [`flush`](#flush-4) `virtual` `override` | Flush any frames buffered inside the decoder. Call this after the last packet to retrieve all remaining decoded output. |

---

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

### AudioDecoder

```cpp
AudioDecoder(AVStream * stream)
```

[Defined in src/av/include/icy/av/audiodecoder.h:33](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/audiodecoder.h#L33)

Construct a decoder for the given stream. The codec parameters are read from the stream's codecpar.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `stream` | `AVStream *` | The AVStream to decode; must remain valid for the lifetime of this decoder. |

---

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

### ~AudioDecoder

`noexcept` `override`

```cpp
~AudioDecoder() noexcept override
```

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

---

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

### create

`virtual` `override`

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

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

Initialise the AVCodecContext from the stream's codec parameters.

#### Reimplements

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

---

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

### close

`virtual` `override`

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

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

Close and free the AVCodecContext and associated resources.

#### Reimplements

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

---

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

### decode

`virtual` `override`

```cpp
virtual bool decode(AVPacket & ipacket) override
```

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

Decode the given compressed audio packet and emit the decoded samples. 
#### Returns
True if one or more output frames were decoded and emitted, false otherwise.

#### Reimplements

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

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ipacket` | `AVPacket &` | The compressed audio packet to decode. |

---

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

### flush

`virtual` `override`

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

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

Flush any frames buffered inside the decoder. Call this after the last packet to retrieve all remaining decoded output.

#### Reimplements

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