NalUnitUtil
@UnstableApi
public final class NalUnitUtil
Utility methods for handling H.264/AVC and H.265/HEVC NAL units.
Summary
Nested types |
|---|
public final class NalUnitUtil.H265LayerInfoHolds data that maps NAL unit header layer ID to the internal layer info specified in VPS. |
public final class NalUnitUtil.H265NalHeaderHolds data parsed from a H.265 NAL unit header. |
public final class NalUnitUtil.H265ProfileTierLevelHolds data parsed from a H.265 profile_tier_level() of either VPS or SPS. |
public final class NalUnitUtil.H265ProfileTierLevelsAndIndicesHolds a list of H.265 profile_tier_level()s and a corresponding list of indices. |
public final class NalUnitUtil.H265RepFormatHolds data parsed from a H.265 rep_format() of VPS extension - vps_extension(). |
public final class NalUnitUtil.H265RepFormatsAndIndicesHolds a list of H.265 rep_format()s and a corresponding list of indices. |
public final class NalUnitUtil.H265Sei3dRefDisplayInfoDataHolds data parsed from a H.265 3D reference displays information SEI message. |
public final class NalUnitUtil.H265SpsDataHolds data parsed from a H.265 sequence parameter set NAL unit. |
public final class NalUnitUtil.H265VideoSignalInfoHolds data parsed from a H.265 video_signal_info() of vps_vui() of vps_extension(). |
public final class NalUnitUtil.H265VideoSignalInfosAndIndicesHolds a list of H.265 video_signal_info()s and a corresponding list of indices. |
public final class NalUnitUtil.H265VpsDataHolds data parsed from a H.265 video parameter set NAL unit. |
public final class NalUnitUtil.PpsDataHolds data parsed from a picture parameter set NAL unit. |
public final class NalUnitUtil.SpsDataHolds data parsed from a H.264 sequence parameter set NAL unit. |
Constants |
|
|---|---|
static final float[] |
Aspect ratios indexed by aspect_ratio_idc, in H.264 and H.265 SPSs. |
static final int |
EXTENDED_SAR = 255Value for aspect_ratio_idc indicating an extended aspect ratio, in H.264 and H.265 SPSs. |
static final int |
H.264 access unit delimiter. |
static final int |
H.264 coded slice of an IDR picture. |
static final int |
H.264 coded slice of a non-IDR picture. |
static final int |
H.264 coded slice data partition A. |
static final int |
H.264 picture parameter set. |
static final int |
H.264 prefix NAL unit. |
static final int |
H.264 supplemental enhancement information. |
static final int |
H.264 sequence parameter set. |
static final int |
H.264 unspecified NAL unit. |
static final int |
H.265 access unit delimiter (AUD_NUT). |
static final int |
H.265 coded slice segment of a broken link access picture (BLA_W_LP). |
static final int |
H.265 coded slice segment of a clean random access picture (CRA_NUT). |
static final int |
H.265 picture parameter set (PPS_NUT). |
static final int |
H.265 prefixed supplemental enhancement information (PREFIX_SEI_NUT). |
static final int |
H.265 coded slice segment of a random access skipped leading picture (RASL_R). |
static final int |
H.265 sequence parameter set (SPS_NUT). |
static final int |
H.265 suffixed supplemental enhancement information (SUFFIX_SEI_NUT). |
static final int |
H.265 unspecified NAL unit. |
static final int |
H.265 video parameter set (VPS_NUT). |
static final byte[] |
Four initial bytes that must prefix NAL units for decoding. |
static final int |
This field is deprecated. |
static final int |
This field is deprecated. |
static final int |
This field is deprecated. |
static final int |
This field is deprecated. |
static final int |
This field is deprecated. |
static final int |
NAL_UNIT_TYPE_PREFIX = 14This field is deprecated. |
static final int |
This field is deprecated. |
static final int |
This field is deprecated. |
Public methods |
|
|---|---|
static void |
clearPrefixFlags(boolean[] prefixFlags)Clears prefix flags, as used by |
static void |
discardToSps(ByteBuffer data)Discards data from the buffer up to the first SPS, where |
static int |
findNalUnit(Finds the first NAL unit in |
static @Nullable String |
getH265BaseLayerCodecsString(List<byte[]> csdBuffers)Returns a new RFC 6381 codecs description string specifically for the single-layer HEVC case. |
static int |
getH265NalUnitType(byte[] data, int offset)Returns the type of the H.265 NAL unit in |
static int |
getNalUnitType(byte[] data, int offset)Returns the type of the NAL unit in |
static boolean |
isDependedOn(byte[] data, int offset, int length, Format format)Returns whether the NAL unit starting with the given bytes can be depended on by subsequent NAL units in decoding order. |
static boolean |
isH264NalUnitDependedOn(byte nalUnitHeaderFirstByte)Returns whether the H.264 NAL unit can be depended on by subsequent NAL units in decoding order. |
static boolean |
isNalUnitSei(Format format, byte nalUnitHeaderFirstByte)Returns whether the NAL unit with the specified header contains supplemental enhancement information. |
static boolean |
This method is deprecated. Use |
static int |
numberOfBytesInNalUnitHeader(Format format)Returns the number of bytes in the NAL unit header. |
static @Nullable 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. |
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. |
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. |
static NalUnitUtil.H265VpsData |
parseH265VpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)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. |
static NalUnitUtil.PpsData |
parsePpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)Parses a PPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2. |
static NalUnitUtil.PpsData |
parsePpsNalUnitPayload(byte[] nalData, int nalOffset, int nalLimit)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. |
static NalUnitUtil.SpsData |
parseSpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)Parses a SPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1. |
static NalUnitUtil.SpsData |
parseSpsNalUnitPayload(byte[] nalData, int nalOffset, int nalLimit)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. |
static int |
unescapeStream(byte[] data, int limit)Unescapes |
Constants
ASPECT_RATIO_IDC_VALUES
public static final float[] ASPECT_RATIO_IDC_VALUES
Aspect ratios indexed by aspect_ratio_idc, in H.264 and H.265 SPSs.
EXTENDED_SAR
public static final int EXTENDED_SAR = 255
Value for aspect_ratio_idc indicating an extended aspect ratio, in H.264 and H.265 SPSs.
H264_NAL_UNIT_TYPE_AUD
public static final int H264_NAL_UNIT_TYPE_AUD = 9
H.264 access unit delimiter.
H264_NAL_UNIT_TYPE_IDR
public static final int H264_NAL_UNIT_TYPE_IDR = 5
H.264 coded slice of an IDR picture.
H264_NAL_UNIT_TYPE_NON_IDR
public static final int H264_NAL_UNIT_TYPE_NON_IDR = 1
H.264 coded slice of a non-IDR picture.
H264_NAL_UNIT_TYPE_PARTITION_A
public static final int H264_NAL_UNIT_TYPE_PARTITION_A = 2
H.264 coded slice data partition A.
H264_NAL_UNIT_TYPE_PPS
public static final int H264_NAL_UNIT_TYPE_PPS = 8
H.264 picture parameter set.
H264_NAL_UNIT_TYPE_PREFIX
public static final int H264_NAL_UNIT_TYPE_PREFIX = 14
H.264 prefix NAL unit.
H264_NAL_UNIT_TYPE_SEI
public static final int H264_NAL_UNIT_TYPE_SEI = 6
H.264 supplemental enhancement information.
H264_NAL_UNIT_TYPE_SPS
public static final int H264_NAL_UNIT_TYPE_SPS = 7
H.264 sequence parameter set.
H264_NAL_UNIT_TYPE_UNSPECIFIED
public static final int H264_NAL_UNIT_TYPE_UNSPECIFIED = 24
H.264 unspecified NAL unit.
H265_NAL_UNIT_TYPE_AUD
public static final int H265_NAL_UNIT_TYPE_AUD = 35
H.265 access unit delimiter (AUD_NUT).
H265_NAL_UNIT_TYPE_BLA_W_LP
public static final int H265_NAL_UNIT_TYPE_BLA_W_LP = 16
H.265 coded slice segment of a broken link access picture (BLA_W_LP).
H265_NAL_UNIT_TYPE_CRA
public static final int H265_NAL_UNIT_TYPE_CRA = 21
H.265 coded slice segment of a clean random access picture (CRA_NUT).
H265_NAL_UNIT_TYPE_PPS
public static final int H265_NAL_UNIT_TYPE_PPS = 34
H.265 picture parameter set (PPS_NUT).
H265_NAL_UNIT_TYPE_PREFIX_SEI
public static final int H265_NAL_UNIT_TYPE_PREFIX_SEI = 39
H.265 prefixed supplemental enhancement information (PREFIX_SEI_NUT).
H265_NAL_UNIT_TYPE_RASL_R
public static final int H265_NAL_UNIT_TYPE_RASL_R = 9
H.265 coded slice segment of a random access skipped leading picture (RASL_R).
H265_NAL_UNIT_TYPE_SPS
public static final int H265_NAL_UNIT_TYPE_SPS = 33
H.265 sequence parameter set (SPS_NUT).
H265_NAL_UNIT_TYPE_SUFFIX_SEI
public static final int H265_NAL_UNIT_TYPE_SUFFIX_SEI = 40
H.265 suffixed supplemental enhancement information (SUFFIX_SEI_NUT).
H265_NAL_UNIT_TYPE_UNSPECIFIED
public static final int H265_NAL_UNIT_TYPE_UNSPECIFIED = 48
H.265 unspecified NAL unit.
H265_NAL_UNIT_TYPE_VPS
public static final int H265_NAL_UNIT_TYPE_VPS = 32
H.265 video parameter set (VPS_NUT).
NAL_START_CODE
public static final byte[] NAL_START_CODE
Four initial bytes that must prefix NAL units for decoding.
Public methods
clearPrefixFlags
public static void clearPrefixFlags(boolean[] prefixFlags)
Clears prefix flags, as used by findNalUnit.
| Parameters | |
|---|---|
boolean[] prefixFlags |
The flags to clear. |
discardToSps
public static void discardToSps(ByteBuffer data)
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 | |
|---|---|
ByteBuffer data |
Buffer containing start code delimited NAL units. |
findNalUnit
public static int findNalUnit(
byte[] data,
int startOffset,
int endOffset,
boolean[] prefixFlags
)
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 | |
|---|---|
byte[] data |
The data to search. |
int startOffset |
The offset (inclusive) in the data to start the search. |
int endOffset |
The offset (exclusive) in the data to end the search. |
boolean[] prefixFlags |
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
public static @Nullable String getH265BaseLayerCodecsString(List<byte[]> csdBuffers)
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 | |
|---|---|
List<byte[]> csdBuffers |
The CSD buffers that include the SPS of the base layer. |
getH265NalUnitType
public static int getH265NalUnitType(byte[] data, int offset)
Returns the type of the H.265 NAL unit in data that starts at offset.
| Parameters | |
|---|---|
byte[] data |
The data to search. |
int offset |
The start offset of a NAL unit. Must lie between |
| Returns | |
|---|---|
int |
The type of the unit. |
getNalUnitType
public static int getNalUnitType(byte[] data, int offset)
Returns the type of the NAL unit in data that starts at offset.
| Parameters | |
|---|---|
byte[] data |
The data to search. |
int offset |
The start offset of a NAL unit. Must lie between |
| Returns | |
|---|---|
int |
The type of the unit. |
isDependedOn
public static boolean isDependedOn(byte[] data, int offset, int length, Format format)
Returns whether the NAL unit starting with the given bytes can be depended on by subsequent NAL units in decoding order.
isH264NalUnitDependedOn
public static boolean isH264NalUnitDependedOn(byte nalUnitHeaderFirstByte)
Returns whether the H.264 NAL unit can be depended on by subsequent NAL units in decoding order.
| Parameters | |
|---|---|
byte nalUnitHeaderFirstByte |
The first byte of nal_unit(). |
isNalUnitSei
public static boolean isNalUnitSei(Format format, byte nalUnitHeaderFirstByte)
Returns whether the NAL unit with the specified header contains supplemental enhancement information.
| Parameters | |
|---|---|
Format format |
The sample |
byte nalUnitHeaderFirstByte |
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 |
isNalUnitSei
public static booleanisNalUnitSei(@Nullable String mimeType, byte nalUnitHeaderFirstByte)
numberOfBytesInNalUnitHeader
public static int numberOfBytesInNalUnitHeader(Format format)
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
public static @Nullable NalUnitUtil.H265Sei3dRefDisplayInfoData parseH265Sei3dRefDisplayInfo(
byte[] nalData,
int nalOffset,
int nalLimit
)
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 | |
|---|---|
byte[] nalData |
A buffer containing escaped prefix SEI data. |
int nalOffset |
The offset of the NAL unit header in |
int nalLimit |
The limit of the NAL unit in |
| Returns | |
|---|---|
@Nullable NalUnitUtil.H265Sei3dRefDisplayInfoData |
A parsed representation of the PPS data. |
parseH265SpsNalUnit
public static NalUnitUtil.H265SpsData parseH265SpsNalUnit(
byte[] nalData,
int nalOffset,
int nalLimit,
@Nullable NalUnitUtil.H265VpsData vpsData
)
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 | |
|---|---|
byte[] nalData |
A buffer containing escaped SPS data. |
int nalOffset |
The offset of the NAL unit header in |
int nalLimit |
The limit of the NAL unit in |
@Nullable NalUnitUtil.H265VpsData vpsData |
The VPS that the SPS refers to or |
| Returns | |
|---|---|
NalUnitUtil.H265SpsData |
A parsed representation of the SPS data. |
parseH265SpsNalUnitPayload
public static NalUnitUtil.H265SpsData parseH265SpsNalUnitPayload(
byte[] nalData,
int nalOffset,
int nalLimit,
NalUnitUtil.H265NalHeader nalHeader,
@Nullable NalUnitUtil.H265VpsData vpsData
)
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 | |
|---|---|
byte[] nalData |
A buffer containing escaped SPS data. |
int nalOffset |
The offset of the NAL unit payload in |
int nalLimit |
The limit of the NAL unit in |
NalUnitUtil.H265NalHeader nalHeader |
The parsed representation of the NAL header. |
@Nullable NalUnitUtil.H265VpsData vpsData |
The VPS that the SPS refers to or |
| Returns | |
|---|---|
NalUnitUtil.H265SpsData |
A parsed representation of the SPS data. |
parseH265VpsNalUnit
public static NalUnitUtil.H265VpsData parseH265VpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)
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 | |
|---|---|
byte[] nalData |
A buffer containing escaped VPS data. |
int nalOffset |
The offset of the NAL unit header in |
int nalLimit |
The limit of the NAL unit in |
| Returns | |
|---|---|
NalUnitUtil.H265VpsData |
A parsed representation of the VPS data. |
parsePpsNalUnit
public static NalUnitUtil.PpsData parsePpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)
Parses a PPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.2.
| Parameters | |
|---|---|
byte[] nalData |
A buffer containing escaped PPS data. |
int nalOffset |
The offset of the NAL unit header in |
int nalLimit |
The limit of the NAL unit in |
| Returns | |
|---|---|
NalUnitUtil.PpsData |
A parsed representation of the PPS data. |
parsePpsNalUnitPayload
public static NalUnitUtil.PpsData parsePpsNalUnitPayload(byte[] nalData, int nalOffset, int nalLimit)
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 | |
|---|---|
byte[] nalData |
A buffer containing escaped PPS data. |
int nalOffset |
The offset of the NAL unit payload in |
int nalLimit |
The limit of the NAL unit in |
| Returns | |
|---|---|
NalUnitUtil.PpsData |
A parsed representation of the PPS data. |
parseSpsNalUnit
public static NalUnitUtil.SpsData parseSpsNalUnit(byte[] nalData, int nalOffset, int nalLimit)
Parses a SPS NAL unit using the syntax defined in ITU-T Recommendation H.264 (2013) subsection 7.3.2.1.1.
| Parameters | |
|---|---|
byte[] nalData |
A buffer containing escaped SPS data. |
int nalOffset |
The offset of the NAL unit header in |
int nalLimit |
The limit of the NAL unit in |
| Returns | |
|---|---|
NalUnitUtil.SpsData |
A parsed representation of the SPS data. |
parseSpsNalUnitPayload
public static NalUnitUtil.SpsData parseSpsNalUnitPayload(byte[] nalData, int nalOffset, int nalLimit)
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 | |
|---|---|
byte[] nalData |
A buffer containing escaped SPS data. |
int nalOffset |
The offset of the NAL unit payload in |
int nalLimit |
The limit of the NAL unit in |
| Returns | |
|---|---|
NalUnitUtil.SpsData |
A parsed representation of the SPS data. |
unescapeStream
public static int unescapeStream(byte[] data, int limit)
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 | |
|---|---|
byte[] data |
The data to unescape. |
int limit |
The limit (exclusive) of the data to unescape. |
| Returns | |
|---|---|
int |
The length of the unescaped data. |