Introduction
Annex F of ITU-T H.264 (06/2026, version 16) defines Scalable Video Coding. One SVC
stream holds a base layer that any ordinary H.264 decoder can play, plus enhancement
layers that add spatial resolution (dependency_id), quality
(quality_id) or frame rate (temporal_id). The base layer uses
plain NAL unit types 1 and 5. The enhancement layers use NAL unit type 20, a prefix NAL
unit (type 14) in front of each base layer slice, and a subset SPS (type 15). A decoder
that does not know Annex F skips types 14, 15 and 20 and decodes only the base layer.
Everything not listed here (macroblock prediction, transform, deblocking and the rest of
clauses 7 to 9) is unchanged from the main
syntax. The three layer identifiers are
NAL unit header fields.
NAL unit header SVC extension (F.7.3.1.1)
Present after the first header byte of NAL unit types 14 and 20 when
svc_extension_flag is 1. Together with the flag it is the three bytes
described on the NAL units page. The fields
of a prefix NAL unit apply as if they were in the NAL unit that follows it.
| Field | Coding | Meaning |
|---|---|---|
idr_flag | u(1) | 1: IDR picture, when dependency_id is the highest in the coded picture. In a prefix NAL unit 1 means the following unit has type 5, 0 means type 1. Replaces IdrPicFlag |
priority_id | u(6) | priority of the unit; used only by sub-bitstream extraction, not by decoding |
no_inter_layer_pred_flag | u(1) | 1: no inter-layer prediction for this slice. Must be 1 in a prefix NAL unit and 0 when type is 20 and quality_id > 0 |
dependency_id | u(3) | dependency (spatial) layer; 0 in prefix NAL units |
quality_id | u(4) | quality layer within the dependency layer; 0 in prefix NAL units |
temporal_id | u(3) | temporal layer; the same for every unit of an access unit and 0 when the access unit contains an IDR picture |
use_ref_base_pic_flag | u(1) | 1: inter prediction uses reference base pictures when present |
discardable_flag | u(1) | 1: no layer with a greater dependency_id uses this unit, in this or later pictures |
output_flag | u(1) | affects output and removal from the decoded picture buffer (Annex C); the same for every unit of a dependency representation |
reserved_three_2bits | u(2) | 3; decoders ignore it |
The combined layer number is DQId = (dependency_id << 4) + quality_id
(F-63). A type 20 unit never has DQId 0, because DQId 0 is the base layer.
nal_ref_idc is the same for all slices of a dependency representation, and a
prefix NAL unit has the nal_ref_idc of the unit after it.
Subset SPS and its SVC extension (F.7.3.2.1.4)
A subset SPS (type 15) starts with the ordinary SPS fields, then
seq_parameter_set_svc_extension() when profile_idc is 83 or 86,
then an optional svc_vui_parameters_present_flag that selects the
SVC VUI extension. The subset SPS layout is on the
sequence parameter set page. The extension:
| Field | Coding | Condition | Meaning |
|---|---|---|---|
inter_layer_deblocking_filter_control_present_flag | u(1) | 1: the slice header carries the inter-layer deblocking controls | |
extended_spatial_scalability_idc | u(2) | 0 no geometry parameters; 1 they are in this SPS; 2 they are in the slice headers (range 0 to 2) | |
chroma_phase_x_plus1_flag | u(1) | ChromaArrayType 1 or 2 | horizontal chroma phase in half luma samples; inferred 1 |
chroma_phase_y_plus1 | u(2) | ChromaArrayType 1 | vertical chroma phase, 0 to 2; inferred 1 |
seq_ref_layer_chroma_phase_x_plus1_flag | u(1) | idc 1, chroma present | same for the reference layer; inferred as chroma_phase_x_plus1_flag |
seq_ref_layer_chroma_phase_y_plus1 | u(2) | idc 1, chroma present | 0 to 2; inferred as chroma_phase_y_plus1 |
seq_scaled_ref_layer_left_offset, _top_, _right_, _bottom_offset | se(v) each | idc 1 | crop window of the resampled reference layer, −215 to 215 − 1. Left and right in units of 2 luma samples; top and bottom in units of 2 when frame_mbs_only_flag is 1 and 4 when it is 0; inferred 0 |
seq_tcoeff_level_prediction_flag | u(1) | 1: adaptive_tcoeff_level_prediction_flag follows | |
adaptive_tcoeff_level_prediction_flag | u(1) | previous flag | 1: slice headers carry tcoeff_level_prediction_flag; inferred 0 |
slice_header_restriction_flag | u(1) | 1 removes some slice header elements (see below) |
The offsets give the area of the current layer picture that the reference layer
covers. The scaled sizes are derived as
ScaledRefLayerPicWidthInSamplesL = PicWidthInMbs * 16 − left − right and the
same for height (F-66 to F-73), each offset being doubled, or quadrupled vertically for
interlaced coding. The scaled reference size is never smaller than the reference layer's
own size.
Prefix NAL unit (F.7.3.2.12.1)
Type 14, placed before each type 1 or 5 slice of a layer that carries it.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
store_ref_base_pic_flag | u(1) | nal_ref_idc not 0 | 1: also keep a reference base picture, an extra copy of the picture used for inter prediction but never output. Must be 0 when max_num_ref_frames is below 2 |
dec_ref_base_pic_marking() | (use_ref_base_pic_flag or store_ref_base_pic_flag) and not idr_flag | see below | |
additional_prefix_nal_unit_extension_flag | u(1) | nal_ref_idc not 0 | 0 in conforming streams; when 1, decoders ignore everything after it |
additional_prefix_nal_unit_extension_data_flag | u(1) repeated | while more_rbsp_data() | any value, ignored; then RBSP trailing bits |
When nal_ref_idc is 0 the unit holds only optional ignored data bits.
Reference base picture marking (F.7.3.3.5)
| Field | Coding | Meaning |
|---|---|---|
adaptive_ref_base_pic_marking_mode_flag | u(1) | 0 sliding window (first in, first out of short-term pictures); 1 adaptive, the commands follow (Table F-2) |
memory_management_base_control_operation | ue(v), repeated | Table F-3: 0 end of loop; 1 mark a short-term reference base picture unused; 2 mark a long-term reference base picture unused |
difference_of_base_pic_nums_minus1 | ue(v) | after operation 1: picture number difference of the picture to drop |
long_term_base_pic_num | ue(v) | after operation 2: long-term picture number to drop |
These commands run before the dec_ref_pic_marking() commands. They cannot
use operation 1 or 2 when that structure contains operation 5.
Slice header in scalable extension (F.7.3.3.4)
Used by type 20 units. Slice types are EP, EB and EI (Table F-1: 0 and 5 EP, 1 and 6 EB,
2 and 7 EI), equivalent to P, B and I. When idr_flag is 1 or
max_num_ref_frames is 0 the type must be EI. Fields in the order they appear,
with those named in the
main slice header having the same meaning
(computed for the layer, not the picture):
| Field | Coding | Condition | Meaning |
|---|---|---|---|
first_mb_in_slice, slice_type, pic_parameter_set_id | ue(v) each | as in the main header | |
colour_plane_id | u(2) | separate_colour_plane_flag | as in the main header |
frame_num | u(v) | log2_max_frame_num_minus4 + 4 bits; identifies the dependency representation | |
field_pic_flag, bottom_field_flag | u(1) | frame_mbs_only_flag 0 | as in the main header |
idr_pic_id | ue(v) | idr_flag 1 | 0 to 65535 |
pic_order_cnt_lsb, delta_pic_order_cnt_bottom, delta_pic_order_cnt[0..1] | as in the main header | picture order count; equal in every slice of a dependency representation | |
redundant_pic_cnt | ue(v) | redundant_pic_cnt_present_flag | |
Only when quality_id is 0; for quality layers above 0 all of this block is inferred from the slice with the same dependency_id and quality_id 0 that covers the first macroblock. | |||
direct_spatial_mv_pred_flag | u(1) | EB | must be 1 |
num_ref_idx_active_override_flag, num_ref_idx_l0_active_minus1, num_ref_idx_l1_active_minus1 | u(1), ue(v), ue(v) | EP or EB (l1 only EB) | as in the main header |
ref_pic_list_modification() | as in the main header | ||
base_pred_weight_table_flag | u(1) | weighted prediction for the slice type and no_inter_layer_pred_flag 0 | 1: weights are inferred from the reference layer; inferred 0 at quality 0 |
pred_weight_table() | weighted prediction and (no_inter_layer_pred_flag or not base_pred_weight_table_flag) | as in the main header | |
dec_ref_pic_marking() | nal_ref_idc not 0 | as in the main header | |
store_ref_base_pic_flag | u(1) | nal_ref_idc not 0 and not slice_header_restriction_flag | as in the prefix NAL unit |
dec_ref_base_pic_marking() | (use_ref_base_pic_flag or store_ref_base_pic_flag) and not idr_flag, same conditions | see above | |
| End of the quality 0 block. | |||
cabac_init_idc | ue(v) | CABAC and not EI | |
slice_qp_delta | se(v) | ||
disable_deblocking_filter_idc | ue(v) | deblocking_filter_control_present_flag | 0 to 6, see below |
slice_alpha_c0_offset_div2, slice_beta_offset_div2 | se(v) | idc not 1 | |
slice_group_change_cycle | u(v) | slice group map types 3 to 5 | |
Only when no_inter_layer_pred_flag is 0 and quality_id is 0: | |||
ref_layer_dq_id | ue(v) | DQId of the layer used for inter-layer prediction, 0 to DQId − 1. Inferred DQId − 1 when quality_id > 0, otherwise −1 | |
disable_inter_layer_deblocking_filter_idc | ue(v) | inter_layer_deblocking_filter_control_present_flag | 0 to 6, same meanings as the ordinary idc but for the reference layer's intra macroblocks before resampling. Must be 1 when there is no spatial change at quality 0 |
inter_layer_slice_alpha_c0_offset_div2, inter_layer_slice_beta_offset_div2 | se(v) | idc not 1 | −6 to 6; the filter offset is the value shifted left once (F-64, F-65) |
constrained_intra_resampling_flag | u(1) | 1: reference-layer slice boundaries act as picture boundaries for intra resampling (then the inter-layer deblocking idc is 1, 2 or 5) | |
ref_layer_chroma_phase_x_plus1_flag | u(1) | idc 2 and chroma present | |
ref_layer_chroma_phase_y_plus1 | u(2) | idc 2 and chroma present | 0 to 2 |
scaled_ref_layer_left_offset, _top_, _right_, _bottom_offset | se(v) each | extended_spatial_scalability_idc 2 | as in the SPS, per slice; inferred 0 above quality 0 and from the SPS otherwise |
Then, when no_inter_layer_pred_flag is 0: | |||
slice_skip_flag | u(1) | 1: no slice data follows; every macroblock is inferred (below) | |
num_mbs_in_slice_minus1 | ue(v) | skip flag 1 | macroblocks in the slice − 1 |
adaptive_base_mode_flag | u(1) | skip flag 0 | 1: base_mode_flag is sent per macroblock |
default_base_mode_flag | u(1) | adaptive flag 0 | inferred value of base_mode_flag |
adaptive_motion_prediction_flag | u(1) | skip 0 and default_base_mode_flag 0 | 1: motion prediction flags are sent per partition |
default_motion_prediction_flag | u(1) | adaptive motion flag 0 | inferred value of motion_prediction_flag_lX |
adaptive_residual_prediction_flag | u(1) | skip 0 | 1: residual_prediction_flag is sent per macroblock |
default_residual_prediction_flag | u(1) | adaptive residual flag 0 | inferred value of residual_prediction_flag |
tcoeff_level_prediction_flag | u(1) | adaptive_tcoeff_level_prediction_flag | 1: the alternative transform coefficient level prediction of F.8 is used. Inferred 0 when no inter-layer prediction, else the SPS value. Must be 0 when the spatial resolution changes |
scan_idx_start, scan_idx_end | u(4) each | not slice_header_restriction_flag and not slice_skip_flag | first and last coefficient scan positions coded in this slice (the slices of a quality layer split the coefficients between them); inferred 0 and 15 |
disable_deblocking_filter_idc in an EP, EB or EI slice may be 0 to 6:
0 filter all edges; 1 none; 2 all but slice boundaries; 3 two stages (non-boundary edges
as in 2, then the slice boundary edges); 4 luma edges only; 5 luma edges except slice
boundaries, no chroma; 6 no chroma, luma in two stages. When
no_inter_layer_pred_flag or tcoeff_level_prediction_flag is 1
it is 0 to 2.
With slice_skip_flag 1 each macroblock of the slice is inferred as:
base_mode_flag 1, residual_prediction_flag 1,
coded_block_pattern 0, no skip flag or run, mb_field_decoding_flag
0 and quantiser equal to the slice's. Every such macroblock must lie in the crop
window. slice_header_restriction_flag 1 drops
store_ref_base_pic_flag and the base marking from the slice header (they
stay in the prefix NAL unit) and scan_idx_*.
Slice data and macroblock layer in scalable extension (F.7.3.4.1, F.7.3.6)
slice_data_in_scalable_extension() has exactly the structure of
slice data, with
macroblock_layer_in_scalable_extension() in place of
macroblock_layer(). In a skipped macroblock of an EP slice the type is
P_Skip, in an EB slice B_Skip. The macroblock layer differs as follows.
| Element | Coding | Condition | Meaning |
|---|---|---|---|
base_mode_flag | u(1) or ae(v) | InCropWindow(CurrMbAddr) and adaptive_base_mode_flag | 1: partitioning, prediction modes and motion data are inferred from the reference layer (mb_type is then Mb_Inferred and is not sent). Not present: 0 outside the crop window or for a skipped macroblock, else default_base_mode_flag |
mb_type | ue(v) or ae(v) | not base_mode_flag | EI: I types of Table 7-11; EP: 0 to 4 P types of Table 7-13 then 5 to 30 I types; EB: 0 to 22 B types of Table 7-14 then 23 to 48 I types |
mb_pred_in_scalable_extension() and sub_mb_pred_in_scalable_extension() | not base_mode_flag | as mb_pred and sub_mb_pred with the elements below added | |
motion_prediction_flag_l0[mbPartIdx], motion_prediction_flag_l1[mbPartIdx] | u(1) or ae(v) | in crop window and adaptive_motion_prediction_flag; not a direct or opposite-list partition | 1: the motion vector is predicted from the reference layer (F.8) and the reference index is inferred, so ref_idx_lX is not sent. All l0 flags are sent before all l1 flags. Not present: 0 outside the crop window, else default_motion_prediction_flag |
residual_prediction_flag | u(1) or ae(v) | adaptive_residual_prediction_flag, not EI, in crop window, and (base_mode_flag or the macroblock is not intra) | 1: the residual is predicted from the reference layer. Not present: default_residual_prediction_flag under the same conditions, else 0 |
coded_block_pattern | me(v) or ae(v) | scan_idx_end ≥ scan_idx_start and (base_mode_flag or not Intra_16x16) | forced to 0 when scan_idx_end < scan_idx_start for non-Intra_16x16 macroblocks |
transform_size_8x8_flag | as in the main syntax, plus base_mode_flag as an alternative to the partition conditions | ||
mb_qp_delta and residual(scan_idx_start, scan_idx_end) | coded block pattern non-zero or Intra_16x16 | the residual covers only the scan positions of the slice |
InCropWindow(mbAddr) is true when no_inter_layer_pred_flag is 0
and the macroblock column is at least (ScaledRefLayerLeftOffset + 15) / 16
and below (ScaledRefLayerLeftOffset + ScaledRefLayerPicWidthInSamplesL) / 16,
and the rows (taken as mbY0 and mbY1 for an MBAFF pair) fall
between the corresponding vertical limits, using
scalMbH = 16 * (1 + field_pic_flag). The extra intra type I_BL
(Table F-5, prediction mode Intra_Base) is never coded: it is what
Mb_Inferred becomes when the reference layer macroblock is intra. For
parsing, Mb_Inferred is an inter type of one 16×16 partition.
Motion vectors keep the range −8192 to 8191.75. CAVLC and CABAC parsing have alternative
clauses (F.9.1 to F.9.3.3.2.2); the context index rules for the added
base_mode_flag and residual_prediction_flag are in F.9.3.
Profiles (F.10.1)
| Profile | How it is signalled | Main constraints |
|---|---|---|
| Scalable Baseline | profile_idc 83 | base layer is Baseline or Constrained Baseline (profile_idc 66, or 77 or 88; constraint_set0, 1, 2 flags all 1); only I, P, EI, EP and EB slices; 4:2:0, 8-bit, frame_mbs_only_flag 1, no transform bypass; 0 to 7 slice groups and only map type 2; spatial ratios of 1, 1.5 or 2 with offsets multiples of 16 |
| Scalable Constrained Baseline | profile_idc 83 and constraint_set5_flag 1 | the Scalable Baseline constraints with the additional limits of F.10.1.1.1 (not reproduced here) |
| Scalable High | profile_idc 86 | base layer is High (profile_idc 100, or 66, 77, 88 with constraint_set1_flag); I, P, B, EI, EP and EB slices; 4:2:0, 8-bit; one slice group; no redundant pictures; no arbitrary slice order |
| Scalable Constrained High | profile_idc 86 and constraint_set5_flag 1 | the Scalable High constraints with the additional limits of F.10.1.2.1 (not reproduced here) |
| Scalable High Intra | profile_idc 86 and constraint_set3_flag 1 | every picture is IDR; max_num_ref_frames 0; when present max_num_reorder_frames and max_dec_frame_buffering 0; dpb_output_delay 0 |
A Scalable Baseline decoder also accepts streams whose active SVC SPS have
profile_idc 86 with constraint_set0_flag 1, or 66 with constraint_set1_flag 1,
or 77 with constraint_set0_flag 1, or 88 with constraint_set0_flag and constraint_set1_flag
both 1. Layers above the base use subset SPS with profile_idc 83 or 86. Level
limits are in F.10.2 (not reproduced here); levels are the same codes as on
profiles and levels.
Sub-bitstream extraction (F.8.8.1)
Given targets pIdTarget (default 63), tIdTarget (7),
dIdTarget (7) and qIdTarget (15), the process marks every VCL
and filler data NAL unit whose priority_id > pIdTarget,
temporal_id > tIdTarget, dependency_id > dIdTarget, or
dependency_id = dIdTarget with quality_id > qIdTarget.
Access units with every VCL unit marked are removed, then the marked units. For
dIdTarget and qIdTarget both 0 it also removes all units of type 14 and 15 and SEI units
whose first message has type 24 to 35. SEI units holding only scalable-nested messages
with a larger temporal id, or a larger smallest DQId, than the target go, as do SEI
units with message types 24, 28 or 29. Every such sub-bitstream is itself conforming.
The base layer bitstream (F.8.8.2) is the result for targets 0 and 0 and always conforms
to a profile of Annex A.
SVC VUI extension (F.14.1)
Sent in the subset SPS VUI when svc_vui_parameters_present_flag is 1. It
gives timing and HRD data per subset of the coded video sequences.
| Field | Coding | Meaning |
|---|---|---|
vui_ext_num_entries_minus1 | ue(v) | entries − 1, 0 to 1023 |
vui_ext_dependency_id[i], vui_ext_quality_id[i], vui_ext_temporal_id[i] | u(3), u(4), u(3) | the highest layer values of the subset; no two entries repeat a triple |
vui_ext_timing_info_present_flag[i] | u(1) | 1: the next three follow |
vui_ext_num_units_in_tick[i], vui_ext_time_scale[i] | u(32) each | as num_units_in_tick and time_scale in the VUI |
vui_ext_fixed_frame_rate_flag[i] | u(1) | as fixed_frame_rate_flag |
vui_ext_nal_hrd_parameters_present_flag[i], then hrd_parameters() | u(1) | NAL HRD parameters of the subset |
vui_ext_vcl_hrd_parameters_present_flag[i], then hrd_parameters() | u(1) | VCL HRD parameters of the subset |
vui_ext_low_delay_hrd_flag[i] | u(1) | when either HRD flag is 1 |
vui_ext_pic_struct_present_flag[i] | u(1) | as pic_struct_present_flag |
SVC SEI messages (F.13)
Twelve message types are added, 24 to 35, using the SEI framing of the
SEI messages page. Earlier messages of types 0 to
23 and a few later ones keep their meaning but, when not nested, apply to the layer
representations with dependency_id 0 and quality_id 0.
| Type | Name | Fields and meaning |
|---|---|---|
| 24 | scalability_info | describes the scalable layers; below. Only in an IDR access unit and never nested |
| 25 | sub_pic_scalable_layer | layer_id ue(v), 0 to 2047: ties the slice group set of the motion-constrained slice group set message that precedes it to a sub-picture scalable layer |
| 26 | non_required_layer_rep | num_info_entries_minus1 ue(v), 0 to 7; per entry entry_dependency_id u(3) (increasing), num_non_required_layer_reps_minus1 ue(v), 0 to 127, then per item non_required_layer_rep_dependency_id u(3) and _quality_id u(4): layer representations (and those of higher quality in the same dependency) not needed to decode that dependency representation or the following pictures |
| 27 | priority_layer_info | pr_dependency_id u(3), num_priority_ids u(4), then alt_priority_id[i] u(6): replacement priority_id for quality i of that dependency |
| 28 | layers_not_present | num_layers ue(v), 0 to 2047, then layer_id[i] ue(v): layers of the last scalability_info that are absent from the following access units |
| 29 | layer_dependency_change | num_layers_minus1 ue(v); per layer layer_id, layer_dependency_info_present_flag u(1), then either num_directly_dependent_layers ue(v) and directly_dependent_layer_id_delta_minus1[j] ue(v) (dependent id = layer_id − delta − 1), or layer_dependency_info_src_layer_id_delta_minus1 ue(v) (copy another layer's dependencies) |
| 30 | scalable_nesting | all_layer_representations_in_au_flag u(1); if 0, num_layer_representations_minus1 ue(v) (0 to 127), pairs sei_dependency_id u(3) and sei_quality_id u(4), and sei_temporal_id u(3); then zero bits to the byte boundary (sei_nesting_zero_bit) and one or more nested sei_message()s. A buffering period or picture timing message is not nested with any other type |
| 31 | base_layer_temporal_hrd | per temporal layer of the base layer (0 to 7): sei_temporal_id u(3), sei_timing_info_present_flag then sei_num_units_in_tick, sei_time_scale (u(32)) and sei_fixed_frame_rate_flag; sei_nal_hrd_parameters_present_flag and hrd_parameters(); sei_vcl_hrd_parameters_present_flag and hrd_parameters(); sei_low_delay_hrd_flag when either; sei_pic_struct_present_flag. Only with IDR (type 5) access units |
| 32 | quality_layer_integrity_check | num_info_entries_minus1 ue(v), 0 to 7; per entry entry_dependency_id u(3) and quality_layer_crc u(16). The CRC covers every NAL unit with quality_id > 0 of that dependency representation (full NAL unit bytes, in decoding order): shift register of 16 bits starting at 65535 over all bits followed by 16 zero bits, XOR with 4129 (0x1021) when the top bit was set (F-383). A mismatch means quality layers were removed |
| 33 | redundant_pic_property | num_dIds_minus1 ue(v) (0 to 7); per dependency dependency_id u(3), num_qIds_minus1 ue(v) (0 to 15); per quality quality_id u(4), num_redundant_pics_minus1 ue(v) (0 to 127); per redundant picture redundant_pic_cnt_minus1 ue(v) (0 to 126) and pic_match_flag u(1) (1: exact copy of the primary). When 0: mb_type_match_flag, motion_match_flag, residual_match_flag, intra_samples_match_flag, each u(1) telling which of those the redundant picture reproduces |
| 34 | tl0_dep_rep_index | tl0_dep_rep_idx u(8): counter of temporal level 0 dependency representations, 0 at an IDR, +1 modulo 256 at each temporal level 0 picture, unchanged for higher temporal levels, so a receiver can detect lost ones; effective_idr_pic_id u(16): latest idr_pic_id |
| 35 | tl_switching_point | delta_frame_num se(v), from 1 − MaxFrameNum to MaxFrameNum − 1. The switch-to picture may be decoded without earlier pictures of its temporal layer when the picture with frame_num = current − delta (the required access unit, with temporal_id one lower) has been decoded. Always nested, never in temporal level 0 |
Scalability information (24)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
temporal_id_nesting_flag | u(1) | 1: temporal up-switching is always possible | |
priority_layer_info_present_flag | u(1) | 1: the priority layer block at the end is present | |
priority_id_setting_flag | u(1) | 1: a URI string describing how priority_id was set follows | |
num_layers_minus1 | ue(v) | 0 to 2047 | |
Per layer i: | |||
layer_id[i] | ue(v) | unique id, 0 to 2047; a layer's representation never includes a layer with a greater id. Without sub-picture layers it can be 128 * dependency_id + 8 * quality_id + temporal_id | |
priority_id[i] | u(6) | upper bound of priority_id in the layer | |
discardable_flag[i] | u(1) | 1: all units discardable | |
dependency_id[i], quality_id[i], temporal_id[i] | u(3), u(4), u(3) | the layer's values | |
sub_pic_layer_flag[i] | u(1) | 1: a sub-picture scalable layer covering a rectangle of slice group map units | |
sub_region_layer_flag[i] | u(1) | 1: base region fields follow; must be 1 when the previous flag is 1 | |
iroi_division_info_present_flag[i] | u(1) | 1: the pictures are divided into interactive regions of interest, described below; must be 0 for a sub-picture layer | |
profile_level_info_present_flag[i], bitrate_info_present_flag[i], frm_rate_info_present_flag[i], frm_size_info_present_flag[i], layer_dependency_info_present_flag[i], parameter_sets_info_present_flag[i], bitstream_restriction_info_present_flag[i] | u(1) each | presence of the matching block below | |
exact_inter_layer_pred_flag[i] | u(1) | 1: inter-layer prediction uses the same reference layer as the encoder (should be 1) | |
exact_sample_value_match_flag[i] | u(1) | sub-picture layer or IROI division | 1: decoded samples of the sub-picture or IROI equal those of the full decode |
layer_conversion_flag[i] | u(1) | 1: the layer can be rewritten into an Annex A stream without re-encoding | |
layer_output_flag[i] | u(1) | 1: intended for output | |
layer_profile_level_idc[i] | u(24) | profile flag | the three bytes profile_idc, constraint flags with the 2 reserved bits, level_idc |
avg_bitrate[i], max_bitrate_layer[i], max_bitrate_layer_representation[i], max_bitrate_calc_window[i] | u(16) each | bit rate flag | rate = (x & 16383) × 10(2 + (x >> 14)) bit/s (F-370), for the average, the layer's bound, the whole representation's bound; window in 1/100 s |
constant_frm_rate_idc[i] | u(2) | frame rate flag | 0 not constant, 1 constant, 2 may or may not be |
avg_frm_rate[i] | u(16) | frame rate flag | frames per 256 seconds |
frm_width_in_mbs_minus1[i], frm_height_in_mbs_minus1[i] | ue(v) each | frame size flag or IROI division | picture size (or sub-picture area) in macroblocks − 1 |
base_region_layer_id[i], dynamic_rect_flag[i] | ue(v), u(1) | sub-region flag | the layer that holds the base region; 1: the rectangle changes over time (must be 0 for sub-picture layers) |
horizontal_offset[i], vertical_offset[i], region_width[i], region_height[i] | u(16) each | sub-region and not dynamic | the region inside the base region |
roi_id[i] | ue(v) | sub-picture layer | region of interest id |
iroi_grid_flag[i] | u(1) | IROI division | 1: regions form a fixed grid |
grid_width_in_mbs_minus1[i], grid_height_in_mbs_minus1[i] | ue(v) each | grid | cell size − 1 |
num_rois_minus1[i], then first_mb_in_roi[i][j], roi_width_in_mbs_minus1[i][j], roi_height_in_mbs_minus1[i][j] | ue(v) | not grid | each region's first macroblock and size |
num_directly_dependent_layers[i], directly_dependent_layer_id_delta_minus1[i][j] | ue(v) | layer dependency flag | layers this layer depends on (id = layer_id − delta − 1) |
layer_dependency_info_src_layer_id_delta[i] | ue(v) | no layer dependency flag | copy the dependencies of the layer with id layer_id − delta |
num_seq_parameter_sets[i], seq_parameter_set_id_delta[i][j]; num_subset_seq_parameter_sets[i], subset_seq_parameter_set_id_delta[i][j]; num_pic_parameter_sets_minus1[i], pic_parameter_set_id_delta[i][j] | ue(v) | parameter sets flag | the parameter sets the layer uses, as id differences |
parameter_sets_info_src_layer_id_delta[i] | ue(v) | no parameter sets flag | copy another layer's parameter sets |
motion_vectors_over_pic_boundaries_flag[i], max_bytes_per_pic_denom[i], max_bits_per_mb_denom[i], log2_max_mv_length_horizontal[i], log2_max_mv_length_vertical[i], max_num_reorder_frames[i], max_dec_frame_buffering[i] | u(1), then ue(v) | restriction flag | as the same-named fields of the VUI bitstream restriction |
conversion_type_idc[i] | ue(v) | conversion flag | 0: coefficient prediction is used and the rewrite method is unspecified; 1: slice_header_restriction_flag 1 and all slices skipped, convertible by dropping types 14 and 20 slice-skip units and rewriting headers; 2: no inter-layer prediction, convertible by renaming type 20 to 1 or 5 and rewriting subset SPS as SPS. 0 to 2 |
rewriting_info_flag[i][j], rewriting_profile_level_idc[i][j] (u(24)), rewriting_avg_bitrate[i][j], rewriting_max_bitrate[i][j] (u(16)) | conversion flag; j 0 CAVLC, 1 CABAC | profile, level and rates of the converted stream | |
After the layers, when priority_layer_info_present_flag: | |||
pr_num_dids_minus1, pr_dependency_id[i] (u(3)), pr_num_minus1[i] | ue(v) | priority layers per dependency id | |
pr_id[i][j] ue(v), pr_profile_level_idc[i][j] u(24), pr_avg_bitrate[i][j], pr_max_bitrate[i][j] u(16) | each priority layer's id, conformance point and rates | ||
Last, when priority_id_setting_flag: | |||
priority_id_setting_uri[] | u(8) repeated | a zero-terminated string naming the method used to compute priority_id | |
Not covered on this page
The decoding processes of F.8 (inter-layer prediction, resampling of intra samples, motion and residuals, deblocking of target representations), the alternative parsing clauses of F.9 and the level limits of F.10.2 are processes and tables for decoders and are not reproduced. Their names and clause numbers are given above where a syntax element depends on them. Source: ITU-T H.264 (06/2026, version 16), Annex F.