NalUnitUtil
@UnstableApi
class NalUnitUtil
Utility methods for handling H.264/AVC and H.265/HEVC NAL units.
Summary
Nested types |
|---|
|
Holds data that maps NAL unit header layer ID to the internal layer info specified in VPS. |
|
Holds data parsed from a H.265 NAL unit header. |
|
Holds data parsed from a H.265 profile_tier_level() of either VPS or SPS. |
|
Holds a list of H.265 profile_tier_level()s and a corresponding list of indices. |
|
Holds data parsed from a H.265 rep_format() of VPS extension - vps_extension(). |
|
Holds a list of H.265 rep_format()s and a corresponding list of indices. |
|
Holds data parsed from a H.265 3D reference displays information SEI message. |
class NalUnitUtil.H265SpsDataHolds data parsed from a H.265 sequence parameter set NAL unit. |
|
Holds data parsed from a H.265 video_signal_info() of vps_vui() of vps_extension(). |
|
Holds a list of H.265 video_signal_info()s and a corresponding list of indices. |
class NalUnitUtil.H265VpsDataHolds data parsed from a H.265 video parameter set NAL unit. |
class NalUnitUtil.PpsDataHolds data parsed from a picture parameter set NAL unit. |
class NalUnitUtil.SpsDataHolds 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 |
EXTENDED_SAR = 255Value for aspect_ratio_idc indicating an extended aspect ratio, in H.264 and H.265 SPSs. |
const Int |
H.264 access unit delimiter. |
const Int |
H.264 coded slice of an IDR picture. |
const Int |
H.264 coded slice of a non-IDR picture. |
const Int |
H.264 coded slice data partition A. |
const Int |
H.264 picture parameter set. |
const Int |
H.264 prefix NAL unit. |
const Int |
H.264 supplemental enhancement information. |
const Int |
H.264 sequence parameter set. |
const Int |
H.264 unspecified NAL unit. |
const Int |
H.265 access unit delimiter (AUD_NUT). |
const Int |
H.265 coded slice segment of a broken link access picture (BLA_W_LP). |
const Int |
H.265 coded slice segment of a clean random access picture (CRA_NUT). |
const Int |
H.265 picture parameter set (PPS_NUT). |
const Int |
H.265 prefixed supplemental enhancement information (PREFIX_SEI_NUT). |
const Int |
H.265 coded slice segment of a random access skipped leading picture (RASL_R). |
const Int |
H.265 sequence parameter set (SPS_NUT). |
const Int |
H.265 suffixed supplemental enhancement information (SUFFIX_SEI_NUT). |
const Int |
H.265 unspecified NAL unit. |
const Int |
H.265 video parameter set (VPS_NUT). |
const ByteArray<Byte>! |
Four initial bytes that must prefix NAL units for decoding. |
const Int |
This property is deprecated. |
const Int |
This property is deprecated. |
const Int |
This property is deprecated. |
const Int |
This property is deprecated. |
const Int |
This property is deprecated. |
const Int |
NAL_UNIT_TYPE_PREFIX = 14This property is deprecated. |
const Int |
This property is deprecated. |
const Int |
This property is deprecated. |
Public functions |
|
|---|---|
java-static Unit |
clearPrefixFlags(prefixFlags: BooleanArray!)Clears prefix flags, as used by |
java-static Unit |
discardToSps(data: ByteBuffer!)Discards data from the buffer up to the first SPS, where |
java-static Int |
findNalUnit(Finds the first NAL unit in |
java-static String? |
getH265BaseLayerCodecsString(csdBuffers: (Mutable)List<ByteArray!>!)Returns a new RFC 6381 codecs description string specifically for the single-layer HEVC case. |
java-static Int |
getH265NalUnitType(data: ByteArray!, offset: Int)Returns the type of the H.265 NAL unit in |
java-static Int |
getNalUnitType(data: ByteArray!, offset: Int)Returns the type of the NAL unit in |
java-static Boolean |
isDependedOn(data: ByteArray!, offset: Int, length: Int, format: Format!)Returns whether the NAL unit starting with the given bytes can be depended on by subsequent NAL units in decoding order. |
java-static Boolean |
isH264NalUnitDependedOn(nalUnitHeaderFirstByte: Byte)Returns whether the H.264 NAL unit can be depended on by subsequent NAL units in decoding order. |
java-static Boolean |
isNalUnitSei(format: Format!, nalUnitHeaderFirstByte: Byte)Returns whether the NAL unit with the specified header contains supplemental enhancement information. |
java-static Boolean |
This function is deprecated. Use |
java-static Int |
numberOfBytesInNalUnitHeader(format: Format!)Returns the number of bytes in the NAL unit header. |
java-static NalUnitUtil.H265Sei3dRefDisplayInfoData? |
parseH265Sei3dRefDisplayInfo(Parses a H.265 3D reference displays information SEI message syntax defined in ITU-T Recommendation H.265 (2019) subsection G.14.2.3. |
java-static NalUnitUtil.H265SpsData! |
parseH265SpsNalUnit(Parses a H.265 SPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.2.1 and F.7.3.2.2.1. |
java-static NalUnitUtil.H265SpsData! |
parseH265SpsNalUnitPayload(Parses a H.265 SPS NAL unit payload (excluding the NAL unit header) using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.2.1 and F.7.3.2.2.1. |
java-static NalUnitUtil.H265VpsData! |
parseH265VpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int)Parses a H.265 VPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.1 and F.7.3.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 |
Constants
ASPECT_RATIO_IDC_VALUES
const val ASPECT_RATIO_IDC_VALUES: FloatArray<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.
H264_NAL_UNIT_TYPE_IDR
const val H264_NAL_UNIT_TYPE_IDR = 5: Int
H.264 coded slice of an IDR picture.
H264_NAL_UNIT_TYPE_NON_IDR
const val H264_NAL_UNIT_TYPE_NON_IDR = 1: Int
H.264 coded slice of a non-IDR picture.
H264_NAL_UNIT_TYPE_PARTITION_A
const val H264_NAL_UNIT_TYPE_PARTITION_A = 2: Int
H.264 coded slice data partition A.
H264_NAL_UNIT_TYPE_SEI
const val H264_NAL_UNIT_TYPE_SEI = 6: Int
H.264 supplemental enhancement information.
H264_NAL_UNIT_TYPE_UNSPECIFIED
const val H264_NAL_UNIT_TYPE_UNSPECIFIED = 24: Int
H.264 unspecified NAL unit.
H265_NAL_UNIT_TYPE_AUD
const val H265_NAL_UNIT_TYPE_AUD = 35: Int
H.265 access unit delimiter (AUD_NUT).
H265_NAL_UNIT_TYPE_BLA_W_LP
const val H265_NAL_UNIT_TYPE_BLA_W_LP = 16: Int
H.265 coded slice segment of a broken link access picture (BLA_W_LP).
H265_NAL_UNIT_TYPE_CRA
const val H265_NAL_UNIT_TYPE_CRA = 21: Int
H.265 coded slice segment of a clean random access picture (CRA_NUT).
H265_NAL_UNIT_TYPE_PPS
const val H265_NAL_UNIT_TYPE_PPS = 34: Int
H.265 picture parameter set (PPS_NUT).
H265_NAL_UNIT_TYPE_PREFIX_SEI
const val H265_NAL_UNIT_TYPE_PREFIX_SEI = 39: Int
H.265 prefixed supplemental enhancement information (PREFIX_SEI_NUT).
H265_NAL_UNIT_TYPE_RASL_R
const val H265_NAL_UNIT_TYPE_RASL_R = 9: Int
H.265 coded slice segment of a random access skipped leading picture (RASL_R).
H265_NAL_UNIT_TYPE_SPS
const val H265_NAL_UNIT_TYPE_SPS = 33: Int
H.265 sequence parameter set (SPS_NUT).
H265_NAL_UNIT_TYPE_SUFFIX_SEI
const val H265_NAL_UNIT_TYPE_SUFFIX_SEI = 40: Int
H.265 suffixed supplemental enhancement information (SUFFIX_SEI_NUT).
H265_NAL_UNIT_TYPE_UNSPECIFIED
const val H265_NAL_UNIT_TYPE_UNSPECIFIED = 48: Int
H.265 unspecified NAL unit.
H265_NAL_UNIT_TYPE_VPS
const val H265_NAL_UNIT_TYPE_VPS = 32: Int
H.265 video parameter set (VPS_NUT).
NAL_START_CODE
const val NAL_START_CODE: ByteArray<Byte>!
Four initial bytes that must prefix NAL units for decoding.
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 |
getH265BaseLayerCodecsString
java-static fun getH265BaseLayerCodecsString(csdBuffers: (Mutable)List<ByteArray!>!): String?
Returns a new RFC 6381 codecs description string specifically for the single-layer HEVC case. When falling back to single-layer HEVC from L-HEVC, both profile and level should be adjusted for the base layer case and the codecs description string should represent that. For the single-layer HEVC case, the string is derived from the SPS of the base layer.
| Parameters | |
|---|---|
csdBuffers: (Mutable)List<ByteArray!>! |
The CSD buffers that include the SPS of the base layer. |
| Returns | |
|---|---|
String? |
A RFC 6381 codecs string derived from the SPS of the base layer if such information is available, or null otherwise. |
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 |
| 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 |
| Returns | |
|---|---|
Int |
The type of the unit. |
isDependedOn
java-static fun isDependedOn(data: ByteArray!, offset: Int, length: Int, format: Format!): Boolean
Returns whether the NAL unit starting with the given bytes can be depended on by subsequent NAL units in decoding order.
isH264NalUnitDependedOn
java-static fun isH264NalUnitDependedOn(nalUnitHeaderFirstByte: Byte): Boolean
Returns whether the H.264 NAL unit can be depended on by subsequent NAL units in decoding order.
| Parameters | |
|---|---|
nalUnitHeaderFirstByte: Byte |
The first byte of nal_unit(). |
isNalUnitSei
java-static fun isNalUnitSei(format: Format!, nalUnitHeaderFirstByte: Byte): Boolean
Returns whether the NAL unit with the specified header contains supplemental enhancement information.
| Parameters | |
|---|---|
format: Format! |
The sample |
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 |
numberOfBytesInNalUnitHeader
java-static fun numberOfBytesInNalUnitHeader(format: Format!): Int
Returns the number of bytes in the NAL unit header.
The NAL unit header can be used to determine the NAL unit type and whether subsequent NAL units can depend on the current NAL unit.
This is nalUnitHeaderBytes from the H.264 spec, or the size of
nal_unit_header() in H.265.
parseH265Sei3dRefDisplayInfo
java-static fun parseH265Sei3dRefDisplayInfo(
nalData: ByteArray!,
nalOffset: Int,
nalLimit: Int
): NalUnitUtil.H265Sei3dRefDisplayInfoData?
Parses a H.265 3D reference displays information SEI message syntax defined in ITU-T Recommendation H.265 (2019) subsection G.14.2.3. Given a generic PREFIX_SEI NAL unit, only 3D reference displays information SEI is parsed, if exists.
| Parameters | |
|---|---|
nalData: ByteArray! |
A buffer containing escaped prefix SEI data. |
nalOffset: Int |
The offset of the NAL unit header in |
nalLimit: Int |
The limit of the NAL unit in |
| Returns | |
|---|---|
NalUnitUtil.H265Sei3dRefDisplayInfoData? |
A parsed representation of the PPS data. |
parseH265SpsNalUnit
java-static fun parseH265SpsNalUnit(
nalData: ByteArray!,
nalOffset: Int,
nalLimit: Int,
vpsData: NalUnitUtil.H265VpsData?
): NalUnitUtil.H265SpsData!
Parses a H.265 SPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.2.1 and F.7.3.2.2.1.
| Parameters | |
|---|---|
nalData: ByteArray! |
A buffer containing escaped SPS data. |
nalOffset: Int |
The offset of the NAL unit header in |
nalLimit: Int |
The limit of the NAL unit in |
vpsData: NalUnitUtil.H265VpsData? |
The VPS that the SPS refers to or |
| Returns | |
|---|---|
NalUnitUtil.H265SpsData! |
A parsed representation of the SPS data. |
parseH265SpsNalUnitPayload
java-static fun parseH265SpsNalUnitPayload(
nalData: ByteArray!,
nalOffset: Int,
nalLimit: Int,
nalHeader: NalUnitUtil.H265NalHeader!,
vpsData: NalUnitUtil.H265VpsData?
): 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) subsections 7.3.2.2.1 and F.7.3.2.2.1.
| Parameters | |
|---|---|
nalData: ByteArray! |
A buffer containing escaped SPS data. |
nalOffset: Int |
The offset of the NAL unit payload in |
nalLimit: Int |
The limit of the NAL unit in |
nalHeader: NalUnitUtil.H265NalHeader! |
The parsed representation of the NAL header. |
vpsData: NalUnitUtil.H265VpsData? |
The VPS that the SPS refers to or |
| Returns | |
|---|---|
NalUnitUtil.H265SpsData! |
A parsed representation of the SPS data. |
parseH265VpsNalUnit
java-static fun parseH265VpsNalUnit(nalData: ByteArray!, nalOffset: Int, nalLimit: Int): NalUnitUtil.H265VpsData!
Parses a H.265 VPS NAL unit using the syntax defined in ITU-T Recommendation H.265 (2019) subsections 7.3.2.1 and F.7.3.2.1.
| Parameters | |
|---|---|
nalData: ByteArray! |
A buffer containing escaped VPS data. |
nalOffset: Int |
The offset of the NAL unit header in |
nalLimit: Int |
The limit of the NAL unit in |
| Returns | |
|---|---|
NalUnitUtil.H265VpsData! |
A parsed representation of the VPS 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 |
nalLimit: Int |
The limit of the NAL unit in |
| 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 |
nalLimit: Int |
The limit of the NAL unit in |
| 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 |
nalLimit: Int |
The limit of the NAL unit in |
| 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 |
nalLimit: Int |
The limit of the NAL unit in |
| 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. |