# Id3Decoder

Artifact: [androidx.media3:media3-extractor](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/extractor/metadata/id3/Id3Decoder.java+class:androidx.media3.extractor.metadata.id3.Id3Decoder)

*** ** * ** ***


```
@UnstableApi
public final class Id3Decoder extends SimpleMetadataDecoder
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.extractor.metadata.SimpleMetadataDecoder](https://developer.android.com/reference/androidx/media3/extractor/metadata/SimpleMetadataDecoder) ||
|   | ↳ | [androidx.media3.extractor.metadata.id3.Id3Decoder](https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder) |

*** ** * ** ***

Decodes ID3 tags.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder.FramePredicate` A predicate for determining whether individual frames should be decoded. |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#ID3_HEADER_LENGTH() = 10` Length of an ID3 tag header. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#ID3_TAG() = 4801587` The first three bytes of a well formed ID3 tag header. |
| `static final https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder.FramePredicate` | `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#NO_ARTWORK_PREDICATE()` A predicate that indicates artwork frames should not be decoded. |
| `static final https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder.FramePredicate` | `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#NO_FRAMES_PREDICATE()` A predicate that indicates no frames should be decoded. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#Id3Decoder()()` |
| `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#Id3Decoder(androidx.media3.extractor.metadata.id3.Id3Decoder.FramePredicate)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder.FramePredicate framePredicate)` |

| ### Public methods |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/Metadata` | `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#decode(byte[],int)(byte[] data, int size)` Decodes ID3 tags. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#isSupportedMajorVersion(int)(int majorVersion)` Returns whether the given major version number is supported by `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder`. |

| ### Protected methods |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/Metadata` | `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder#decode(androidx.media3.extractor.metadata.MetadataInputBuffer,java.nio.ByteBuffer)(https://developer.android.com/reference/androidx/media3/extractor/metadata/MetadataInputBuffer inputBuffer, https://developer.android.com/reference/java/nio/ByteBuffer.html buffer)` Called by `https://developer.android.com/reference/androidx/media3/extractor/metadata/SimpleMetadataDecoder#decode(androidx.media3.extractor.metadata.MetadataInputBuffer)` after input buffer validation has been performed. |

### Inherited methods

From [androidx.media3.extractor.metadata.SimpleMetadataDecoder](https://developer.android.com/reference/androidx/media3/extractor/metadata/SimpleMetadataDecoder) `final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/Metadata` `https://developer.android.com/reference/androidx/media3/extractor/metadata/SimpleMetadataDecoder#decode(androidx.media3.extractor.metadata.MetadataInputBuffer)(https://developer.android.com/reference/androidx/media3/extractor/metadata/MetadataInputBuffer inputBuffer)`

Decodes a `https://developer.android.com/reference/androidx/media3/common/Metadata` element from the provided input buffer.

## Constants

### ID3_HEADER_LENGTH

```
public static final int ID3_HEADER_LENGTH = 10
```

Length of an ID3 tag header.

### ID3_TAG

```
public static final int ID3_TAG = 4801587
```

The first three bytes of a well formed ID3 tag header.

### NO_ARTWORK_PREDICATE

```
public static final Id3Decoder.FramePredicate NO_ARTWORK_PREDICATE
```

A predicate that indicates artwork frames should not be decoded.

### NO_FRAMES_PREDICATE

```
public static final Id3Decoder.FramePredicate NO_FRAMES_PREDICATE
```

A predicate that indicates no frames should be decoded.

## Public constructors

### Id3Decoder

```
public Id3Decoder()
```

### Id3Decoder

```
public Id3Decoder(@Nullable Id3Decoder.FramePredicate framePredicate)
```

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder.FramePredicate framePredicate` | Determines which frames are decoded. May be null to decode all frames. |

## Public methods

### decode

```
public @Nullable Metadata decode(byte[] data, int size)
```

Decodes ID3 tags.

| Parameters |
|---|---|
| `byte[] data` | The bytes to decode ID3 tags from. |
| `int size` | Amount of bytes in `data` to read. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/Metadata` | A `https://developer.android.com/reference/androidx/media3/common/Metadata` object containing the decoded ID3 tags, or null if the data could not be decoded. |

### isSupportedMajorVersion

```
public static boolean isSupportedMajorVersion(int majorVersion)
```

Returns whether the given major version number is supported by `https://developer.android.com/reference/androidx/media3/extractor/metadata/id3/Id3Decoder`.

| Parameters |
|---|---|
| `int majorVersion` | The ID3v2 major version number. |

| Returns |
|---|---|
| `boolean` | Whether the major version is supported (ID3v2.2, ID3v2.3, or ID3v2.4). |

## Protected methods

### decode

```
protected @Nullable Metadata decode(MetadataInputBuffer inputBuffer, ByteBuffer buffer)
```

Called by `https://developer.android.com/reference/androidx/media3/extractor/metadata/SimpleMetadataDecoder#decode(androidx.media3.extractor.metadata.MetadataInputBuffer)` after input buffer validation has been performed.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/extractor/metadata/MetadataInputBuffer inputBuffer` | The input buffer to decode. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html buffer` | The input buffer's `https://developer.android.com/reference/androidx/media3/decoder/DecoderInputBuffer#data()`, for convenience. Validation by `https://developer.android.com/reference/androidx/media3/extractor/metadata/SimpleMetadataDecoder#decode(androidx.media3.extractor.metadata.MetadataInputBuffer)` guarantees that `https://developer.android.com/reference/java/nio/ByteBuffer.html#hasArray()`, `https://developer.android.com/reference/java/nio/Buffer.html#position()` and `https://developer.android.com/reference/java/nio/ByteBuffer.html#arrayOffset()` are `true`, `0` and `0` respectively. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/Metadata` | The decoded metadata object, or `null` if the metadata could not be decoded. |