# CodecSpecificDataUtil

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

*** ** * ** ***


```
@UnstableApi
public final class CodecSpecificDataUtil
```

<br />

*** ** * ** ***

Provides utilities for handling various types of codec-specific data.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil.MediaCodecProfileAndLevel` A tuple of profile and level constants for `https://developer.android.com/reference/android/media/MediaCodec.html`. |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#HAGC_T35_HEADER_LENGTH()` The length in bytes of the ITU-T T.35 header that prefixes HAGC (ST 2094-50) metadata in AV1 OBUs, HEVC SEIs and container metadata. |

| ### Public methods |
|---|---|
| `static https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildApvCodecString(byte[])(byte[] initializationData)` Returns an APV codec string based on the provided initialization data. |
| `static https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildAvcCodecString(int,int,int)( int profileIdc, int constraintsFlagsAndReservedZero2Bits, int levelIdc )` Builds an RFC 6381 AVC codec string using the provided parameters. |
| `static https://developer.android.com/reference/java/util/List.html<byte[]>` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildCea708InitializationData(boolean)(boolean isWideAspectRatio)` Returns initialization data for formats with MIME type `https://developer.android.com/reference/androidx/media3/common/MimeTypes#APPLICATION_CEA708()`. |
| `static https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildDolbyVisionCodecString(int,int)(int profile, int level)` Builds a Dolby Vision codec string using profile and level. |
| `static byte[]` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildDolbyVisionInitializationData(int,int)(int profile, int level)` Returns initialization data for Dolby Vision according to [Dolby Vision ISO MediaFormat (section 2.2) specification](https://dolby.my.salesforce.com/sfc/p/#700000009YuG/a/4u000000l6FB/076wHYEmyEfz09m0V1bo85_25hlUJjaiWTbzorNmYY4). |
| `static https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildH263CodecString(int,int)(int profile, int level)` Builds an RFC 6381 H263 codec string using profile and level. |
| `static https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildHevcCodecString(int,boolean,int,int,int[],int)( int generalProfileSpace, boolean generalTierFlag, int generalProfileIdc, int generalProfileCompatibilityFlags, int[] constraintBytes, int generalLevelIdc )` Builds an RFC 6381 HEVC codec string using the provided parameters. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildIamfCodecString(byte[])(byte[] initializationData)` Builds an RFC 6381 IAMF codec string from the given `initializationData`. |
| `static byte[]` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildNalUnit(byte[],int,int)(byte[] data, int offset, int length)` Constructs a NAL unit consisting of the NAL start code followed by the specified data. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable byte[]` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildVp9CodecPrivateFromUncompressedHeader(java.nio.ByteBuffer)(https://developer.android.com/reference/java/nio/ByteBuffer.html sample)` Builds VP9 CodecPrivate from the uncompressed header of the first frame. |
| `static https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<byte[]>` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#buildVp9CodecPrivateInitializationData(byte,byte,byte,byte)( byte profile, byte level, byte bitDepth, byte chromaSubsampling )` Returns initialization data in CodecPrivate format of VP9. |
| `static int` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#calculateMediaCodecDolbyVisionLevel(int,int,float)( int width, int height, float frameRate )` Calculates the Dolby Vision level based on resolution and frame rate. |
| `static int` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#dolbyVisionConstantToLevelNumber(int)(int levelConstant)` Returns Dolby Vision level number corresponding to the level constant. |
| `static int` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#dolbyVisionConstantToProfileNumber(int)(int profileConstant)` Returns Dolby Vision profile number corresponding to the profile constant. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Integer.html, https://developer.android.com/reference/java/lang/Integer.html>` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getCodecProfileAndLevel(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Returns profile and level (as defined by `https://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html`) corresponding to the codec description string (as defined by RFC 6381) of the given format. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getDolbyVisionBaseLayerMimeType(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Returns a Dolby Vision base layer codec MIME type of the provided `https://developer.android.com/reference/androidx/media3/common/Format`. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil.MediaCodecProfileAndLevel` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getHevcProfileAndLevel(java.lang.String,java.lang.String[],androidx.media3.common.ColorInfo)( https://developer.android.com/reference/java/lang/String.html codec, String[] parts, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/ColorInfo colorInfo )` Returns Hevc profile and level corresponding to the codec description string (as defined by RFC 6381) and it `https://developer.android.com/reference/androidx/media3/common/ColorInfo`. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil.MediaCodecProfileAndLevel` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getMediaCodecProfileAndLevel(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Returns the profile and level corresponding to the codec description string (as defined by RFC 6381) of the given format. |
| `static byte[]` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getOpusInitializationData(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Returns initialization data for Opus according to [RFC 7845: 5.1](https://tools.ietf.org/html/rfc7845#section-5.1). |
| `static https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Integer.html, https://developer.android.com/reference/java/lang/Integer.html>` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getVideoResolutionFromMpeg4VideoConfig(byte[])(byte[] videoSpecificConfig)` Parses an MPEG-4 Visual configuration information, as defined in ISO/IEC14496-2. |
| `static https://developer.android.com/reference/java/nio/ByteBuffer.html` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getVorbisInitializationData(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Creates the Vorbis initialization data (CodecPrivate). |
| `static int` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#h263ConstToLevelNumber(int)(int levelConst)` Maps Android MediaCodec constants to H.263 Level numbers. |
| `static int` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#h263ConstToProfileNumber(int)(int profileConst)` Maps Android MediaCodec constants to H.263 Profile numbers. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#isHagcMetadata(java.nio.ByteBuffer)(https://developer.android.com/reference/java/nio/ByteBuffer.html buffer)` Returns whether the given `https://developer.android.com/reference/java/nio/ByteBuffer.html` contains HAGC (ST 2094-50) ITU-T T.35 metadata, without consuming any bytes. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#isHagcMetadata(byte[],int)(byte[] data, int length)` Returns whether the given `data` contains HAGC (ST 2094-50) ITU-T T.35 metadata. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#isHagcTrack(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Returns whether the given `https://developer.android.com/reference/androidx/media3/common/Format` represents an HAGC (ST 2094-50) metadata track. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#isHdr10PlusMetadata(java.nio.ByteBuffer)(https://developer.android.com/reference/java/nio/ByteBuffer.html payload)` Returns whether the given `https://developer.android.com/reference/java/nio/ByteBuffer.html` contains HDR10+ metadata at the current position. |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#isHdr10PlusMetadata(java.nio.ByteBuffer,int,int)(https://developer.android.com/reference/java/nio/ByteBuffer.html buffer, int offset, int limit)` Returns whether the given `https://developer.android.com/reference/java/nio/ByteBuffer.html` contains HDR10+ metadata at the given offset. |
| `static int[]` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#parseAlacAudioSpecificConfig(byte[])(byte[] audioSpecificConfig)` Parses an ALAC AudioSpecificConfig (i.e. an [ALACSpecificConfig](https://github.com/macosforge/alac/blob/master/ALACMagicCookieDescription.txt)). |
| `static boolean` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#parseCea708InitializationData(java.util.List<byte[]>)(https://developer.android.com/reference/java/util/List.html<byte[]> initializationData)` Returns whether the CEA-708 closed caption service with the given initialization data is formatted for displays with 16:9 aspect ratio. |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable byte[][]` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#splitNalUnits(byte[])(byte[] data)` Splits an array of NAL units. |

## Constants

### HAGC_T35_HEADER_LENGTH

```
public static final int HAGC_T35_HEADER_LENGTH
```

The length in bytes of the ITU-T T.35 header that prefixes HAGC (ST 2094-50) metadata in AV1 OBUs, HEVC SEIs and container metadata.

## Public methods

### buildApvCodecString

```
public static String buildApvCodecString(byte[] initializationData)
```

Returns an APV codec string based on the provided initialization data.

Reference: [Codecs Parameter in APV ISO Base Media File Format](https://github.com/AcademySoftwareFoundation/openapv/blob/main/readme/apv_isobmff.md#sub-parameters-for-the-mime-tyype-codecs-parameter)

| Parameters |
|---|---|
| `byte[] initializationData` | The initialization data containing profile, level, and band information. |

| Returns |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html` | The generated APV codec string. |

### buildAvcCodecString

```
public static String buildAvcCodecString(
    int profileIdc,
    int constraintsFlagsAndReservedZero2Bits,
    int levelIdc
)
```

Builds an RFC 6381 AVC codec string using the provided parameters.

| Parameters |
|---|---|
| `int profileIdc` | The encoding profile. |
| `int constraintsFlagsAndReservedZero2Bits` | The constraint flags followed by the reserved zero 2 bits, all contained in the least significant byte of the integer. |
| `int levelIdc` | The encoding level. |

| Returns |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html` | An RFC 6381 AVC codec string built using the provided parameters. |

### buildCea708InitializationData

```
public static List<byte[]> buildCea708InitializationData(boolean isWideAspectRatio)
```

Returns initialization data for formats with MIME type `https://developer.android.com/reference/androidx/media3/common/MimeTypes#APPLICATION_CEA708()`.

| Parameters |
|---|---|
| `boolean isWideAspectRatio` | Whether the CEA-708 closed caption service is formatted for displays with 16:9 aspect ratio. |

| Returns |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<byte[]>` | Initialization data for formats with MIME type `https://developer.android.com/reference/androidx/media3/common/MimeTypes#APPLICATION_CEA708()`. |

### buildDolbyVisionCodecString

```
public static String buildDolbyVisionCodecString(int profile, int level)
```

Builds a Dolby Vision codec string using profile and level.

Reference: href="https://professionalsupport.dolby.com/s/article/What-is-Dolby-Vision-Profile?language=en_US", \>, Dolby Vision Profile and Level (section 2.3)

### buildDolbyVisionInitializationData

```
public static byte[] buildDolbyVisionInitializationData(int profile, int level)
```

Returns initialization data for Dolby Vision according to [Dolby Vision ISO MediaFormat (section 2.2) specification](https://dolby.my.salesforce.com/sfc/p/#700000009YuG/a/4u000000l6FB/076wHYEmyEfz09m0V1bo85_25hlUJjaiWTbzorNmYY4).

| Parameters |
|---|---|
| `int profile` | The Dolby Vision codec profile. This is the integer profile, not the `https://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html` constant. |
| `int level` | The Dolby Vision codec level. This is the integer level, not the `https://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html` constant. |

### buildH263CodecString

```
public static String buildH263CodecString(int profile, int level)
```

Builds an RFC 6381 H263 codec string using profile and level.

### buildHevcCodecString

```
public static String buildHevcCodecString(
    int generalProfileSpace,
    boolean generalTierFlag,
    int generalProfileIdc,
    int generalProfileCompatibilityFlags,
    int[] constraintBytes,
    int generalLevelIdc
)
```

Builds an RFC 6381 HEVC codec string using the provided parameters.

### buildIamfCodecString

```
public static @Nullable String buildIamfCodecString(byte[] initializationData)
```

Builds an RFC 6381 IAMF codec string from the given `initializationData`.

The format is defined by the [IAMF Codec Parameters String](https://aomediacodec.github.io/iamf/#codecsparameter) specification.

### buildNalUnit

```
public static byte[] buildNalUnit(byte[] data, int offset, int length)
```

Constructs a NAL unit consisting of the NAL start code followed by the specified data.

| Parameters |
|---|---|
| `byte[] data` | An array containing the data that should follow the NAL start code. |
| `int offset` | The start offset into `data`. |
| `int length` | The number of bytes to copy from `data` |

| Returns |
|---|---|
| `byte[]` | The constructed NAL unit. |

### buildVp9CodecPrivateFromUncompressedHeader

```
public static @Nullable byte[] buildVp9CodecPrivateFromUncompressedHeader(ByteBuffer sample)
```

Builds VP9 CodecPrivate from the uncompressed header of the first frame.

This method parses the uncompressed header of the first frame to extract the VP9 profile, bit depth, and chroma subsampling.

Refer to [6.2 of the VP9 bitstream specification](https://storage.googleapis.com/downloads.webmproject.org/docs/vp9/vp9-bitstream-specification-v0.7-20170222-draft.pdf) and [VP9 in ISO Media File Format](https://www.webmproject.org/vp9/mp4/#Semantics) for more details.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html sample` | The first frame's data. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable byte[]` | The CodecPrivate data for VP9 if parsing is successful, `null` otherwise. |

### buildVp9CodecPrivateInitializationData

```
public static ImmutableList<byte[]> buildVp9CodecPrivateInitializationData(
    byte profile,
    byte level,
    byte bitDepth,
    byte chromaSubsampling
)
```

Returns initialization data in CodecPrivate format of VP9.

Each feature of VP9 CodecPrivate is defined by the binary format of ID (1 byte), length (1 byte), and data (1 byte). See href="https://www.webmproject.org/docs/container/#vp9-codec-feature-metadata-codecprivate", \>, CodecPrivate format of VP9 for more details.

| Parameters |
|---|---|
| `byte profile` | The VP9 codec profile. |
| `byte level` | The VP9 codec level. |
| `byte bitDepth` | The bit depth of the luma and color components. |
| `byte chromaSubsampling` | The chroma subsampling. |

### calculateMediaCodecDolbyVisionLevel

```
public static int calculateMediaCodecDolbyVisionLevel(
    int width,
    int height,
    float frameRate
)
```

Calculates the Dolby Vision level based on resolution and frame rate.

Refer to [Dolby Vision profiles and levels](https://professionalsupport.dolby.com/s/article/What-is-Dolby-Vision-Profile) for more details.

| Parameters |
|---|---|
| `int width` | The video width in pixels. |
| `int height` | The video height in pixels. |
| `float frameRate` | The video frame rate in frames per second. |

| Returns |
|---|---|
| `int` | The Android MediaCodec constants for the Dolby Vision level, or -1 if it could not be determined. |

### dolbyVisionConstantToLevelNumber

```
public static int dolbyVisionConstantToLevelNumber(int levelConstant)
```

Returns Dolby Vision level number corresponding to the level constant.

| Parameters |
|---|---|
| `int levelConstant` | The Dolby Vision level constant. |

| Returns |
|---|---|
| `int` | The Dolby Vision level number. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if the level constant is not recognized. |

### dolbyVisionConstantToProfileNumber

```
public static int dolbyVisionConstantToProfileNumber(int profileConstant)
```

Returns Dolby Vision profile number corresponding to the profile constant.

| Parameters |
|---|---|
| `int profileConstant` | The Dolby Vision profile constant. |

| Returns |
|---|---|
| `int` | The Dolby Vision profile number. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if the profile constant is not recognized. |

### getCodecProfileAndLevel

```
public static @Nullable Pair<Integer, Integer> getCodecProfileAndLevel(Format format)
```

Returns profile and level (as defined by `https://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html`) corresponding to the codec description string (as defined by RFC 6381) of the given format.

Consider using `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil#getMediaCodecProfileAndLevel(androidx.media3.common.Format)` instead in order to distinguish between:

- The `format` doesn't contain profile and level info, or it is malformed.
- The `format` contains profile and level info, but it cannot be represented with constants from `https://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | Media format with a codec description string, as defined by RFC 6381. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Integer.html, https://developer.android.com/reference/java/lang/Integer.html>` | A pair (profile constant, level constant) if the codec of the `format` is well-formed and recognized, or null otherwise. |

### getDolbyVisionBaseLayerMimeType

```
public static @Nullable String getDolbyVisionBaseLayerMimeType(Format format)
```

Returns a Dolby Vision base layer codec MIME type of the provided `https://developer.android.com/reference/androidx/media3/common/Format`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The media format. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | A Dolby Vision base layer MIME type, or `null` if a Dolby Vision profile is not identified. |

### getHevcProfileAndLevel

```
public static @Nullable CodecSpecificDataUtil.MediaCodecProfileAndLevel getHevcProfileAndLevel(
    String codec,
    String[] parts,
    @Nullable ColorInfo colorInfo
)
```

Returns Hevc profile and level corresponding to the codec description string (as defined by RFC 6381) and it `https://developer.android.com/reference/androidx/media3/common/ColorInfo`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html codec` | The codec description string (as defined by RFC 6381). |
| `String[] parts` | The codec string split by ".". |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/ColorInfo colorInfo` | The `https://developer.android.com/reference/androidx/media3/common/ColorInfo`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil.MediaCodecProfileAndLevel` | A pair (profile constant, level constant) if profile and level are recognized, or `null` otherwise. |

### getMediaCodecProfileAndLevel

```
public static @Nullable CodecSpecificDataUtil.MediaCodecProfileAndLevel getMediaCodecProfileAndLevel(Format format)
```

Returns the profile and level corresponding to the codec description string (as defined by RFC 6381) of the given format.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | Media format with a codec description string, as defined by RFC 6381. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil.MediaCodecProfileAndLevel` | `https://developer.android.com/reference/androidx/media3/common/util/CodecSpecificDataUtil.MediaCodecProfileAndLevel` if the codec of the `format` is well-formed, or null otherwise. |

### getOpusInitializationData

```
public static byte[] getOpusInitializationData(Format format)
```

Returns initialization data for Opus according to [RFC 7845: 5.1](https://tools.ietf.org/html/rfc7845#section-5.1).

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The `https://developer.android.com/reference/androidx/media3/common/Format`. |

| Returns |
|---|---|
| `byte[]` | A byte array containing the Opus initialization data. |

### getVideoResolutionFromMpeg4VideoConfig

```
public static Pair<Integer, Integer> getVideoResolutionFromMpeg4VideoConfig(byte[] videoSpecificConfig)
```

Parses an MPEG-4 Visual configuration information, as defined in ISO/IEC14496-2.

| Parameters |
|---|---|
| `byte[] videoSpecificConfig` | A byte array containing the MPEG-4 Visual configuration information to parse. |

| Returns |
|---|---|
| `https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Integer.html, https://developer.android.com/reference/java/lang/Integer.html>` | A pair of the video's width and height. |

### getVorbisInitializationData

```
public static ByteBuffer getVorbisInitializationData(Format format)
```

Creates the Vorbis initialization data (CodecPrivate).

The format is as follows:

- Byte 1: The number of packets minus one. This is 2 for Vorbis, representing the Identification, Comment, and Setup headers.
- Bytes 2..n: The lengths of the first two packets (Identification and Comment headers), encoded using Xiph lacing. The length of the final packet (Setup header) is not explicitly stored.
- Bytes n+1 onwards: The Vorbis identification header, Vorbis comment header and the codec setup header.

See [A_VORBIS](https://www.matroska.org/technical/codec_specs.html) for CodecPrivate format of Vorbis.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The `https://developer.android.com/reference/androidx/media3/common/Format`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html` | A `https://developer.android.com/reference/java/nio/ByteBuffer.html` containing the assembled Vorbis CodecPrivate data. |

### h263ConstToLevelNumber

```
public static int h263ConstToLevelNumber(int levelConst)
```

Maps Android MediaCodec constants to H.263 Level numbers.

| Parameters |
|---|---|
| `int levelConst` | The MediaCodec H.263 level constant. |

| Returns |
|---|---|
| `int` | The H.263 level number, or -1 if the constant is not recognized. |

### h263ConstToProfileNumber

```
public static int h263ConstToProfileNumber(int profileConst)
```

Maps Android MediaCodec constants to H.263 Profile numbers.

| Parameters |
|---|---|
| `int profileConst` | The MediaCodec H.263 profile constant. |

| Returns |
|---|---|
| `int` | The H.263 profile number, or -1 if the constant is not recognized. |

### isHagcMetadata

```
public static boolean isHagcMetadata(ByteBuffer buffer)
```

Returns whether the given `https://developer.android.com/reference/java/nio/ByteBuffer.html` contains HAGC (ST 2094-50) ITU-T T.35 metadata, without consuming any bytes.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html buffer` | The payload data. |

### isHagcMetadata

```
public static boolean isHagcMetadata(byte[] data, int length)
```

Returns whether the given `data` contains HAGC (ST 2094-50) ITU-T T.35 metadata.

| Parameters |
|---|---|
| `byte[] data` | The payload data. |
| `int length` | The length of the payload data. |

### isHagcTrack

```
public static boolean isHagcTrack(Format format)
```

Returns whether the given `https://developer.android.com/reference/androidx/media3/common/Format` represents an HAGC (ST 2094-50) metadata track.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The format of the track. |

### isHdr10PlusMetadata

```
public static boolean isHdr10PlusMetadata(ByteBuffer payload)
```

Returns whether the given `https://developer.android.com/reference/java/nio/ByteBuffer.html` contains HDR10+ metadata at the current position.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html payload` | The `https://developer.android.com/reference/java/nio/ByteBuffer.html` to check. |

| Returns |
|---|---|
| `boolean` | Whether the payload contains HDR10+ metadata. |

### isHdr10PlusMetadata

```
public static boolean isHdr10PlusMetadata(ByteBuffer buffer, int offset, int limit)
```

Returns whether the given `https://developer.android.com/reference/java/nio/ByteBuffer.html` contains HDR10+ metadata at the given offset.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html buffer` | The `https://developer.android.com/reference/java/nio/ByteBuffer.html` to check. |
| `int offset` | The offset in the buffer to start checking from. |
| `int limit` | The limit in the buffer to stop checking at. |

| Returns |
|---|---|
| `boolean` | Whether the payload contains HDR10+ metadata. |

### parseAlacAudioSpecificConfig

```
public static int[] parseAlacAudioSpecificConfig(byte[] audioSpecificConfig)
```

Parses an ALAC AudioSpecificConfig (i.e. an [ALACSpecificConfig](https://github.com/macosforge/alac/blob/master/ALACMagicCookieDescription.txt)).

| Parameters |
|---|---|
| `byte[] audioSpecificConfig` | A byte array containing the AudioSpecificConfig to parse. |

| Returns |
|---|---|
| `int[]` | An int array consisting of the sample rate in Hz, the channel count and the bit depth. |

### parseCea708InitializationData

```
public static boolean parseCea708InitializationData(List<byte[]> initializationData)
```

Returns whether the CEA-708 closed caption service with the given initialization data is formatted for displays with 16:9 aspect ratio.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<byte[]> initializationData` | The initialization data to parse. |

| Returns |
|---|---|
| `boolean` | Whether the CEA-708 closed caption service is formatted for displays with 16:9 aspect ratio. |

### splitNalUnits

```
public static @Nullable byte[][] splitNalUnits(byte[] data)
```

Splits an array of NAL units.

If the input consists of NAL start code delimited units, then the returned array consists of the split NAL units, each of which is still prefixed with the NAL start code. For any other input, null is returned.

| Parameters |
|---|---|
| `byte[] data` | An array of data. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable byte[][]` | The individual NAL units, or null if the input did not consist of NAL start code delimited units. |