The SEI messages page gives the framing, the list of payload types and the fields of types 0, 1, 4, 5, 6, 9, 45, 47, 128, 129, 132, 136, 137, 144, 147 and 148. This page gives the fields of every other message in Annex D of ITU-T H.265 (01/2026, version 11), clauses D.2 (syntax) and D.3 (semantics). Types 160 to 181 belong to the multi-layer and 3D annexes; types 210 to 226 take their syntax from ITU-T H.274.
Where H.264 uses a repetition period, H.265 uses a …_persistence_flag: 0
means the message applies to the current picture only; 1 means it lasts, in output
order, until a new coded layer-wise video sequence begins, the bitstream ends, or a
later picture with a message of the same kind (and identifier) is output. A
…_cancel_flag of 1 ends an earlier message’s persistence. Several messages
share their layout with H.264; the differences are noted.
Pan-scan rectangle (2)
As in H.264: pan_scan_rect_id ue(v),
pan_scan_rect_cancel_flag u(1); if not cancelled
pan_scan_cnt_minus1 ue(v) (0 to 2), then for each rectangle
pan_scan_rect_left_offset, _right_offset,
_top_offset, _bottom_offset (se(v) each, 1/16
luma sample, relative to the conformance window), and
pan_scan_rect_persistence_flag u(1).
Filler payload (3)
payloadSize bytes of FF.
Picture snapshot and progressive refinement (15, 16, 17)
| Type | Fields |
|---|---|
| 15 picture snapshot | snapshot_id ue(v): marks the picture as a still image |
| 16 progressive refinement segment start | progressive_refinement_id ue(v), pic_order_cnt_delta ue(v): the following pictures refine this one; the delta gives the last picture of the set in picture order count, and 0 means up to the matching segment end message |
| 17 progressive refinement segment end | progressive_refinement_id ue(v) |
Scene information (9) is on the SEI page; unlike H.264 it has a
prev_scene_id_valid_flag (u(1)) before scene_id:
1 means the previous scene information message’s scene_id can be compared
with this one.
Film grain characteristics (19)
The same fields as in H.264
(model 0 frequency filtering or 1 auto-regression, blending mode 0 additive or 1
multiplicative, separate colour description, intervals and model values per
component), with film_grain_matrix_coeffs as the name of the matrix field
and two changes at the end:
| Field | Coding | Condition | Meaning |
|---|---|---|---|
film_grain_characteristics_persistence_flag | u(1) | not cancelled | persistence, in place of a repetition period |
fg_spatial_resolution_present_flag | u(1) | payload extension data present | 1 if the two sizes follow; inferred 0 |
fg_pic_width_in_luma_samples, fg_pic_height_in_luma_samples | ue(v) each | flag | picture size, 1 to 65 536, for which the grain model is given (0 reserved; such messages are ignored) |
Post-filter hint (22)
As in H.264, without the final extension flag: filter_hint_size_y,
filter_hint_size_x (ue(v)), filter_hint_type
(u(2): 0 a 2D FIR filter, 1 two 1D FIR filters, 2 a cross-correlation
matrix), then filter_hint_value (se(v)) for each position of
one component for monochrome video or three otherwise.
Tone mapping information (23)
As in H.264 (models 0 to
4), with tone_map_persistence_flag (u(1)) in place of the
repetition period and these names for the model 4 fields:
exposure_idx_idc, exposure_idx_value,
nominal_black_level_code_value, nominal_white_level_code_value
and extended_white_level_code_value. The ISO speed codes are the same:
1 to 30 for ISO 10 to 8000, 255 (EXTENDED_ISO) for an explicit 32-bit value.
Frame packing and display orientation differences (45, 47)
The frame packing arrangement message (on the SEI page) ends with
frame_packing_arrangement_persistence_flag and then, outside the
“not cancelled” block, upsampled_aspect_ratio_flag (u(1)): 1
means the VUI sample aspect ratio describes the samples after each constituent frame is
upconverted to full size, 0 before. Display orientation ends with
display_orientation_persistence_flag and has no extension flag.
Green metadata (56)
Its syntax is specified in ISO/IEC 23001-11 (Green metadata), not in H.265.
Decoding unit information (130)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
decoding_unit_idx | ue(v) | index of the decoding unit within the access unit, 0 to PicSizeInCtbsY − 1 | |
du_spt_cpb_removal_delay_increment | u(v), length from the HRD parameters | sub-picture CPB parameters not in picture timing | clock sub-ticks between the nominal CPB removal of the access unit’s last decoding unit and this one |
dpb_output_du_delay_present_flag | u(1) | 1 if the next field follows | |
pic_spt_dpb_output_du_delay | u(v) | flag | sub clock ticks after removal of the last decoding unit before the picture is output, with sub-picture HRD |
Temporal sub-layer zero index (131)
temporal_sub_layer_zero_idx (u(8)) and irap_pic_id
(u(8)), which help a decoder detect missing pictures with TemporalId 0
(other than RASL, RADL and sub-layer non-reference pictures). irap_pic_id
identifies the IRAP picture and differs from one IRAP picture to the next.
Scalable nesting (133)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
bitstream_subset_flag | u(1) | 0: the nested messages apply to particular layers or sub-layers; 1: to sub-bitstreams | |
nesting_op_flag | u(1) | 1: operation points are listed; 0: layers are listed | |
default_op_flag | u(1) | op flag 1 | 1: the first operation point is the one of this NAL unit’s layer and temporal id |
nesting_num_ops_minus1 | ue(v) | op flag 1 | 0 to 1023 |
nesting_max_temporal_id_plus1[i] | u(3) | per listed operation point | highest TemporalId + 1 |
nesting_op_idx[i] | ue(v) | per listed operation point | layer set index in the VPS, 0 to 1023 |
all_layers_flag | u(1) | op flag 0 | 1: all layers from this one up (MaxTemporalId 6) |
nesting_no_op_max_temporal_id_plus1 | u(3) | not all layers | highest TemporalId + 1; not 0 |
nesting_num_layers_minus1 | ue(v) | not all layers | 0 to 63 |
nesting_layer_id[i] | u(6) | per layer | nuh_layer_id values in increasing order |
nesting_zero_bit | f(1) | to byte alignment | 0 |
sei_message() | repeated to the end | the nested messages |
Small messages (134, 135, 143, 145, 146)
| Type | Fields |
|---|---|
| 134 region refresh information | refreshed_region_flag u(1): 1 the following slice segments belong to the region refreshed so far in a gradual decoding refresh |
| 135 no display | none: the picture should not be displayed |
| 143 deinterlaced field identification | deinterlaced_picture_source_parity_flag u(1): the picture was deinterlaced from a top (0) or bottom (1) source field |
| 145 dependent random access point indication | none: the picture (a DRAP picture) and those after it can be decoded from the associated IRAP picture alone |
| 146 coded region completion | next_segment_address ue(v): the slice_segment_address of the next slice segment, 0 if it starts a new picture or there is none; then, if not 0, independent_slice_segment_flag u(1): whether that segment is independent |
Segmented rectangular frame packing arrangement (138)
segmented_rect_frame_packing_arrangement_cancel_flag
(u(1)); if not cancelled,
segmented_rect_content_interpretation_type (u(2): 0
unspecified relationship, 1 frame 0 is the left view, 2 frame 0 is the right view;
Table D.12) and segmented_rect_frame_packing_arrangement_persistence_flag
(u(1)).
Temporal motion-constrained tile sets (139)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
mc_all_tiles_exact_sample_value_match_flag | u(1) | 1: decoding only a tile set gives exactly the same samples in it | |
each_tile_one_tile_set_flag | u(1) | 1: every tile is its own motion-constrained set | |
limited_tile_set_display_flag | u(1) | not each tile | 1: tiles outside sets marked for display are not meant to be shown |
num_sets_in_message_minus1 | ue(v) | not each tile | 0 to 255 |
mcts_id[i] | ue(v) | per set | identifies the set |
display_tile_set_flag[i] | u(1) | limited display | 1 the set is meant for display; inferred 1 |
num_tile_rects_in_set_minus1[i] | ue(v) | per set | rectangles of tiles in the set − 1 |
top_left_tile_idx[i][j], bottom_right_tile_idx[i][j] | ue(v) each | per rectangle | corner tiles in tile raster order |
mc_exact_sample_value_match_flag[i] | u(1) | not all tiles exact | the same, per set |
mcts_tier_level_idc_present_flag[i] | u(1) | per set | 1 if a tier and level follow |
mcts_tier_flag[i], mcts_level_idc[i] | u(1), u(8) | flag | tier and level the extracted set conforms to |
max_mcs_tier_level_idc_present_flag | u(1) | each tile | 1 if a maximum tier and level follow (the condition in the syntax table spells it mcts_max_tier_level_idc_present_flag) |
mcts_max_tier_flag, mcts_max_level_idc | u(1), u(8) | flag | the highest tier and level of any single tile |
Chroma resampling filter hint (140)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
ver_chroma_filter_idc | u(8) | 0 unspecified, 1 filters given below, 2 the filters of SMPTE RP 2050-1 (2012); more reserved (Table D.13) | |
hor_chroma_filter_idc | u(8) | 0 unspecified, 1 filters given below, 2 the 5/3 filter of ITU-T T.800 (JPEG 2000); more reserved (Table D.14). Not both 0 | |
ver_filtering_field_processing_flag | u(1) | 1: vertical filtering is applied field by field | |
target_format_idc | ue(v) | either idc is 1 | output chroma format: 1 4:2:0, 2 4:2:2, 3 4:4:4 (Table D.15); not the coded format |
num_vertical_filters | ue(v) | vertical idc 1 | count fixed by Table D.16 |
ver_tap_length_minus1[i], ver_filter_coeff[i][j] | ue(v), se(v) | per filter | taps − 1 and the coefficients |
num_horizontal_filters, hor_tap_length_minus1[i], hor_filter_coeff[i][j] | as vertical | horizontal idc 1 | count fixed by Table D.17 |
With idc 2 the coefficients are fixed (Tables D.18 and D.19). Vertical, for chroma sample location types 0 and 1 without field processing: downsampling {−3, −19, 34, 500, 500, 34, −19, −3}, upsampling {19, 103, 1037, −135}; with field processing: downsampling {−8, −26, 115, 586, 409, −48, −4, 0}, upsampling {24, −41, 1169, −128} and {−76, 783, 330, −13}. Horizontal, for location types 0, 2 and 4: downsampling {−1, 2, 6, 2, −1}, upsampling {1} and {1, 1}.
Knee function information (141)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
knee_function_id | ue(v) | identifies the function | |
knee_function_cancel_flag | u(1) | 1 cancels | |
knee_function_persistence_flag | u(1) | not cancelled | persistence |
input_d_range | u(32) | input peak level relative to nominal, in 0.1%; 0 unspecified | |
input_disp_luminance | u(32) | expected display brightness of the input peak, cd/m²; 0 unspecified | |
output_d_range, output_disp_luminance | u(32) each | the same for the output | |
num_knee_points_minus1 | ue(v) | knee points − 1 | |
input_knee_point[i], output_knee_point[i] | u(10) each | per point | normalised levels in 0.1%: input 1 to 999, increasing; output 0 to 1000 |
Colour remapping information (142)
As in H.264 (output
colour description, input and output bit depths, a pre-LUT per component, an optional
3 × 3 matrix with log2_matrix_denom, a post-LUT per component), with
colour_remap_persistence_flag in place of the repetition period.
Content colour volume (149)
Identical to H.264:
ccv_cancel_flag, ccv_persistence_flag, four presence flags,
ccv_reserved_zero_2bits, primaries as i(32) in steps of
0.00002, and minimum, maximum and average luminance as u(32) in steps of
0.0000001.
Omnidirectional video (150 to 156)
Angles are in 2−16 degrees. Cubemap projection (151), sphere rotation (154) and omnidirectional viewport (156) are identical to H.264. The others:
| Type | Fields |
|---|---|
| 150 equirectangular projection | erp_cancel_flag u(1); if not cancelled erp_persistence_flag u(1), erp_guard_band_flag u(1), erp_reserved_zero_2bits u(2), and with guard bands erp_guard_band_type u(3) (0 unspecified, 1 enough for interpolation, 2 real content at gradually changing quality, 3 at similar quality), erp_left_guard_band_width, erp_right_guard_band_width u(8) each in luma samples |
| 155 region-wise packing | as in H.264, with the per-region names rwp_transform_type (same eight values, Table D.22), rwp_guard_band_flag, rwp_left_guard_band_width, rwp_right_guard_band_width, rwp_top_guard_band_height, rwp_bottom_guard_band_height, rwp_guard_band_not_used_for_pred_flag, rwp_guard_band_type and rwp_guard_band_reserved_zero_3bits |
Fisheye video information (152):
| Field | Coding | Condition | Meaning |
|---|---|---|---|
fisheye_cancel_flag | u(1) | 1 cancels | |
fisheye_persistence_flag | u(1) | not cancelled | persistence |
fisheye_view_dimension_idc | u(3) | 0 two areas back to back (fields of view adding to at least 360°); 1 two parallel areas, area 0 the left view; 2 the same with area 0 the right view; 7 no constraint; 3 to 6 reserved | |
fisheye_reserved_zero_3bits | u(3) | 0 | |
fisheye_num_active_areas_minus1 | u(8) | active areas − 1 | |
fisheye_circular_region_centre_x[i], _y[i] | u(32) each | per area | centre of the circle, in 2−16 luma samples |
fisheye_rect_region_top[i], _left, _width, _height | u(32) each | per area | the rectangle holding the area, luma samples |
fisheye_circular_region_radius[i] | u(32) | per area | radius matching the lens’s full field of view, 2−16 samples |
fisheye_scene_radius[i] | u(32) | per area | radius of the part without obstructions such as the camera body |
fisheye_camera_centre_azimuth[i], _elevation[i], _tilt[i] | i(32) each | per area | direction of the circle’s centre on the sphere |
fisheye_camera_centre_offset_x[i], _y, _z | u(32) each | per area | offset of the lens’s focal centre from the rig’s origin, 2−16 mm |
fisheye_field_of_view[i] | u(32) | per area | the lens’s field of view, up to 360° |
fisheye_num_polynomial_coeffs[i] | u(16) | per area | 0 to 8 |
fisheye_polynomial_coeff[i][j] | i(32) | per coefficient | in 2−24: the curve from normalised distance to the angle from the lens axis |
Regional nesting (157)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
regional_nesting_id | u(16) | purpose of the nested messages | |
regional_nesting_num_rect_regions | u(8) | number of rectangles | |
regional_nesting_rect_region_id[i] | u(8) | per rectangle | its identifier |
regional_nesting_rect_left_offset[i], _right_, _top_, _bottom_offset[i] | u(16) each | per rectangle | edges, in units scaled by the chroma subsampling factors |
num_sei_messages_in_regional_nesting_minus1 | u(8) | nested messages − 1 | |
num_regions_for_sei_message[i] | u(8) | per message | how many rectangles it applies to |
regional_nesting_sei_region_idx[i][j] | u(8) | per rectangle | which rectangles |
sei_message() | per message | the nested message |
Motion-constrained tile set extraction (158, 159)
Extraction information sets (158) carry the replacement parameter sets needed to cut a tile set out as its own bitstream:
| Field | Coding | Condition | Meaning |
|---|---|---|---|
num_info_sets_minus1 | ue(v) | information sets − 1 | |
num_mcts_sets_minus1[i], num_mcts_in_set_minus1[i][j], idx_of_mcts_in_set[i][j][k] | ue(v) each | which tile sets each information set applies to | |
slice_reordering_enabled_flag[i] | u(1) | 1: extracted slice segments are given new addresses | |
num_slice_segments_minus1[i], output_slice_segment_address[i][j] | ue(v), u(v) of Ceil(Log2(PicSizeInCtbsY)) bits | reordering | the new addresses |
num_vps_in_info_set_minus1[i], vps_rbsp_data_length[i][j] | ue(v) | replacement VPSs (0 to 15 − 1) and their lengths | |
num_sps_in_info_set_minus1[i], sps_rbsp_data_length[i][j] | ue(v) | replacement SPSs and their lengths | |
num_pps_in_info_set_minus1[i], pps_nuh_temporal_id_plus1[i][j], pps_rbsp_data_length[i][j] | ue(v), u(3), ue(v) | replacement PPSs with their temporal id | |
mcts_alignment_bit_equal_to_zero | f(1) | to byte alignment | 0 |
vps_rbsp_data_byte, sps_rbsp_data_byte, pps_rbsp_data_byte | u(8) | the parameter set RBSPs |
Extraction information nesting (159): all_mcts_flag (u(1),
1 for every tile set of the temporal MCTS message); if 0,
num_associated_mcts_minus1 and idx_of_associated_mcts[i]
(ue(v)); then num_sei_messages_in_mcts_extraction_nesting_minus1
(ue(v)), zero bits to the byte boundary, and the nested messages.
SEI manifest and prefix indication (200, 201)
Identical to H.264:
manifest_num_sei_msg_types (u(16)) and per type a
u(16) payload type and a u(8) description (0 not expected, 1
expected and necessary, 2 expected and unnecessary, 3 necessity undetermined; Table
D.23); prefix_sei_payload_type (u(16)), a count, and per
indication a bit count and the first bits of that message’s payload, padded with 1
bits.
Annotated regions (202)
Object labels and bounding boxes, kept up to date from picture to picture.
st(v) is a null-terminated UTF-8 string.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
ar_cancel_flag | u(1) | 1 cancels and forgets all labels and objects | |
ar_not_optimized_for_viewing_flag | u(1) | not cancelled | 1: the pictures are tuned for machine analysis, not viewing |
ar_true_motion_flag | u(1) | 1: motion vectors were chosen to follow real object motion | |
ar_occluded_object_flag | u(1) | 1: boxes may cover objects that are hidden or partly visible | |
ar_partial_object_flag_present_flag, ar_object_label_present_flag, ar_object_confidence_info_present_flag | u(1) each | which optional fields appear | |
ar_object_confidence_length_minus1 | u(4) | confidence | bits per confidence value − 1 |
ar_object_label_language_present_flag | u(1) | labels | 1 if a language tag follows (after zero bits to the byte boundary) |
ar_object_label_language | st(v) | flag | language of the labels |
ar_num_label_updates | ue(v) | labels | labels added or removed |
ar_label_idx[i], ar_label_cancel_flag, ar_label[] | ue(v), u(1), st(v) | per update | label number, 1 to remove it, otherwise its text (byte aligned) |
ar_num_object_updates | ue(v) | objects updated | |
ar_object_idx[i], ar_object_cancel_flag | ue(v), u(1) | per update | object number; 1 stops tracking it |
ar_object_label_update_flag, ar_object_label_idx[] | u(1), ue(v) | labels | a new label for the object |
ar_bounding_box_update_flag, ar_bounding_box_cancel_flag | u(1) each | a new box, or none | |
ar_bounding_box_top, _left, _width, _height | u(16) each | new box | the box relative to the conformance window, in units of the chroma subsampling factors (SubWidthC, SubHeightC luma samples) |
ar_partial_object_flag[] | u(1) | flag present | 1: only part of the object is in the box |
ar_object_confidence[] | u(v) | confidence | confidence in the object, in units of 2−(length); higher is more confident |
Shutter interval information (205)
Unlike H.264’s version it has no sub-layer index or presence flag:
sii_time_scale (u(32), time units per second),
fixed_shutter_interval_within_clvs_flag (u(1)), then either
sii_num_units_in_shutter_interval (u(32); 0 for content that
was not camera captured) or sii_max_sub_layers_minus1
(u(3)) and one sub_layer_num_units_in_shutter_interval[i]
(u(32)) per temporal sub-layer.
Reserved types
Any other payload type is read as reserved_sei_message:
payloadSize bytes that a decoder skips (D.2.49).