The SEI messages page gives the framing, the list of payload types and the buffering period, picture timing, user data and recovery point messages. This page gives the fields of every other message defined in Annex D of ITU-T H.264 (06/2026, version 16), clauses D.1 (syntax) and D.2 (semantics). Messages for scalable, multiview and 3D coding (types 24 to 44, 46, 48 to 54 and 181) are defined in the multi-layer annexes; types 64, 65, 202 and 210 to 225 take their syntax from ITU-T H.274.
Many messages carry a …_repetition_period (or a persistence flag) that
says how long they last: 0 means the current picture only; 1 means until a new coded
video sequence or a later picture in output order with the same kind of message; a
larger value means another such message must come within that many picture order count
steps (as worded for the full-frame freeze message, D.2.15). A
…_cancel_flag of 1 ends the persistence of an earlier message of the same
kind (and the same identifier, where there is one).
Pan-scan rectangle (2)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
pan_scan_rect_id | ue(v) | identifies the rectangle’s purpose | |
pan_scan_rect_cancel_flag | u(1) | 1 cancels the previous rectangle | |
pan_scan_cnt_minus1 | ue(v) | not cancelled | 0 to 2: one rectangle, or one per field (first, second, repeated first) |
pan_scan_rect_left_offset[i], _right_, _top_, _bottom_offset[i] | se(v) each | per rectangle | edges in 1/16 luma sample, relative to the cropping rectangle |
pan_scan_rect_repetition_period | ue(v) | not cancelled | persistence |
Filler payload (3)
payloadSize bytes of FF. Filler data NAL units (type 12)
serve the same purpose outside SEI.
Decoded reference picture marking repetition (7)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
original_idr_flag | u(1) | 1 if the marking came from an IDR picture | |
original_frame_num | ue(v) | frame_num of that picture | |
original_field_pic_flag | u(1) | frame_mbs_only_flag 0 | 1 if it was a field |
original_bottom_field_flag | u(1) | field | 1 for a bottom field |
dec_ref_pic_marking() | a copy of the slice header structure |
Spare picture (8)
Marks areas of other pictures that can stand in for a target reference picture if it is lost.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
target_frame_num | ue(v) | frame_num of the target picture | |
spare_field_flag | u(1) | 1 if the target and spares are fields | |
target_bottom_field_flag | u(1) | fields | 1 for the bottom field |
num_spare_pics_minus1 | ue(v) | number of spare pictures − 1 | |
delta_spare_frame_num[i] | ue(v) | per spare | identifies the spare picture by its frame number difference |
spare_bottom_field_flag[i] | u(1) | fields | 1 for a bottom field |
spare_area_idc[i] | ue(v) | per spare | 0 every map unit is spare; 1 a flag per map unit follows; 2 run lengths follow |
spare_unit_flag[i][j] | u(1) | idc 1, per map unit | 0 the unit is spare, 1 it is not (raster order) |
zero_run_length[i][j] | ue(v) | idc 2 | runs that mark spare units in box-out order |
Scene information (9)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
scene_info_present_flag | u(1) | 1 if the fields below follow | |
scene_id | ue(v) | present | the scene of the pictures; a change with transition type 0 marks a cut |
scene_transition_type | ue(v) | present | 0 none, 1 fade to black, 2 fade from black, 3 unspecified transition from or to constant colour, 4 dissolve, 5 wipe, 6 unspecified mixture of two scenes (Table D-4) |
second_scene_id | ue(v) | type > 3 | the scene being mixed in |
Sub-sequence messages (10, 11, 12)
Sub-sequence information (10):
| Field | Coding | Condition | Meaning |
|---|---|---|---|
sub_seq_layer_num | ue(v) | the sub-sequence layer of the picture | |
sub_seq_id | ue(v) | the sub-sequence within the layer | |
first_ref_pic_flag | u(1) | 1 for the first reference picture of the sub-sequence | |
leading_non_ref_pic_flag | u(1) | 1 for a non-reference picture before any reference picture of it | |
last_pic_flag | u(1) | 1 for its last picture in decoding order | |
sub_seq_frame_num_flag | u(1) | 1 if the next field follows | |
sub_seq_frame_num | ue(v) | flag | frame number within the sub-sequence, 0 to MaxFrameNum − 1 |
Sub-sequence layer characteristics (11): num_sub_seq_layers_minus1
(ue(v)), then per layer accurate_statistics_flag
(u(1)), average_bit_rate (u(16), units of 1000
bit/s) and average_frame_rate (u(16), frames per 256
seconds). Sub-sequence characteristics (12):
| Field | Coding | Condition | Meaning |
|---|---|---|---|
sub_seq_layer_num, sub_seq_id | ue(v) each | the target sub-sequence | |
duration_flag | u(1) | 1 if the duration follows | |
sub_seq_duration | u(32) | flag | duration in 90 kHz clock ticks |
average_rate_flag | u(1) | 1 if the next three fields follow | |
accurate_statistics_flag, average_bit_rate, average_frame_rate | u(1), u(16), u(16) | flag | as in type 11 |
num_referenced_subseqs | ue(v) | 0 to 255 sub-sequences used for prediction | |
ref_sub_seq_layer_num, ref_sub_seq_id | ue(v) each | per reference | the referenced sub-sequence |
ref_sub_seq_direction | u(1) | per reference | 0 one that starts earlier in decoding order, 1 later |
Freeze, snapshot and progressive refinement (13 to 17)
| Type | Message | Fields |
|---|---|---|
| 13 | full-frame freeze | full_frame_freeze_repetition_period ue(v), 0 to 16 384: keep showing the current picture |
| 14 | full-frame freeze release | none: ends a freeze |
| 15 | full-frame snapshot | snapshot_id ue(v), 0 to 232 − 2: marks the picture as a still image |
| 16 | progressive refinement segment start | progressive_refinement_id ue(v), num_refinement_steps_minus1 ue(v): the following pictures refine the quality of this one |
| 17 | progressive refinement segment end | progressive_refinement_id ue(v) |
Motion-constrained slice group set (18)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
num_slice_groups_in_set_minus1 | ue(v) | slice groups in the set − 1 | |
slice_group_id[i] | u(v), Ceil(Log2(num_slice_groups_minus1 + 1)) bits | more than one slice group | the groups in the set |
exact_sample_value_match_flag | u(1) | 1: decoding only the set gives exactly the same samples in it as decoding everything | |
pan_scan_rect_flag | u(1) | 1 if a pan-scan rectangle id follows | |
pan_scan_rect_id | ue(v) | flag | the pan-scan rectangle that covers the set |
Film grain characteristics (19)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
film_grain_characteristics_cancel_flag | u(1) | 1 cancels | |
film_grain_model_id | u(2) | not cancelled | 0 frequency filtering, 1 auto-regression, 2 and 3 reserved (Table D-5) |
separate_colour_description_present_flag | u(1) | 1: the grain is described in its own colour space, given next | |
film_grain_bit_depth_luma_minus8, _chroma_minus8 | u(3) each | flag | bit depths − 8 |
film_grain_full_range_flag | u(1) | flag | as video_full_range_flag |
film_grain_colour_primaries, _transfer_characteristics, _matrix_coefficients | u(8) each | flag | codes of the VUI tables |
blending_mode_id | u(2) | 0 additive, 1 multiplicative, 2 and 3 reserved (Table D-6) | |
log2_scale_factor | u(4) | scale of the model values | |
comp_model_present_flag[c] | u(1) × 3 | grain is modelled on Y, Cb, Cr | |
num_intensity_intervals_minus1[c] | u(8) | per modelled component | intensity intervals − 1 |
num_model_values_minus1[c] | u(3) | per modelled component | model values per interval − 1 |
intensity_interval_lower_bound[c][i], _upper_bound[c][i] | u(8) each | per interval | the interval’s range of sample intensities |
comp_model_value[c][i][j] | se(v) | per value | the model parameters, whose meaning depends on film_grain_model_id (clause D.2.21); 0 to 2bit depth − 1 for frequency filtering, signed for auto-regression |
film_grain_characteristics_repetition_period | ue(v) | not cancelled | persistence |
Deblocking filter display preference (20)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
deblocking_display_preference_cancel_flag | u(1) | 1 cancels | |
display_prior_to_deblocking_preferred_flag | u(1) | not cancelled | 1: the encoder prefers the picture to be shown before deblocking |
dec_frame_buffering_constraint_flag | u(1) | not cancelled | 1: the sequence needs no more than Max(1, max_dec_frame_buffering) frame buffers to output the filtered or unfiltered pictures as preferred, at their output times |
deblocking_display_preference_repetition_period | ue(v) | not cancelled | persistence |
Stereo video information (21)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
field_views_flag | u(1) | 1: the two views are the two fields of each frame | |
top_field_is_left_view_flag | u(1) | field views | 1: top fields are the left view |
current_frame_is_left_view_flag | u(1) | frame views | 1: this picture is the left view |
next_frame_is_second_view_flag | u(1) | frame views | 1: this picture and the next in output order are a stereo pair |
left_view_self_contained_flag, right_view_self_contained_flag | u(1) each | 1: that view is predicted only from itself |
Post-filter hint (22)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
filter_hint_size_y, filter_hint_size_x | ue(v) each | size of the coefficient array (y must be 2 for type 1) | |
filter_hint_type | u(2) | 0 a 2D FIR filter, 1 two 1D FIR filters (row 0 horizontal, row 1 vertical, horizontal first), 2 a cross-correlation matrix (Table D-7) | |
filter_hint_value[cIdx][cx][cy] | se(v) | per component and position | coefficients with 16-bit precision |
additional_extension_flag | u(1) | 0 |
Tone mapping information (23)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
tone_map_id | ue(v) | identifies the mapping | |
tone_map_cancel_flag | u(1) | 1 cancels | |
tone_map_repetition_period | ue(v) | not cancelled | persistence |
coded_data_bit_depth | u(8) | bit depth of the input | |
target_bit_depth | u(8) | bit depth of the output | |
tone_map_model_id | ue(v) | 0 linear with clipping, 1 sigmoid, 2 user-defined table, 3 piece-wise linear, 4 luminance dynamic range information; higher values reserved and the message ignored | |
min_value, max_value | u(32) each | model 0 | input values mapped to the output minimum and maximum |
sigmoid_midpoint, sigmoid_width | u(32) each | model 1 | input mapped to the output centre, and the distance between the 5% and 95% points |
start_of_coded_interval[i] | u(v), ((coded_data_bit_depth + 7) >> 3) << 3 bits | model 2, one per output value | start of the input interval that maps to output i |
num_pivots | u(16) | model 3 | number of pivot points |
coded_pivot_value[i], target_pivot_value[i] | u(v): the bit depth rounded up to whole bytes, as above (coded and target depth respectively) | model 3, per pivot | input and output of each pivot |
camera_iso_speed_idc | u(8) | model 4 | ISO 12232 speed, Table D-8 below |
camera_iso_speed_value | u(32) | idc 255 | the speed itself |
exposure_index_idc, exposure_index_value | u(8), u(32) | model 4; value when idc 255 | exposure index, coded the same way |
exposure_compensation_value_sign_flag, _numerator, _denom_idc | u(1), u(16), u(16) | model 4 | exposure compensation = ±numerator ÷ denominator steps (1 step doubles the exposure); denominator 0 means unknown |
ref_screen_luminance_white | u(32) | model 4 | reference screen white, cd/m² |
extended_range_white_level | u(32) | model 4 | extended dynamic range, as an integer percentage of the nominal white level (100 or more) |
nominal_black_level_luma_code_value, nominal_white_level_luma_code_value, extended_white_level_luma_code_value | u(16) each | model 4 | luma code values of those levels (for 8-bit limited-range BT.709, black 16 and white 235) |
Table D-8, ISO speed and exposure index codes: 0 unspecified; 1 to 30 are 10, 12, 16, 20, 25, 32, 40, 50, 64, 80, 100, 125, 160, 200, 250, 320, 400, 500, 640, 800, 1000, 1250, 1600, 2000, 2500, 3200, 4000, 5000, 6400, 8000; 31 to 254 reserved; 255 Extended_ISO (the value follows in 32 bits).
Frame packing arrangement (45)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
frame_packing_arrangement_id | ue(v) | identifies the arrangement | |
frame_packing_arrangement_cancel_flag | u(1) | 1 cancels | |
frame_packing_arrangement_type | u(7) | not cancelled | 0 checkerboard, 1 column interleaving, 2 row interleaving, 3 side by side, 4 top and bottom, 5 temporal interleaving of frames, 6 no packing (a complete 2D picture), 7 tile format (Table D-9) |
quincunx_sampling_flag | u(1) | 1: each plane of each constituent frame is quincunx sampled; must be 1 for type 0 and 0 for types 5 to 7 | |
content_interpretation_type | u(6) | 0 unspecified, 1 frame 0 is the left view, 2 frame 0 is the right view (Table D-10) | |
spatial_flipping_flag | u(1) | types 3 and 4 only: one frame is flipped (horizontally for 3, vertically for 4) | |
frame0_flipped_flag | u(1) | which frame is flipped | |
field_views_flag | u(1) | type 2 only: every picture is a complementary field pair, the fields of one parity forming frame 0 and the other frame 1 | |
current_frame_is_frame0_flag | u(1) | type 5: 1 this frame is frame 0 and the next in output order frame 1; 0 this is frame 1. For other types frame 0 is the one holding the top-left sample | |
frame0_self_contained_flag, frame1_self_contained_flag | u(1) each | 1: that frame is predicted only from itself | |
frame0_grid_position_x, _y, frame1_grid_position_x, _y | u(4) each | not quincunx and type not 5 | sampling grid position of each frame, right of and below its top-left corner, in 1/16 of its sample spacing; (0, 0) means the default ((4, 8) for types 1 and 3, (8, 4) for types 2 and 4) and (15, 15) unknown |
frame_packing_arrangement_reserved_byte | u(8) | 0 | |
frame_packing_arrangement_repetition_period | ue(v) | persistence | |
frame_packing_arrangement_extension_flag | u(1) | always | 0 |
With type 6 the other fields are 0 and ignored.
Display orientation (47)
display_orientation_cancel_flag (u(1)); if not cancelled,
hor_flip and ver_flip (u(1) each),
anticlockwise_rotation (u(16): rotate by 360° ×
value ÷ 65 536 after flipping, so 16 384 is 90°),
display_orientation_repetition_period (ue(v)) and
display_orientation_extension_flag (u(1), 0).
Green metadata (56)
Its syntax is not in H.264: it is specified in ISO/IEC 23001-11 (Green metadata), for reducing power use in decoders, encoders and displays.
Mastering display, light level and transfer (137, 144, 147, 148)
| Field | Coding | Meaning |
|---|---|---|
display_primaries_x[c], display_primaries_y[c] | u(16) each, × 3 | 137: mastering display primaries in steps of 0.00002 (x 5 to 37 000, y 5 to 42 000; other values unknown); suggested order green, blue, red |
white_point_x, white_point_y | u(16) each | 137: white point, same units |
max_display_mastering_luminance | u(32) | 137: in 0.0001 cd/m², 50 000 to 100 000 000 |
min_display_mastering_luminance | u(32) | 137: in 0.0001 cd/m², 1 to 50 000 |
max_content_light_level | u(16) | 144: brightest sample, cd/m²; 0 unknown |
max_pic_average_light_level | u(16) | 144: brightest picture average, cd/m²; 0 unknown |
preferred_transfer_characteristics | u(8) | 147: a preferred alternative to the VUI transfer_characteristics, same codes |
ambient_illuminance | u(32) | 148: ambient light in 0.0001 lux, not 0 |
ambient_light_x, ambient_light_y | u(16) each | 148: its chromaticity in steps of 0.00002, 0 to 50 000 |
Colour remapping information (142)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
colour_remap_id | ue(v) | identifies the remapping | |
colour_remap_cancel_flag | u(1) | 1 cancels | |
colour_remap_repetition_period | ue(v) | not cancelled | persistence |
colour_remap_video_signal_info_present_flag | u(1) | 1 if the next four fields follow | |
colour_remap_full_range_flag, colour_remap_primaries, colour_remap_transfer_function, colour_remap_matrix_coefficients | u(1), u(8) × 3 | flag | the colour space of the output, VUI codes |
colour_remap_input_bit_depth, colour_remap_output_bit_depth | u(8) each | 8 to 16 | |
pre_lut_num_val_minus1[c] | u(8) | per component | pivot points of the first piece-wise linear curve − 1 |
pre_lut_coded_value[c][i], pre_lut_target_value[c][i] | u(v) each | when more than one pivot | input and output of each pivot |
colour_remap_matrix_present_flag | u(1) | 1 if a 3 × 3 matrix follows | |
log2_matrix_denom | u(4) | matrix | 0 to 15: the coefficients are divided by 2 to this power |
colour_remap_coeffs[c][i] | se(v) × 9 | matrix | the matrix |
post_lut_num_val_minus1[c], post_lut_coded_value, post_lut_target_value | as the pre-LUT | the second piece-wise linear curve |
Content colour volume (149)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
ccv_cancel_flag | u(1) | 1 cancels | |
ccv_persistence_flag | u(1) | not cancelled | 1 persists |
ccv_primaries_present_flag, ccv_min_luminance_value_present_flag, ccv_max_luminance_value_present_flag, ccv_avg_luminance_value_present_flag | u(1) each | which values follow (not all four may be 0) | |
ccv_reserved_zero_2bits | u(2) | 0 | |
ccv_primaries_x[c], ccv_primaries_y[c] | i(32) each, × 3 | flag | primaries of the content’s colour volume, steps of 0.00002, −5 000 000 to 5 000 000 |
ccv_min_luminance_value, ccv_max_luminance_value, ccv_avg_luminance_value | u(32) each | flags | normalised luminance in steps of 0.0000001 |
Omnidirectional video (150, 151, 154, 155, 156)
Angles are in units of 2−16 degrees.
| Type | Fields |
|---|---|
| 150 equirectangular projection | erp_cancel_flag u(1); if not cancelled erp_persistence_flag u(1), erp_padding_flag u(1), erp_reserved_zero_2bits u(2), and with padding the guard band type u(3) (spelt gp_erp_type in the syntax table and gb_erp_type in the semantics: 0 unspecified, 1 enough for sub-sample interpolation, 2 real content at gradually changing quality, 3 real content at similar quality, more reserved), left_gb_erp_width and right_gb_erp_width u(8) each in luma samples |
| 151 cubemap projection | cmp_cancel_flag u(1); if not cancelled cmp_persistence_flag u(1) |
| 154 sphere rotation | sphere_rotation_cancel_flag u(1); if not cancelled sphere_rotation_persistence_flag u(1), sphere_rotation_reserved_zero_6bits u(6), yaw_rotation, pitch_rotation, roll_rotation i(32) each |
| 156 omnidirectional viewport | omni_viewport_id u(10), omni_viewport_cancel_flag u(1); if not cancelled omni_viewport_persistence_flag u(1), omni_viewport_cnt_minus1 u(4), then per viewport omni_viewport_azimuth_centre, _elevation_centre, _tilt_centre i(32) each, omni_viewport_hor_range, _ver_range u(32) each |
Region-wise packing (155):
| Field | Coding | Condition | Meaning |
|---|---|---|---|
rwp_cancel_flag | u(1) | 1 cancels | |
rwp_persistence_flag | u(1) | not cancelled | 1 persists |
constituent_picture_matching_flag | u(1) | 1: the regions apply to each constituent picture of a frame-packed picture | |
rwp_reserved_zero_5bits | u(5) | 0 | |
num_packed_regions | u(8) | number of regions | |
proj_picture_width, proj_picture_height | u(32) each | size of the projected picture | |
packed_picture_width, packed_picture_height | u(16) each | size of the packed picture | |
rwp_reserved_zero_4bits[i] | u(4) | per region | 0 |
transform_type[i] | u(3) | per region | 0 none, 1 mirror horizontally, 2 rotate 180°, 3 rotate 180° then mirror, 4 rotate 90° then mirror, 5 rotate 90°, 6 rotate 270° then mirror, 7 rotate 270° (rotations anticlockwise; Table D-11) |
guard_band_flag[i] | u(1) | per region | 1 if the region has guard bands |
proj_region_width, _height, _top, _left[i] | u(32) each | per region | the region in the projected picture |
packed_region_width, _height, _top, _left[i] | u(16) each | per region | the region in the packed picture, luma samples |
left_gb_width, right_gb_width, top_gb_height, bottom_gb_height[i] | u(8) each | guard bands | guard band sizes |
gb_not_used_for_pred_flag[i] | u(1) | guard bands | 1: the guard bands are not used in inter prediction |
gb_type[i][j] | u(3) × 4 | guard bands | left, right, top, bottom: 0 unspecified, 1 enough for interpolation, 2 spherically adjacent content at gradually changing quality, 3 at the region’s quality, more reserved |
rwp_gb_reserved_zero_3bits[i] | u(3) | guard bands | 0 |
SEI manifest and prefix indication (200, 201)
SEI manifest (200): manifest_num_sei_msg_types (u(16)), then
per type manifest_sei_payload_type[i] (u(16)) and
manifest_sei_description[i] (u(8)): 0 no such messages are
expected in the coded video sequence; 1 they are expected and necessary; 2 expected and
unnecessary; 3 expected, necessity undetermined; 4 to 255 reserved (Table D-12).
SEI prefix indication (201): prefix_sei_payload_type
(u(16)), num_sei_prefix_indications_minus1
(u(8)), then per indication
num_bits_in_prefix_indication_minus1[i] (u(16)), that many
plus one sei_prefix_data_bits, and 1 bits to the byte boundary. The bits
are the start of the payload of the named message type, so a reader can tell which
variant of it the stream uses.
Shutter interval information (205)
| Field | Coding | Condition | Meaning |
|---|---|---|---|
sii_sub_layer_idx | ue(v) | shutter interval sub-layer of this picture; 0 in the first access unit | |
shutter_interval_info_present_flag | u(1) | index 0 | 1 in the first access unit of the sequence, 0 elsewhere |
sii_time_scale | u(32) | present | time units per second, e.g. 27 000 000 |
fixed_shutter_interval_within_cvs_flag | u(1) | present | 1: one interval for every picture |
sii_num_units_in_shutter_interval | u(32) | fixed | the interval in time units (0 for screen or computer-generated content) |
sii_max_sub_layers_minus1 | u(3) | not fixed | number of sub-layers − 1 |
sub_layer_num_units_in_shutter_interval[i] | u(32) | not fixed, per sub-layer | the interval of pictures with that sub-layer index |
Reserved types
A payload type with no definition is read as reserved_sei_message:
payloadSize bytes that a decoder skips (D.1.39).