@UnstableApi
class NalUnitUtil


Utility methods for handling H.264/AVC and H.265/HEVC NAL units.

Summary

Nested types

Holds data parsed from a H.265 sequence parameter set NAL unit.

Holds data parsed from a picture parameter set NAL unit.

Holds data parsed from a H.264 sequence parameter set NAL unit.

Constants

const FloatArray<Float>!

Aspect ratios indexed by aspect_ratio_idc, in H.264 and H.265 SPSs.

const Int

Value for aspect_ratio_idc indicating an extended aspect ratio, in H.264 and H.265 SPSs.

const ByteArray<Byte>!

Four initial bytes that must prefix NAL units for decoding.

const Int

Access unit delimiter.

const Int

Coded slice of an IDR picture.

const Int

Coded slice of a non-IDR picture.

const Int

Coded slice data partition A.

const Int

Picture parameter set.

const Int

Prefix NAL unit.

const Int

Supplemental enhancement information.

const Int

Sequence parameter set.

Public functions

java-static Unit

Clears prefix flags, as used by findNalUnit.

java-static Unit

Discards data from the buffer up to the first SPS, where data.position() is interpreted as the length of the buffer.

java-static Int
findNalUnit(
    data: ByteArray!,
    startOffset: Int,
    endOffset: Int,
    prefixFlags: BooleanArray!
)

Finds the first NAL unit in data.

java-static Int
getH265NalUnitType(data: ByteArray!, offset: Int)

Returns the type of the H.265 NAL unit in data that starts at offset.

java-static Int
getNalUnitType(data: ByteArray!, offset: Int)

Returns the type of the NAL unit in data that starts at offset.

java-static Boolean
isNalUnitSei(mimeType: String?, nalUnitHeaderFirstByte: Byte)

Returns whether the NAL unit with the specified header contains supplemental enhancement information.

java-static NalUnitUtil.H265SpsData!
parseH265SpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int)

Parses a H.265 SPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsection 7.3.2.2.1.

java-static NalUnitUtil.H265SpsData!
parseH265SpsNalUnitPayload(
    nalData: ByteArray!,
    nalOffset: Int,
    nalLimit: Int
)

Parses a H.265 SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.265 (2019) subsection 7.3.2.2.1.

java-static NalUnitUtil.PpsData!
parsePpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int)

Parses a PPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2.

java-static NalUnitUtil.PpsData!
parsePpsNalUnitPayload(nalData: ByteArray!, nalOffset: Int, nalLimit: Int)

Parses a PPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2.

java-static NalUnitUtil.SpsData!
parseSpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int)

Parses a SPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1.

java-static NalUnitUtil.SpsData!
parseSpsNalUnitPayload(nalData: ByteArray!, nalOffset: Int, nalLimit: Int)

Parses a SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1.

java-static Int
unescapeStream(data: ByteArray!, limit: Int)

Unescapes data up to the specified limit, replacing occurrences of [0, 0, 3] with [0, 0].

Constants

ASPECT_RATIO_IDC_VALUES

const val ASPECT_RATIO_IDC_VALUESFloatArray<Float>!

Aspect ratios indexed by aspect_ratio_idc, in H.264 and H.265 SPSs.

EXTENDED_SAR

const val EXTENDED_SAR = 255: Int

Value for aspect_ratio_idc indicating an extended aspect ratio, in H.264 and H.265 SPSs.

NAL_START_CODE

const val NAL_START_CODEByteArray<Byte>!

Four initial bytes that must prefix NAL units for decoding.

NAL_UNIT_TYPE_AUD

const val NAL_UNIT_TYPE_AUD = 9: Int

Access unit delimiter.

NAL_UNIT_TYPE_IDR

const val NAL_UNIT_TYPE_IDR = 5: Int

Coded slice of an IDR picture.

NAL_UNIT_TYPE_NON_IDR

const val NAL_UNIT_TYPE_NON_IDR = 1: Int

Coded slice of a non-IDR picture.

NAL_UNIT_TYPE_PARTITION_A

const val NAL_UNIT_TYPE_PARTITION_A = 2: Int

Coded slice data partition A.

NAL_UNIT_TYPE_PPS

const val NAL_UNIT_TYPE_PPS = 8: Int

Picture parameter set.

NAL_UNIT_TYPE_PREFIX

const val NAL_UNIT_TYPE_PREFIX = 14: Int

Prefix NAL unit.

NAL_UNIT_TYPE_SEI

const val NAL_UNIT_TYPE_SEI = 6: Int

Supplemental enhancement information.

NAL_UNIT_TYPE_SPS

const val NAL_UNIT_TYPE_SPS = 7: Int

Sequence parameter set.

Public functions

clearPrefixFlags

java-static fun clearPrefixFlags(prefixFlags: BooleanArray!): Unit

Clears prefix flags, as used by findNalUnit.

Parameters
prefixFlags: BooleanArray!

The flags to clear.

discardToSps

java-static fun discardToSps(data: ByteBuffer!): Unit

Discards data from the buffer up to the first SPS, where data.position() is interpreted as the length of the buffer.

When the method returns, data.position() will contain the new length of the buffer. If the buffer is not empty it is guaranteed to start with an SPS.

Parameters
data: ByteBuffer!

Buffer containing start code delimited NAL units.

findNalUnit

java-static fun findNalUnit(
    data: ByteArray!,
    startOffset: Int,
    endOffset: Int,
    prefixFlags: BooleanArray!
): Int

Finds the first NAL unit in data.

If prefixFlags is null then the first three bytes of a NAL unit must be entirely contained within the part of the array being searched in order for it to be found.

When prefixFlags is non-null, this method supports finding NAL units whose first four bytes span data arrays passed to successive calls. To use this feature, pass the same prefixFlags parameter to successive calls. State maintained in this parameter enables the detection of such NAL units. Note that when using this feature, the return value may be 3, 2 or 1 less than startOffset, to indicate a NAL unit starting 3, 2 or 1 bytes before the first byte in the current array.

Parameters
data: ByteArray!

The data to search.

startOffset: Int

The offset (inclusive) in the data to start the search.

endOffset: Int

The offset (exclusive) in the data to end the search.

prefixFlags: BooleanArray!

A boolean array whose first three elements are used to store the state required to detect NAL units where the NAL unit prefix spans array boundaries. The array must be at least 3 elements long.

Returns
Int

The offset of the NAL unit, or endOffset if a NAL unit was not found.

getH265NalUnitType

java-static fun getH265NalUnitType(data: ByteArray!, offset: Int): Int

Returns the type of the H.265 NAL unit in data that starts at offset.

Parameters
data: ByteArray!

The data to search.

offset: Int

The start offset of a NAL unit. Must lie between -3 (inclusive) and data.length - 3 (exclusive).

Returns
Int

The type of the unit.

getNalUnitType

java-static fun getNalUnitType(data: ByteArray!, offset: Int): Int

Returns the type of the NAL unit in data that starts at offset.

Parameters
data: ByteArray!

The data to search.

offset: Int

The start offset of a NAL unit. Must lie between -3 (inclusive) and data.length - 3 (exclusive).

Returns
Int

The type of the unit.

isNalUnitSei

java-static fun isNalUnitSei(mimeType: String?, nalUnitHeaderFirstByte: Byte): Boolean

Returns whether the NAL unit with the specified header contains supplemental enhancement information.

Parameters
mimeType: String?

The sample MIME type, or null if unknown.

nalUnitHeaderFirstByte: Byte

The first byte of nal_unit().

Returns
Boolean

Whether the NAL unit with the specified header is an SEI NAL unit. False is returned if the MimeType is null.

parseH265SpsNalUnit

java-static fun parseH265SpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int): NalUnitUtil.H265SpsData!

Parses a H.265 SPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsection 7.3.2.2.1.

Parameters
nalData: ByteArray!

A buffer containing escaped SPS data.

nalOffset: Int

The offset of the NAL unit header in nalData.

nalLimit: Int

The limit of the NAL unit in nalData.

Returns
NalUnitUtil.H265SpsData!

A parsed representation of the SPS data.

parseH265SpsNalUnitPayload

java-static fun parseH265SpsNalUnitPayload(
    nalData: ByteArray!,
    nalOffset: Int,
    nalLimit: Int
): NalUnitUtil.H265SpsData!

Parses a H.265 SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.265 (2019) subsection 7.3.2.2.1.

Parameters
nalData: ByteArray!

A buffer containing escaped SPS data.

nalOffset: Int

The offset of the NAL unit payload in nalData.

nalLimit: Int

The limit of the NAL unit in nalData.

Returns
NalUnitUtil.H265SpsData!

A parsed representation of the SPS data.

parsePpsNalUnit

java-static fun parsePpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int): NalUnitUtil.PpsData!

Parses a PPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2.

Parameters
nalData: ByteArray!

A buffer containing escaped PPS data.

nalOffset: Int

The offset of the NAL unit header in nalData.

nalLimit: Int

The limit of the NAL unit in nalData.

Returns
NalUnitUtil.PpsData!

A parsed representation of the PPS data.

parsePpsNalUnitPayload

java-static fun parsePpsNalUnitPayload(nalData: ByteArray!, nalOffset: Int, nalLimit: Int): NalUnitUtil.PpsData!

Parses a PPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2.

Parameters
nalData: ByteArray!

A buffer containing escaped PPS data.

nalOffset: Int

The offset of the NAL unit payload in nalData.

nalLimit: Int

The limit of the NAL unit in nalData.

Returns
NalUnitUtil.PpsData!

A parsed representation of the PPS data.

parseSpsNalUnit

java-static fun parseSpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int): NalUnitUtil.SpsData!

Parses a SPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1.

Parameters
nalData: ByteArray!

A buffer containing escaped SPS data.

nalOffset: Int

The offset of the NAL unit header in nalData.

nalLimit: Int

The limit of the NAL unit in nalData.

Returns
NalUnitUtil.SpsData!

A parsed representation of the SPS data.

parseSpsNalUnitPayload

java-static fun parseSpsNalUnitPayload(nalData: ByteArray!, nalOffset: Int, nalLimit: Int): NalUnitUtil.SpsData!

Parses a SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1.

Parameters
nalData: ByteArray!

A buffer containing escaped SPS data.

nalOffset: Int

The offset of the NAL unit payload in nalData.

nalLimit: Int

The limit of the NAL unit in nalData.

Returns
NalUnitUtil.SpsData!

A parsed representation of the SPS data.

unescapeStream

java-static fun unescapeStream(data: ByteArray!, limit: Int): Int

Unescapes data up to the specified limit, replacing occurrences of [0, 0, 3] with [0, 0]. The unescaped data is returned in-place, with the return value indicating its length.

Executions of this method are mutually exclusive, so it should not be called with very large buffers.

Parameters
data: ByteArray!

The data to unescape.

limit: Int

The limit (exclusive) of the data to unescape.

Returns
Int

The length of the unescaped data.