Introduction
Annex F of ITU-T H.265 (01/2026, version 11) adds layers to HEVC. A layer is the set of
NAL units with one nuh_layer_id. The base layer has
nuh_layer_id 0 and is ordinary HEVC, so a decoder that knows nothing of the
annexes decodes it and ignores the rest. Annex G (multiview, MV-HEVC) uses layers for
views; Annex H (scalable, SHVC) uses them for spatial or quality layers; Annex I uses
them for the 3D extensions. Annexes G and H add no
syntax of their own except the SEI messages and profiles below: everything is the Annex F
syntax. All the Annex F structures extend the
VPS, SPS,
PPS and
slice segment header, whose single-layer
fields are unchanged unless stated here. The screen content coding extension (SCC) is not
part of these annexes: its syntax is already in the SPS, PPS, slice header and
slice data pages, and Annex F says that its
structures apply as written.
Layers, layer sets and output layer sets
The VPS lists its layers by layer index i, with
layer_id_in_nuh[i] the nuh_layer_id of each (i itself
when not sent). A layer set is a list of layers that can be extracted together; layer sets
with index 1 to vps_num_layer_sets_minus1 come from the base VPS, and
num_add_layer_sets more are built from independent layer trees in the
extension. An output layer set (OLS) picks one layer set and says which of its layers are
output. NumLayerSets = vps_num_layer_sets_minus1 + 1 + num_add_layer_sets and
NumOutputLayerSets = num_add_olss + NumLayerSets.
Each layer has a vector of 16 scalability identifiers selected by
scalability_mask_flag (Table F.1):
| Mask bit | Dimension | Variable |
|---|---|---|
| 0 | texture or depth | DepthLayerFlag |
| 1 | multiview | ViewOrderIdx |
| 2 | spatial or quality scalability | DependencyId |
| 3 | auxiliary pictures | AuxId |
| 4 to 15 | reserved |
AuxId (Table F.2): 0 not an auxiliary layer; 1 AUX_ALPHA, an
alpha plane (described by the alpha channel information SEI); 2 AUX_DEPTH, a
depth picture (described by the depth representation information SEI); 3 to 127 reserved;
128 to 159 unspecified, interpreted by other means (the overlay information SEI uses these);
160 to 255 reserved. Conforming streams use 0 to 2 or 128 to 159, decoders accept 0 to 255.
An alpha or depth layer has 4:0:0 chroma or constant mid-grey chroma samples, and layers
with AuxId 0 to 2 do not predict from a layer with a different
AuxId.
VPS extension (F.7.3.2.1.1)
Present when vps_extension_flag is 1 in the VPS (required when
vps_max_layers_minus1 > 0), after alignment bits equal to 1. The base VPS
fields are on the VPS page; here
vps_base_layer_internal_flag 0 means the base layer is supplied by other
means, and MaxLayersMinus1 counts the layers of the VPS (one less than their
number).
| Field | Coding | Condition | Meaning |
|---|---|---|---|
profile_tier_level(0, vps_max_sub_layers_minus1) | vps_max_layers_minus1 > 0 and base layer internal | an additional profile_tier_level structure | |
splitting_flag | u(1) | 1: the dimension_id values are not sent but cut out of the bits of nuh_layer_id | |
scalability_mask_flag[i] | u(1) × 16 | which of the dimensions of Table F.1 are present; NumScalabilityTypes counts them | |
dimension_id_len_minus1[j] | u(3) | j < NumScalabilityTypes − splitting_flag | bit length of the dimension_id of dimension j, minus 1. With splitting, the last length is inferred so the bits total 6 |
vps_nuh_layer_id_present_flag | u(1) | 1: layer_id_in_nuh is sent | |
layer_id_in_nuh[i] | u(6) | i from 1, flag | increasing with i |
dimension_id[i][j] | u(v) | i from 1, not splitting | identifier of dimension j for layer i, dimension_id_len_minus1[j] + 1 bits |
view_id_len | u(4) | bits of each view_id_val | |
view_id_val[i] | u(v) | i < NumViews, view_id_len > 0 | view identifier of view i; ViewId[layer] = view_id_val[ViewOrderIdx[layer]]; inferred 0 |
direct_dependency_flag[i][j] | u(1) | j < i | 1: layer j is a direct reference layer of layer i. DependencyFlag adds the indirect ones |
num_add_layer_sets | ue(v) | NumIndependentLayers > 1 | additional layer sets, 0 to 1023; must be above 0 when vps_base_layer_available_flag is 0 |
highest_layer_idx_plus1[i][j] | u(v) | j from 1 to NumIndependentLayers − 1 | how many layers of tree j go in additional layer set i, Ceil(Log2(NumLayersInTreePartition[j] + 1)) bits |
vps_sub_layers_max_minus1_present_flag, sub_layers_vps_max_minus1[i] | u(1), u(3) | maximum temporal sub-layers of each layer − 1; default vps_max_sub_layers_minus1 | |
max_tid_ref_present_flag, max_tid_il_ref_pics_plus1[i][j] | u(1), u(3) | j depends on i | 0: non-IRAP pictures of layer i are not used for inter-layer prediction of layer j; above 0: pictures with a higher TemporalId than value − 1 are not; default 7 |
default_ref_layers_active_flag | u(1) | 1: all direct reference layer pictures allowed by the previous fields are present in the access unit and in the inter-layer reference set | |
vps_num_profile_tier_level_minus1 | ue(v) | structures − 1, 0 to 63 (at least 1 with several layers) | |
vps_profile_present_flag[i] and profile_tier_level(…) | u(1) | i from 2 (1 without an internal base layer) | 0: profile and tier are inferred from the previous structure |
num_add_olss | ue(v) | NumLayerSets > 1 | output layer sets beyond the layer sets, 0 to 1023 |
default_output_layer_idc | u(2) | NumLayerSets > 1 | 0: every layer of each OLS 1 to vps_num_layer_sets_minus1 is an output layer; 1: only the highest nuh_layer_id; 2: output_layer_flag says; 3 reserved (treated as 2) |
layer_set_idx_for_ols_minus1[i] | u(v) | OLS i ≥ NumLayerSets and NumLayerSets > 2 | layer set of the OLS − 1, Ceil(Log2(NumLayerSets − 1)) bits |
output_layer_flag[i][j] | u(1) | OLS added or idc 2 | 1: layer j of OLS i is an output layer. Every OLS has at least one |
profile_tier_level_idx[i][j] | u(v) | necessary layer, several structures | index of the profile_tier_level structure for the layer; Ceil(Log2(vps_num_profile_tier_level_minus1 + 1)) bits. A necessary layer is an output layer or one that an output layer depends on |
alt_output_layer_flag[i] | u(1) | one output layer with reference layers | 1: when the output layer picture is missing or not output, the highest-layer picture among its reference layers that is output may be output instead |
vps_num_rep_formats_minus1 | ue(v) | number of rep_format() structures − 1, 0 to 255 | |
rep_format() × (count) | below | ||
rep_format_idx_present_flag | u(1) | more than one format | 1: vps_rep_format_idx is sent; otherwise Min(i, vps_num_rep_formats_minus1) |
vps_rep_format_idx[i] | u(v) | i from 0 or 1 | the format of layer i, Ceil(Log2(vps_num_rep_formats_minus1 + 1)) bits |
max_one_active_ref_layer_flag | u(1) | 1: at most one picture is used for inter-layer prediction per picture | |
vps_poc_lsb_aligned_flag | u(1) | 1: slice_pic_order_cnt_lsb is equal in all pictures of an access unit | |
poc_lsb_not_present_flag[i] | u(1) | layer i has no direct reference layer | 1: IDR pictures of the layer have no slice_pic_order_cnt_lsb |
dpb_size() | below | ||
direct_dep_type_len_minus2 | ue(v) | bit length of the dependency types − 2 (0 or 1 in conforming streams) | |
direct_dependency_all_layers_flag, direct_dependency_all_layers_type | u(1), u(v) | 1: one type for all direct dependencies | |
direct_dependency_type[i][j] | u(v) | flag 0, dependency exists | 0: layer j may be used for inter-layer sample prediction only; 1: motion prediction only; 2: both. Values 3 to 6 are for the 3D profiles; others reserved. Derived: VpsInterLayerSamplePredictionEnabled = (type + 1) & 1, VpsInterLayerMotionPredictionEnabled = ((type + 1) & 2) ? 1 : 0. Inferred 0 for a missing base layer |
vps_non_vui_extension_length, vps_non_vui_extension_data_byte[] | ue(v), u(8) | 0 to 4096 bytes, ignored by decoders | |
vps_vui_present_flag | u(1) | 1: alignment bits equal to 1 then vps_vui() |
After the extension, vps_extension2_flag introduces data that decoders of
these profiles ignore.
Representation format (F.7.3.2.1.2)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
pic_width_vps_in_luma_samples, pic_height_vps_in_luma_samples | u(16) each | picture size; multiples of MinCbSizeY. Inferred into the SPS fields of the same layer | |
chroma_and_bit_depth_vps_present_flag | u(1) | 1: the next four fields follow; else they copy the previous structure (1 in the first) | |
chroma_format_vps_idc | u(2) | flag | 0 to 3 |
separate_colour_plane_vps_flag | u(1) | idc 3 | |
bit_depth_vps_luma_minus8, bit_depth_vps_chroma_minus8 | u(4) each | flag | 0 to 8 |
conformance_window_vps_flag | u(1) | 1: four offsets follow | |
conf_win_vps_left_offset, _right_, _top_, _bottom_offset | ue(v) each | flag | inferred into the SPS conformance window; 0 when absent |
DPB size (F.7.3.2.1.3)
For each output layer set from 1 there is one sub-DPB per layer of its layer set. Layer
sets have MaxSubLayersInLayerSetMinus1 equal to the largest
sub_layers_vps_max_minus1 of their layers.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
sub_layer_flag_info_present_flag[i] | u(1) | per OLS | 1: sub_layer_dpb_info_present_flag is sent for sub-layers above 0 |
sub_layer_dpb_info_present_flag[i][j] | u(1) | j > 0 and the flag above | 1: sizes for sub-layer j follow; inferred 1 for j = 0 and 0 otherwise, in which case values repeat the previous sub-layer's |
max_vps_dec_pic_buffering_minus1[i][k][j] | ue(v) | sub-layer info present, necessary layer k (not an external base layer) | DPB size − 1 for that layer at highest temporal id j; non-decreasing in j |
max_vps_num_reorder_pics[i][j] | ue(v) | reordering limit of access units with an output picture | |
max_vps_latency_increase_plus1[i][j] | ue(v) | a value above 0 gives MaxVpsLatencyPictures, the latency limit |
VPS VUI (F.7.3.2.1.4 to F.7.3.2.1.6)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
cross_layer_pic_type_aligned_flag | u(1) | 1: all VCL units of an access unit have the same nal_unit_type | |
cross_layer_irap_aligned_flag | u(1) | previous flag 0 | 1: IRAP pictures are aligned across dependent layers (same type); inferred as vps_vui_present_flag |
all_layers_idr_aligned_flag | u(1) | previous flag 1 | 1: when one picture of an access unit is IRAP, all are IDR with the same type |
bit_rate_present_vps_flag, pic_rate_present_vps_flag | u(1) each | whether per-layer-set rates follow | |
bit_rate_present_flag[i][j], pic_rate_present_flag[i][j] | u(1) | per layer set i and sub-layer j | whether this subset's rates are sent |
avg_bit_rate[i][j], max_bit_rate[i][j] | u(16) each | bit rate flag | rate = (x & 16383) × 10(2 + (x >> 14)) bit/s (F-16); average and the upper bound over any 1/100 s window |
constant_pic_rate_idc[i][j] | u(2) | pic rate flag | 0 not constant, 1 constant, 2 may or may not be |
avg_pic_rate[i][j] | u(16) | pic rate flag | pictures per 256 seconds |
video_signal_info_idx_present_flag, vps_num_video_signal_info_minus1 | u(1), u(4) | whether several video_signal_info() structures are shared; default one per layer | |
video_signal_info(): video_vps_format u(3), video_full_range_vps_flag u(1), colour_primaries_vps, transfer_characteristics_vps, matrix_coeffs_vps u(8) | inferred into the VUI fields video_format, video_full_range_flag, colour_primaries, transfer_characteristics and matrix_coeffs of SPSs that use it | ||
vps_video_signal_info_idx[i] | u(4) | several structures | which structure layer i uses |
tiles_not_in_use_flag; tiles_in_use_flag[i], loop_filter_not_across_tiles_flag[i]; tile_boundaries_aligned_flag[i][j] | u(1) | not-in-use flag 0; the last one when both layers use tiles | restrictions on the PPS of the layers: tiles are off for all, or on for layer i (with loop filtering not across tiles); tile boundaries of layer i coincide with those of its j-th direct reference layer |
wpp_not_in_use_flag; wpp_in_use_flag[i] | u(1) | second one when not-in-use is 0 | 1: entropy_coding_sync_enabled_flag is 0 (or 1 for layer i) in every PPS used |
single_layer_for_non_irap_flag | u(1) | 1: access units have one picture, or two where the higher layer is an IRAP picture | |
higher_layer_irap_skip_flag | u(1) | 1: that higher IRAP picture has only P slices, no SAO, five_minus_max_num_merge_cand 4, no weighted prediction and every CU skipped, so it is the inter-layer reference picture derivation of H.8.1.4 applied to the lower picture | |
ilp_restricted_ref_layers_flag | u(1) | 1: per direct reference layer, a region that is not used for inter-layer prediction follows | |
min_spatial_segment_offset_plus1[i][j] | ue(v) | restricted flag | 0 to the picture size in CTBs; the spatial region of the reference layer picture that the current layer does not use, in slice segments, tiles or CTU rows |
ctu_based_offset_enabled_flag[i][j], min_horizontal_ctu_offset_plus1[i][j] | u(1), ue(v) | segment offset above 0 | 1: the region is given in CTUs together with a horizontal offset |
vps_vui_bsp_hrd_present_flag and vps_vui_bsp_hrd_params() | u(1) | bitstream partition HRD, below | |
base_layer_parameter_set_compatibility_flag[i] | u(1) | layer i has no direct reference layer | 1: the parameter sets of that layer meet the base layer constraints so a single-layer decoder can use them |
Bitstream partition HRD parameters (F.7.3.2.1.6)
vps_num_add_hrd_params ue(v) more
hrd_parameters() follow the VPS ones; each has
cprms_add_present_flag[i] u(1) (when the index is above 0) and
num_sub_layer_hrd_minus1[i] ue(v). Then for each output layer set
h from 1: num_signalled_partitioning_schemes[h]
ue(v); per scheme j:
num_partitions_in_scheme_minus1[h][j] ue(v) and a
layer_included_in_partition_flag[h][j][k][r] u(1) per
partition k and layer r; per scheme and sub-layer
t: num_bsp_schedules_minus1[h][i][t] ue(v), and per
schedule and partition bsp_hrd_idx[h][i][t][j][k] u(v) (when
more than one HRD structure exists) and bsp_sched_idx[h][i][t][j][k]
ue(v). They define bitstream partitions of an OLS and the delivery schedules
used by the bitstream partition buffer (F.13.2); the buffer model itself is not
reproduced here.
SPS (F.7.3.2.2)
The SPS syntax of the SPS page changes for layers
above 0. The first three-bit field is read as sps_ext_or_max_sub_layers_minus1:
with nuh_layer_id 0 it is sps_max_sub_layers_minus1; with a
higher layer, a value of 7 sets MultiLayerExtSpsFlag and
sps_max_sub_layers_minus1 is taken from the VPS. An SPS with
MultiLayerExtSpsFlag 1 is a short form, used by layers that depend on another
layer; an independent non-base layer must use the full form.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
sps_temporal_id_nesting_flag, profile_tier_level() | not MultiLayerExtSpsFlag | as in the single-layer SPS; absent in the short form | |
update_rep_format_flag | u(1) | short form | 1: sps_rep_format_idx follows; must be 0 when the VPS has one format |
sps_rep_format_idx | u(8) | flag | the VPS rep_format() to use for the layer instead of the one the VPS assigned. Chroma format, size, conformance window and bit depths are not sent and come from the chosen format |
sps_sub_layer_ordering_info_present_flag and the DPB fields | not short form | absent in the short form (the VPS DPB sizes apply) | |
sps_infer_scaling_list_flag | u(1) | short form, scaling lists enabled | 1: scaling lists come from another layer |
sps_scaling_list_ref_layer_id | u(6) | flag | nuh_layer_id of the layer whose scaling list is used |
sps_multilayer_extension_flag, sps_3d_extension_flag | u(1) | after sps_range_extension_flag | flags in the extension byte (sps_range_extension_flag, sps_multilayer_extension_flag, sps_3d_extension_flag, sps_scc_extension_flag, then 5 bits sps_extension_4bits) |
inter_view_mv_vert_constraint_flag | u(1) | in sps_multilayer_extension() | 1: the vertical component of motion vectors used for inter-layer prediction is at most 56 luma samples; inferred 0 |
PPS multilayer extension (F.7.3.2.3.4)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
poc_reset_info_present_flag | u(1) | 1: slice segment headers of slices using this PPS carry POC reset fields | |
pps_infer_scaling_list_flag | u(1) | 1: the scaling list data comes from the PPS active for layer pps_scaling_list_ref_layer_id | |
pps_scaling_list_ref_layer_id | u(6) | flag | 0 to 62; a reference layer of the current layer |
num_ref_loc_offsets | ue(v) | 0 to vps_max_layers_minus1 | |
ref_loc_offset_layer_id[i] | u(6) | per entry | the layer the offsets describe (it need not be a direct reference layer: auxiliary pictures use this too) |
scaled_ref_layer_offset_present_flag[i] | u(1) | 1: the four scaled offsets follow | |
scaled_ref_layer_left_offset, _top_, _right_, _bottom_offset | se(v) each | flag | −214 to 214 − 1, in units of SubWidthC or SubHeightC luma samples of the current picture: how the reference region maps into the current picture (positive left or top offsets put it inside, positive right or bottom offsets too). Inferred 0 |
ref_region_offset_present_flag[i] | u(1) | 1: the four reference region offsets follow | |
ref_region_left_offset, _top_, _right_, _bottom_offset | se(v) each | flag | same ranges, in units of the reference layer's chroma subsampling: the region of the reference picture that is used. Inferred 0 |
resample_phase_set_present_flag[i] | u(1) | 1: four phases follow (ignored when the layer is not a direct reference layer) | |
phase_hor_luma, phase_ver_luma | ue(v) each | flag | 0 to 31, inferred 0 |
phase_hor_chroma_plus8, phase_ver_chroma_plus8 | ue(v) each | flag | chroma phase + 8, 0 to 63. Horizontal inferred 8; vertical inferred 8 for 4:4:4, otherwise a value derived from the scaled and unscaled region heights |
colour_mapping_enabled_flag | u(1) | 1: a colour mapping may be applied to inter-layer reference pictures; colour_mapping_table() follows. Not allowed when pps_pic_parameter_set_id ≥ 8 |
Colour mapping table (F.7.3.2.3.5, F.7.3.2.3.6)
A three-dimensional look-up of octants over Y, Cb and Cr that predicts the colour of an inter-layer reference picture (for example BT.709 to BT.2020 or a bit-depth change).
| Field | Coding | Meaning |
|---|---|---|
num_cm_ref_layers_minus1 | ue(v) | reference layers − 1, 0 to 61 |
cm_ref_layer_id[i] | u(6) | the direct reference layers it applies to |
cm_octant_depth | u(2) | maximum split depth, 0 or 1; OctantNumC = 1 << cm_octant_depth |
cm_y_part_num_log2 | u(2) | log2 of luma partitions of the smallest octant; the sum with the depth is 0 to 3. PartNumY = 1 << cm_y_part_num_log2, OctantNumY = 1 << (cm_octant_depth + cm_y_part_num_log2) |
luma_bit_depth_cm_input_minus8, chroma_bit_depth_cm_input_minus8, luma_bit_depth_cm_output_minus8, chroma_bit_depth_cm_output_minus8 | ue(v) each | input depths equal the reference layer's; output depths are between the input depth and the picture's |
cm_res_quant_bits | u(2) | least significant bits added to res_coeff_q and res_coeff_r |
cm_delta_flc_bits_minus1 | u(2) | CMResLSBits = Max(0, 10 + BitDepthCmInputY − BitDepthCmOutputY − cm_res_quant_bits − (cm_delta_flc_bits_minus1 + 1)), the length of res_coeff_r |
cm_adapt_threshold_u_delta, cm_adapt_threshold_v_delta | se(v) each | only when the depth is 1; thresholds CMThreshU = delta + (1 << (BitDepthCmInputC − 1)) and likewise V; delta 0 when absent |
colour_mapping_octants(0, 0, 0, 0, 1 << cm_octant_depth) | recursive: a split_octant_flag u(1) (when the depth is below the maximum) splits an octant into eight; a leaf sends, for each of PartNumY luma parts and each of 4 coefficients j, coded_res_flag u(1), and when set for each of the three components c: res_coeff_q ue(v), res_coeff_r u(v) (CMResLSBits bits, absent when 0), and res_coeff_s u(1) when either is non-zero |
The residual is cmResCoeff = (1 − 2 · s) · (((q << CMResLSBits) + r) << cm_res_quant_bits)
(F-50). Each coefficient is that residual plus a prediction: for the first luma part of an
octant, 1024 for the diagonal terms (j equal to 0 for Y, 1 for Cb, 2 for Cr) and 0
otherwise; for later luma parts, the coefficient of the previous luma part (F-51). Results
lie in −211 to 211 − 1.
Slice segment header additions (F.7.3.6.1)
Elements added or changed in the slice segment header, all for layers or the extension bytes:
| Field | Coding | Condition | Meaning |
|---|---|---|---|
discardable_flag | u(1) | first of the num_extra_slice_header_bits | 1: the picture is not used for inter prediction or inter-layer prediction later, and can be dropped without affecting any other picture. Must be 0 for TRAIL_R, TSA_R, STSA_R, RASL_R and RADL_R. Inferred 0 |
cross_layer_bla_flag | u(1) | second extra bit | affects NoClrasOutputFlag and LayerResetFlag (F.8.1.3); 0 unless the picture is IDR in a layer without direct reference layers. Inferred 0 |
slice_reserved_flag[i] | u(1) | remaining extra bits | reserved |
slice_pic_order_cnt_lsb | u(v) | layer above 0 without poc_lsb_not_present_flag, or not IDR | so IDR pictures of enhancement layers may carry a POC LSB |
inter_layer_pred_enabled_flag | u(1) | layer above 0, not default_ref_layers_active_flag, with direct reference layers | 1: inter-layer prediction may be used for this picture |
num_inter_layer_ref_pics_minus1 | u(v) | flag 1, more than one direct reference layer, not max_one_active_ref_layer_flag | number of inter-layer reference pictures − 1 |
inter_layer_pred_layer_idc[i] | u(v) | flag 1, count differs from the number of direct reference layers | which direct reference layer supplies the i-th picture; increasing; inferred as the layer index when absent |
When slice_segment_header_extension_present_flag is 1, after slice_segment_header_extension_length ue(v) come these in order (the rest of the extension bytes are slice_segment_header_extension_data_bit): | |||
poc_reset_idc | u(2) | poc_reset_info_present_flag | 0 no POC reset; 1 only the most significant bits may be reset; 2 both MSBs and LSBs; 3 either, with extra information below. Equal in all pictures of an access unit; not 1 or 2 for RASL, RADL, sub-layer non-reference pictures, TemporalId above 0 or discardable pictures |
poc_reset_period_id | u(6) | poc_reset_idc not 0 | identifies the POC resetting period |
full_poc_reset_flag, poc_lsb_val | u(1), u(v) | poc_reset_idc 3 | 1: both MSBs and LSBs are reset; poc_lsb_val (log2_max_pic_order_cnt_lsb_minus4 + 4 bits) is used to derive the picture order count |
poc_msb_cycle_val_present_flag | u(1) | not PocMsbValRequiredFlag and vps_poc_lsb_aligned_flag | 1: poc_msb_cycle_val follows |
poc_msb_cycle_val | ue(v) | flag | used to derive the picture order count |
The NAL unit header and its nuh_layer_id are as in the
NAL units page. An AUD unit takes the lowest
nuh_layer_id of the access unit, and an end of sequence NAL unit with a given
layer id needs a coded picture of that layer in the access unit.
Multi-layer profiles
The general_profile_idc codes are on the
profile, tier and level page: 6 is
Multiview Main and Multiview Main 10, 7 Scalable Main and Scalable Main 10, 8 3D Main, 10 the
scalable format range extension profiles, 12 and 13 Multiview Extended and Extended 10.
For a layer in a
Multiview Main or Multiview Main 10 output layer set, the VPS has at most 16 representation
formats; every SPS is 4:2:0; the range extension coding tools and the PPS chroma QP offset
lists are off; CtbLog2SizeY is 4 to 6; scalability identifiers other than view
order and auxiliary are 0; a two-layer OLS has both layers as output; alt_output_layer_flag
is 0; and the layer of the view with ViewOrderIdx 1 sets inter_view_mv_vert_constraint_flag.
The base layer is Main (Main or Main 10 for the 10-bit profile). Scalable Main and
Scalable Main 10 have the same tool limits (no range or SCC extensions), at most one
reference layer picture that needs sample or motion processing per picture, at most four
direct and indirect reference layers, and only dependency and auxiliary identifiers.
Other profiles (Extended, format range, high throughput) and all level limits are in
G.11 and H.11 and are not reproduced.
Multi-layer SEI messages (F.14, G.14)
Annex D messages keep their meaning; the Annex F text extends the semantics of buffering period, picture timing, recovery point, structure of pictures, decoding unit information, scalable nesting, region refresh and coded region completion for layers. These are the new types, framed as on the SEI messages page.
| Type | Name | Fields and meaning |
|---|---|---|
| 160 | layers_not_present | lnp_sei_active_vps_id u(4), then layer_not_present_flag[i] u(1) for each layer of the VPS: 1 means no VCL units of layer i in the target access units (from this one to the next such message or the end of the CVS). A flag of 1 also requires 1 for every layer predicted from it |
| 161 | inter_layer_constrained_tile_sets | il_all_tiles_exact_sample_value_match_flag, il_one_tile_per_tile_set_flag u(1). If one tile per set: all_tiles_ilc_idc u(2). Else il_num_sets_in_message_minus1 ue(v), skipped_tile_set_present_flag u(1) (when more than one set), and per set ilcts_id ue(v) (0 to 255 and 512 up are for applications, 256 to 511 are inferred ids of single tiles), il_num_tile_rects_in_set_minus1 ue(v), per rectangle il_top_left_tile_idx and il_bottom_right_tile_idx ue(v) (tile raster order), ilc_idc u(2) and il_exact_sample_value_match_flag u(1) when the global flag is 0. ilc_idc 0: unconstrained, 1: no sample outside the associated reference tile set is used for inter-layer prediction, 2: no prediction block of the set uses an inter-layer reference picture, 3 reserved |
| 162 | bsp_nesting | inside a scalable nesting message: sei_ols_idx, sei_partitioning_scheme_idx, bsp_idx, num_seis_in_bsp_minus1 (0 to 63) ue(v), zero bits to the byte boundary, then that many sei_message()s that apply to the named bitstream partition |
| 163 | bsp_initial_arrival_time | inside bsp_nesting together with a buffering period message: nal_initial_arrival_delay[i] when NAL HRD parameters are present and vcl_initial_arrival_delay[i] when VCL ones are, u(v) each with the initial_cpb_removal_delay_length_minus1 + 1 bits of the HRD structure, one per delivery schedule of the partition |
| 164 | sub_bitstream_property | sb_property_active_vps_id u(4), num_additional_sub_streams_minus1 ue(v); per sub-stream sub_bitstream_mode u(2) (0 or 1 defined: the sub-bitstream extracted for the OLS and highest sub-layer, 1 with a further step; above 1 the rest is ignored), ols_idx_to_vps ue(v), highest_sublayer_id u(3), avg_sb_property_bit_rate, max_sb_property_bit_rate u(16) each |
| 165 | alpha_channel_info | alpha_channel_cancel_flag u(1) (1 ends the previous message for the layer); else alpha_channel_use_idc u(3) (0 multiply the primary picture by the alpha when blending, 1 do not, 2 unspecified, above 2 reserved), alpha_channel_bit_depth_minus8 u(3) (equal to the primary luma depth − 8), alpha_transparent_value and alpha_opaque_value u(v) of depth + 1 bits (equal values mean the picture is not for blending), alpha_channel_incr_flag u(1) (1: add one to values above the smaller of the two), alpha_channel_clip_flag u(1) and alpha_channel_clip_type_flag u(1) (0 snap to the nearer of the two end values, 1 clip to the larger). For auxiliary layers with AuxId 1 |
| 166 | overlay_info | overlay_info_cancel_flag; else overlay_content_aux_id_minus128, overlay_label_aux_id_minus128, overlay_alpha_aux_id_minus128 (0 to 31), overlay_element_label_value_length_minus8, num_overlays_minus1 (0 to 15) ue(v); per overlay overlay_idx ue(v) (0 to 255), language_overlay_present_flag u(1), overlay_content_layer_id u(6), overlay_label_present_flag with overlay_label_layer_id u(6), overlay_alpha_present_flag with overlay_alpha_layer_id u(6), and for labelled overlays num_overlay_elements_minus1 (0 to 255) and per element overlay_element_label_min, overlay_element_label_max u(v) (label picture value range of the element). Then zero bits to the byte boundary, per overlay overlay_language (RFC 5646 tag), overlay_name and overlay_element_names as zero-terminated strings, then overlay_info_persistence_flag u(1) (0: this picture only). Overlay layers have AuxId 128 to 159 |
| 167 | temporal_mv_prediction_constraints | prefix SEI, TemporalId 0 only: prev_pics_not_used_flag u(1) (1: no temporal motion vector of any earlier picture of the layers is used from here on, so decoders can discard stored motion), no_intra_layer_col_pic_flag u(1) (1: pictures use no temporal motion vector prediction from the same layer, only collocated pictures of other layers) |
| 168 | frame_field_info | ffinfo_pic_struct u(4), ffinfo_source_scan_type u(2), ffinfo_duplicate_flag u(1): the same meanings as pic_struct, source_scan_type and duplicate_flag of the picture timing SEI, per layer |
| 176 | three_dimensional_reference_displays_info | MV-HEVC form (G.14.2.3): prec_ref_display_width ue(v), ref_viewing_distance_flag u(1), prec_ref_viewing_dist ue(v), num_ref_displays_minus1 ue(v); per display left_view_id, right_view_id ue(v), exponent_ref_display_width u(6) and mantissa_ref_display_width u(v), the viewing distance pair when flagged, additional_shift_present_flag u(1) and num_sample_shift_plus512 u(10); then three_dimensional_reference_displays_extension_flag. No baseline is sent (the views name the pair). Numbers are the floating-point form of the H.264 acquisition message |
| 177 | depth_representation_info | G.14.2.4: z_near_flag, z_far_flag, d_min_flag, d_max_flag u(1), depth_representation_type ue(v) (0 inverse Z, 1 disparity, 2 Z, all uniform, 3 non-linear disparity, 4 to 15 reserved, Table G.3), disparity_ref_view_id ue(v) (0 to 1023, when a disparity flag), then depth_rep_info_element() for ZNear, ZFar, DMin, DMax in that order (da_sign_flag u(1), da_exponent u(7), da_mantissa_len_minus1 u(5), da_mantissa u(v)), then for type 3 depth_nonlinear_representation_num_minus1 and depth_nonlinear_representation_model[i] ue(v). It describes auxiliary pictures with AuxId 2; the view layout of the H.264 form is not repeated |
| 178 | multiview_scene_info | min_disparity se(v) (−1024 to 1023) and max_disparity_range ue(v) (0 to 2047): the minimum disparity and the range to the maximum, in luma samples, between spatially adjacent views. IRAP access unit, applies to the CVS |
| 179 | multiview_acquisition_info | G.14.2.6: intrinsic_param_flag, extrinsic_param_flag, then the same camera parameter structure as the H.264 message (with 3 × 3 rotation and a translation per view, rows and columns counted from 0), but without a num_views_minus1 field: the view count comes from the VPS |
| 180 | multiview_view_position | num_views_minus1 ue(v) (equal to NumViews − 1 of the VPS, 0 to 62), view_position[i] ue(v) (0 to 62): the left to right display order of the view with ViewOrderIdx i. IRAP access unit, applies to the CVS. No extension flag follows |
Type 181 (alternative depth information) belongs to Annex I and is on the 3D page.
Not covered on this page
The multi-layer decoding processes (F.8, G.8, H.8: layer-wise output, POC reset, inter-layer reference picture derivation, resampling, colour mapping), sub-bitstream extraction (F.10), the multi-layer HRD and bitstream partition buffer (F.13), the VUI of Annex F (F.15), the level tables of G.11.2 and H.11.2, the profile constraints of the Multiview Extended, format range and high throughput forms, and the semantics of the multi-layer extensions of the scalable nesting and decoding unit information SEI messages. Source: ITU-T H.265 (01/2026, version 11), Annexes F, G and H.