Introduction
Annex G of ITU-T H.264 (06/2026, version 16) is Multiview Video Coding (MVC), used for stereoscopic 3D Blu-ray and other multi-camera video. Annex H is MVC with depth (MVCD), which adds a depth view next to each texture view. The first view, the base view, is coded as ordinary H.264 in NAL unit types 1 and 5, so a plain decoder plays it. Other views use NAL unit type 20 (coded slice extension), a prefix NAL unit (type 14) before each base view slice, and a subset SPS (type 15). In MVCD the depth views use type 21. Slice data, macroblock layer and residual syntax are exactly those of the main syntax. 3D-AVC, a further extension that predicts between depth and texture, is on its own page, 3D-AVC.
A set of NAL units of one view in one access unit is a view component. The view order
index VOIdx of a view is its position i in the SPS list
view_id[i]. An anchor access unit is one whose views are decoded without
reference to earlier access units (apart from inter-view prediction); every IDR access
unit is an anchor access unit.
NAL unit header MVC extension (G.7.3.1.1)
Follows the first NAL header byte of types 14, 20 and (with a different layout, see
3D-AVC) 21 when svc_extension_flag
is 0. The byte layout is on the NAL units page.
Fields in a prefix NAL unit apply to the unit that follows it.
| Field | Coding | Meaning |
|---|---|---|
non_idr_flag | u(1) | 0: IDR access unit (the prefixed unit is then type 5), 1: not (type 1). Replaces IdrPicFlag. Same for all VCL units of an access unit; 1 when nal_ref_idc is 0. Inferred 1 for type 1 without a prefix and 0 for type 5 without one |
priority_id | u(6) | lower value means higher priority; used by sub-bitstream extraction only. Inferred 0 for a base view unit with no prefix |
view_id | u(10) | the view; inferred 0 for a base view unit without prefix, and no other view may use 0 then |
temporal_id | u(3) | temporal layer; the same for all units of an access unit and 0 when it contains an IDR picture |
anchor_pic_flag | u(1) | 1: anchor access unit. Must be 1 when non_idr_flag is 0 and 0 when nal_ref_idc is 0 |
inter_view_flag | u(1) | 1: other views of the same access unit may use this view component for inter-view prediction; inferred 1 without a prefix |
reserved_one_bit | u(1) | 1; decoders ignore it |
nal_ref_idc is the same for all VCL units of a view component, and a
prefix NAL unit takes that of the unit after it. Filler data units inherit
priority_id, view_id and temporal_id from the
latest type 14 or 20 unit. Slice data partitioning is not used, so NAL types 2 to 4 do
not occur in any profile of these annexes.
SPS MVC extension (G.7.3.2.1.4)
Carried in the subset SPS (type 15) when profile_idc is 118, 128 or 134.
The subset SPS layout is on the
sequence parameter set page. All MVC extensions
referred to by a coded video sequence are identical.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
num_views_minus1 | ue(v) | maximum number of views − 1, 0 to 1023 (some may be absent) | |
view_id[i] | ue(v) | i = 0 to num_views_minus1 | view id of the view with VOIdx i, 0 to 1023 |
num_anchor_refs_l0[i], num_anchor_refs_l1[i] | ue(v) each | i from 1 | number of inter-view references in initial list 0 and 1 for anchor view components; at most Min(15, num_views_minus1); 0 for i = 0 |
anchor_ref_l0[i][j], anchor_ref_l1[i][j] | ue(v) | each reference | view_id of the j-th reference |
num_non_anchor_refs_l0[i], num_non_anchor_refs_l1[i] | ue(v) each | i from 1 | same for non-anchor view components |
non_anchor_ref_l0[i][j], non_anchor_ref_l1[i][j] | ue(v) | each reference | every non-anchor reference must also be an anchor reference |
num_level_values_signalled_minus1 | ue(v) | level values signalled − 1, 0 to 63 | |
level_idc[i] | u(8) | the level | |
num_applicable_ops_minus1[i] | ue(v) | operation points that level covers − 1, 0 to 1023 | |
applicable_op_temporal_id[i][j] | u(3) | highest temporal_id of the operation point | |
applicable_op_num_target_views_minus1[i][j], applicable_op_target_view_id[i][j][k] | ue(v) | the target output views | |
applicable_op_num_views_minus1[i][j] | ue(v) | views needed to decode them, including those they depend on, − 1 | |
mfc_format_idc | u(6) | profile_idc 134 | 0: side-by-side base view (frame packing type 3) with the other view top-bottom; 1: top-bottom with the other view side-by-side (Table G-1). Values 2 to 63 are reserved and a decoder ignores the sequence |
default_grid_position_flag | u(1) | mfc_format_idc 0 or 1 | 1: use the default grid positions |
view0_grid_position_x, _y, view1_grid_position_x, _y | u(4) each | flag 0 | each 4, 8 or 12 (as frame0_grid_position_x in the frame packing SEI). Defaults: idc 0: view 0 (4, 8), view 1 (12, 8); idc 1: view 0 (8, 4), view 1 (8, 12) |
rpu_filter_enabled_flag | u(1) | profile_idc 134 | 1: a down- then up-sampling filter generates each inter-view reference; 0: every inter-view reference sample is 128 |
rpu_field_processing_flag | u(1) | 134 and frame_mbs_only_flag 0 | 1: frame inter-view references are processed as two fields; inferred 0 |
With mfc_format_idc present, every base view component has a frame packing
arrangement SEI message with the type of Table G-1, quincunx_sampling_flag 0,
content_interpretation_type 1, spatial_flipping_flag 0 and the
grid positions above; the non-base view has none and the same properties are inferred.
Slice header and reference lists (G.7.3.3.1.1)
The slice header of a type 20 unit is the ordinary
slice header, with
ref_pic_list_mvc_modification() in place of
ref_pic_list_modification() (also for type 21). Differences in meaning:
frame_num identifies the view component and its constraints apply per
view_id; field_pic_flag and bottom_field_flag are
equal across the access unit; direct_spatial_mv_pred_flag must be 1 when
RefPicList1[0] is an inter-view reference in the same access unit; and
weighted_bipred_idc may not be 2 when a list holds such a reference.
num_ref_idx_lX_active_minus1 is 0 to 7 for frames and 0 to 15 for fields
when num_views_minus1 is 1, and 0 to 15 and 0 to 31 when it is greater.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
ref_pic_list_modification_flag_l0 | u(1) | slice_type % 5 not 2 and not 4 | 1: list 0 commands follow |
modification_of_pic_nums_idc | ue(v), repeated | flag 1, until 3 | Table G-2: 0 subtract abs_diff_pic_num_minus1 from the picture number prediction; 1 add it; 2 long_term_pic_num follows; 3 end of loop; 4 subtract abs_diff_view_idx_minus1 from the reference view index prediction; 5 add it. The first value may not be 3 |
abs_diff_pic_num_minus1, long_term_pic_num | ue(v) | idc 0, 1 or 2 | as in the main syntax |
abs_diff_view_idx_minus1 | ue(v) | idc 4 or 5 | difference − 1 to the predicted view index intViewIdx; the reference has view_id anchor_ref_lX[currVOIdx][intViewIdx] in an anchor view component or non_anchor_ref_lX[currVOIdx][intViewIdx] otherwise; 0 to Max(0, count − 1) |
ref_pic_list_modification_flag_l1 and its loop | slice_type % 5 is 1 | same structure for list 1 |
Profiles (G.10.1)
| Profile | profile_idc | Main constraints |
|---|---|---|
| Multiview High | 118 | base view obeys Progressive High and its SPS has profile_idc 100 or 77 with constraint_set4_flag 1, or 66 or constraint_set0_flag with constraint_set1_flag 1, or 77 with constraint_set0_flag 1, or 88 with constraint_set1_flag and constraint_set4_flag 1; I, P, B slices only; frame_mbs_only_flag 1; 4:0:0 or 4:2:0; 8-bit; no transform bypass; one slice group; no redundant pictures; no arbitrary slice order |
| Stereo High | 128 | base view obeys High (SPS profile_idc 77, or constraint_set1_flag 1, or 100); two views at most (num_views_minus1 below 2); no progressive-only restriction is stated; same limits on slice groups, bit depth and chroma; the active view SPS have the same level_idc as the active SPS. Also decodes Multiview High streams signalled with constraint_set5_flag 1 |
| MFC High | 134 | as Stereo High, with the frame-compatible base view and mfc_format_idc; decodes Stereo High streams too |
| Multiview Depth High | 138 | Annex H: stereoscopic texture sub-bitstream obeys Stereo High; depth views are 4:0:0; 8-bit; I, P, B slices; one slice group |
| MFC Depth High | 135 | Annex H: stereoscopic texture sub-bitstream obeys MFC High; otherwise as Multiview Depth High |
The Annex H profiles require, when frame_mbs_only_flag is 1 for a texture
view, the same for the depth view of the same view_id, and
mb_adaptive_frame_field_flag 0 when it is 0 for a depth view. Level limits
(G.10.2, H.10.2) and the 3D-AVC profile 139 (Enhanced Multiview Depth High) are in the
specification; profile 139 is on the 3D-AVC
page.
Sub-bitstream extraction (G.8.5.3, H.8.5.3)
Inputs: pIdTarget (default 63), tIdTarget (7) and a list of
target view_ids (default the base view). The required anchor and non-anchor
views that the targets depend on are added first (G.8.5.1, G.8.5.2). Then VCL and filler
units are removed whose priority_id exceeds pIdTarget, whose
temporal_id exceeds tIdTarget or whose view_id is
not listed; access units left empty go; and when only the base view remains, units of
types 14 and 15 and SEI units starting with message types 36 to 44 or 46 go too. Nested
SEI units, view scalability information and operation point not present messages that no
longer apply are removed. If the base view was dropped, the lowest remaining view is
converted into the base view (informative procedure G.8.5.5). In MVCD the process also has
depthPresentFlagTarget (default 0) and an optional list of depth view ids:
type 21 units are removed when it is 0 or when their view_id is not in the
depth list; also removed are units starting with SEI types 48 to 53 when only the base
view is left, and, for a texture-only result, an MVCD scalable nesting message with
sei_op_texture_only_flag 0 is rewritten as an MVC one. Every result conforms.
The base view bitstream (extraction with no input) always conforms to an Annex A profile;
an MVCD stream also contains a stereoscopic texture bitstream that conforms to an Annex G
profile with two views.
SPS MVCD extension (H.7.3.2.1.5)
The subset SPS of an MVCD profile carries this instead of the MVC extension. Its semantics are those of the MVC extension applied to texture and depth view components.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
num_views_minus1 | ue(v) | as MVC | |
view_id[i] | ue(v) | per view | as MVC |
depth_view_present_flag[i] | u(1) | per view | 1: a depth view with this view_id exists. NumDepthViews counts them and DepthViewId[] lists their ids |
texture_view_present_flag[i] | u(1) | per view | 1: a texture view exists; must be 1 when the depth flag is 0 |
num_anchor_refs_l0[i], anchor_ref_l0[i][j], num_anchor_refs_l1[i], anchor_ref_l1[i][j] | ue(v) | i from 1, depth view present | inter-view references of the depth view components |
num_non_anchor_refs_l0[i], non_anchor_ref_l0[i][j], num_non_anchor_refs_l1[i], non_anchor_ref_l1[i][j] | ue(v) | i from 1, depth view present | same for non-anchor depth view components |
num_level_values_signalled_minus1, level_idc[i] (u(8)), num_applicable_ops_minus1[i], applicable_op_temporal_id[i][j] (u(3)), applicable_op_num_target_views_minus1[i][j] | as MVC | ||
applicable_op_target_view_id[i][j][k] ue(v), applicable_op_depth_flag[i][j][k], applicable_op_texture_flag[i][j][k] u(1) each | per target view | whether the depth and/or the texture view of that id is in the operation point; the texture flag must be 1 when the depth flag is 0 | |
applicable_op_num_texture_views_minus1[i][j], applicable_op_num_depth_views[i][j] | ue(v) each | texture views, and depth views, needed to decode the operation point (range 0 to 1023) | |
mvcd_vui_parameters_present_flag | u(1) | 1: mvcd_vui_parameters_extension() follows | |
texture_vui_parameters_present_flag | u(1) | 1: an mvc_vui_parameters_extension() for the texture-only sub-bitstream follows |
MVC and MVCD VUI extensions (G.14.1, H.14.1)
Sent in the VUI of the subset SPS. Each entry gives timing and HRD data for one operation point; the sub-bitstream is the one extracted with that temporal id and target views. All MVC VUI extensions of a coded video sequence are identical. The timing fields have the meaning of the same-named VUI fields.
| MVC field | MVCD field | Coding | Meaning |
|---|---|---|---|
vui_mvc_num_ops_minus1 | vui_mvcd_num_ops_minus1 | ue(v) | operation points − 1, 0 to 1023 |
vui_mvc_temporal_id[i] | vui_mvcd_temporal_id[i] | u(3) | highest temporal_id |
vui_mvc_num_target_output_views_minus1[i] | vui_mvcd_num_target_output_views_minus1[i] | ue(v) | target views − 1 |
vui_mvc_view_id[i][j] | vui_mvcd_view_id[i][j] | ue(v) | target view id |
| none | vui_mvcd_depth_flag[i][j], vui_mvcd_texture_flag[i][j] | u(1) each | depth and texture views of the target |
vui_mvc_timing_info_present_flag[i] | vui_mvcd_timing_info_present_flag[i] | u(1) | 1: the next three follow |
vui_mvc_num_units_in_tick[i], vui_mvc_time_scale[i], vui_mvc_fixed_frame_rate_flag[i] | same with mvcd | u(32), u(32), u(1) | as num_units_in_tick, time_scale, fixed_frame_rate_flag |
vui_mvc_nal_hrd_parameters_present_flag[i] then hrd_parameters(); vui_mvc_vcl_hrd_parameters_present_flag[i] then hrd_parameters() | same with mvcd | u(1) | NAL and VCL HRD of the operation point |
vui_mvc_low_delay_hrd_flag[i] | vui_mvcd_low_delay_hrd_flag[i] | u(1) | when either HRD flag is 1 |
vui_mvc_pic_struct_present_flag[i] | vui_mvcd_pic_struct_present_flag[i] | u(1) | as pic_struct_present_flag |
MVC SEI messages (G.13)
Types 36 to 44 and 46. Most of the Annex D messages (types 2, 3, 6 to 23, 45, 47 and
the later ones listed in G.13.2) keep their meaning but, when not in an MVC scalable
nesting message, apply to the view component of the access unit with the lowest view order index (VOIdxMin); nested in an MVC scalable nesting message they apply to the listed views, or all of them.
| Type | Name | Fields and meaning |
|---|---|---|
| 36 | parallel_decoding_info | seq_parameter_set_id ue(v) (0 to 31; names the subset SPS holding the dependencies), then for each view from 1: when the access unit is an anchor, pdi_init_delay_anchor_minus2_l0[i][j] for j = 0 to num_anchor_refs_l0[i] and the same for list 1; otherwise pdi_init_delay_non_anchor_minus2_l0/_l1[i][j], all ue(v), 0 to PicHeightInMbs − 2. The reference area from macroblock row (current row + value + 2) × 16 to the bottom of the referenced view component may not be used for inter-view prediction, so views can be decoded in parallel |
| 37 | mvc_scalable_nesting | operation_point_flag u(1). If 0: all_view_components_in_au_flag u(1), and when that is 0 num_view_components_minus1 ue(v) (0 to 1023) and sei_view_id[i] u(10). If 1: num_view_components_op_minus1 ue(v), sei_op_view_id[i] u(10) each, and sei_op_temporal_id u(3) (highest temporal id of the sub-bitstream). Then zero bits to the byte boundary (sei_nesting_zero_bit) and exactly one nested sei_message() of type 23 or lower. A buffering period or picture timing message (types 0, 1) must use operation_point_flag 1 and any other must use 0 |
| 38 | view_scalability_info | only in an IDR access unit; num_operation_points_minus1 ue(v) (0 to 1023). Per operation point: operation_point_id ue(v) (0 to 65535), priority_id u(5) and temporal_id u(3) (maxima), num_target_output_views_minus1 and view_id[i][j] ue(v); flags profile_level_info_present_flag, bitrate_info_present_flag, frm_rate_info_present_flag, then (only for a single target view) view_dependency_info_present_flag, then parameter_sets_info_present_flag and bitstream_restriction_info_present_flag. Then op_profile_level_idc u(24) (profile_idc, constraint flags, reserved bits and level_idc as three bytes); avg_bitrate, max_bitrate, max_bitrate_calc_window u(16) each (rate = (x & 16383) × 10(2 + (x >> 14)) bit/s, G-82); constant_frm_rate_idc u(2) and avg_frm_rate u(16); num_directly_dependent_views and directly_dependent_view_id[j] ue(v), or view_dependency_info_src_op_id ue(v); the parameter set lists num_seq_parameter_sets, seq_parameter_set_id_delta, num_subset_seq_parameter_sets, subset_seq_parameter_set_id_delta, num_pic_parameter_sets_minus1, pic_parameter_set_id_delta (ue(v)) or parameter_sets_info_src_op_id; and the bitstream restriction block motion_vectors_over_pic_boundaries_flag u(1), max_bytes_per_pic_denom, max_bits_per_mb_denom, log2_max_mv_length_horizontal, log2_max_mv_length_vertical, max_num_reorder_frames, max_dec_frame_buffering (ue(v)), with the meanings of the VUI fields. Every listed operation point exists in the sequence |
| 39 | multiview_scene_info | max_disparity ue(v), 0 to 1023: the largest disparity in luma samples between spatially adjacent views of an access unit. IDR access unit, applies to the sequence |
| 40 | multiview_acquisition_info | camera parameters; below |
| 41 | non_required_view_component | num_info_entries_minus1 ue(v); per entry view_order_index (1 to num_views_minus1), num_non_required_view_components_minus1 and index_delta_minus1[j] (ue(v)). The non-required view order index is view_order_index − index_delta_minus1 − 1: views not needed to decode that view or later components of the same view_id |
| 42 | view_dependency_change | seq_parameter_set_id ue(v), anchor_update_flag, non_anchor_update_flag u(1). When a flag is 1, for each view from 1 a bit per inter-view reference of the SPS (anchor_ref_l0_flag[i][j], anchor_ref_l1_flag, or the non_anchor versions): 0 means that reference does not occur in the final list. Not cumulative; lasts to the next such message |
| 43 | operation_points_not_present | num_operation_points ue(v) then operation_point_not_present_id[k] ue(v): operation points of the previous view_scalability_info that are absent. 0 means all are present |
| 44 | base_view_temporal_hrd | IDR access unit; num_of_temporal_layers_in_base_view_minus1 ue(v) (0 to 7); per layer sei_mvc_temporal_id u(3), sei_mvc_timing_info_present_flag then sei_mvc_num_units_in_tick, sei_mvc_time_scale (u(32)), sei_mvc_fixed_frame_rate_flag; sei_mvc_nal_hrd_parameters_present_flag and hrd_parameters(); sei_mvc_vcl_hrd_parameters_present_flag and hrd_parameters(); sei_mvc_low_delay_hrd_flag when either; sei_mvc_pic_struct_present_flag. Values as in the VUI |
| 46 | multiview_view_position | num_views_minus1 ue(v) (equal to the SPS value), view_position[i] ue(v): left to right display order of the view with VOIdx i, starting at 0; then multiview_view_position_extension_flag u(1), 0 (1 reserved, the rest is ignored). IDR access unit |
Multiview acquisition information (40)
Not nested: IDR access unit, applies to the sequence, and num_views_minus1
equals the SPS value, the loop index being the view order index. It may also be nested
in an MVCD scalable nesting message, where it applies from its access unit to the next
such message and the index is the position in sei_view_id. A world point
wP maps to camera point cP by
s · cP[i] = A[i] · R[i]−1 · (wP − T[i]) (G-85), a right-handed system
with the origin at the upper left of the image.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
num_views_minus1 | ue(v) | views − 1, 0 to 1023 | |
intrinsic_param_flag, extrinsic_param_flag | u(1) each | presence of the intrinsic (matrix A) and extrinsic (R, T) parameters | |
intrinsic_params_equal_flag | u(1) | intrinsic | 1: one set for all cameras |
prec_focal_length, prec_principal_point, prec_skew_factor | ue(v) each | intrinsic | maximum truncation error 2−value, each 0 to 31 |
sign_focal_length_x[i], exponent_focal_length_x[i], mantissa_focal_length_x[i], and the same for focal_length_y, principal_point_x, principal_point_y, skew_factor | u(1), u(6), u(v) | intrinsic; one set when the parameters are equal, else one per view | a floating-point value (below). Exponent 63 means unspecified |
prec_rotation_param, prec_translation_param | ue(v) each | extrinsic | truncation error exponents, 0 to 31 |
sign_r[i][j][k], exponent_r[i][j][k], mantissa_r[i][j][k]; sign_t[i][j], exponent_t[i][j], mantissa_t[i][j] | u(1), u(6), u(v) | extrinsic, per view, rows j = 1 to 3, columns k = 1 to 3 | the rotation matrix R and translation vector T of the camera: three rows each of three r values then one t value |
Each value is a sign s, exponent e (0 to 62) and mantissa n
of v bits: x = (−1)s · 2e−31 · (1 + n ÷ 2v) when 0 < e < 63, and
(−1)s · 2−(30+v) · n when e is 0. The
mantissa length is Max(0, prec − 30) bits when e is 0 and
Max(0, e + prec − 31) otherwise, where prec is the matching
prec_* value.
MVCD SEI messages (H.13)
Types 48 to 53 and 181 (type 54 is in Annex I, see 3D-AVC). Message types 2, 3 and
others listed in H.13.2 apply to the texture view component with the lowest
VOIdx when not nested.
| Type | Name | Fields and meaning |
|---|---|---|
| 48 | mvcd_scalable_nesting | as type 37 with texture and depth. Without operation_point_flag: all_view_components_in_au_flag, else num_view_components_minus1 and per view sei_view_id[i] u(10) and sei_view_applicability_flag[i] u(1) (1: texture and depth; 0: depth only). With it: sei_op_texture_only_flag u(1) (1: the operation point is the sub-bitstream extracted with depthPresentFlagTarget 0), num_view_components_op_minus1, then per view sei_op_view_id[i] u(10) and, unless texture-only, sei_op_depth_flag[i] and sei_op_texture_flag[i] (inferred 1; the texture flag is 1 when the depth flag is 0), then sei_op_temporal_id u(3). Then zero bits to the byte boundary and one sei_message() |
| 49 | mvcd_view_scalability_info | as type 38, but each target view is followed by mvcd_op_view_info() and so is each directly dependent view. mvcd_op_view_info(): view_info_depth_view_present_flag u(1), then mvcd_depth_view_flag u(1) when it is 1; view_info_texture_view_present_flag u(1), then mvcd_texture_view_flag u(1) when it is 1. The parameter set counts are named num_seq_parameter_set_minus1, num_subset_seq_parameter_set_minus1 and num_pic_parameter_set_minus1 and the reorder field num_reorder_frames; other fields as type 38 |
| 50 | depth_representation_info | below |
| 51 | three_dimensional_reference_displays_info | below |
| 52 | depth_timing | per_view_depth_timing_flag u(1). If 1, one depth_timing_offset() per depth view in ascending view order index, otherwise one for all. depth_timing_offset(): offset_len_minus1 u(5), depth_disp_delay_offset_fp u(v) with offset_len_minus1 + 1 bits, depth_disp_delay_offset_dp u(6). The depth was acquired fp ÷ 2dp clock ticks (Annex C) relative to the DPB output time of its access unit. Lasts until the next such message |
| 53 | depth_sampling_info | below |
| 181 | alternative_depth_info | below |
Depth representation information (50)
Parameters of the depth views, for view synthesis. It may be in any access unit (an IDR access unit is recommended) and lasts to the next such message.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
all_views_equal_flag | u(1) | 1: the values apply to all views (one entry) | |
num_views_minus1 | ue(v) | flag 0 | views − 1; at most NumDepthViews − 1 |
z_near_flag, z_far_flag | u(1) each | presence of the nearest and farthest depth values | |
z_axis_equal_flag | u(1) | either z flag | 1: all views share one Z axis |
common_z_axis_reference_view | ue(v) | z axis equal | view_id of the depth view whose Z axis is used |
d_min_flag, d_max_flag | u(1) each | presence of the minimum and maximum disparity | |
depth_representation_type | ue(v) | Table H-1: 0 luma is the inverse of Z, uniformly quantised to 0 to 255; 1 disparity, uniform; 2 Z, uniform; 3 non-linearly mapped disparity (the model below); 4 to 15 reserved, a decoder ignores the rest of the message | |
For each of the numViews entries: | |||
depth_info_view_id[i] | ue(v) | the view_id the values apply to | |
z_axis_reference_view[i] | ue(v) | a z flag and not z_axis_equal_flag | depth view that supplies the Z axis (types 0 and 2) |
disparity_reference_view[i] | ue(v) | a disparity flag | depth view used to derive DMin and DMax (types 1 and 3) |
depth_representation_sei_element() for ZNear, ZFar, DMin, DMax | the matching flag, in that order | da_sign_flag u(1), da_exponent u(7) (0 to 126; 127 means unspecified), da_mantissa_len_minus1 u(5), da_mantissa u(v) with that length + 1 bits | |
When depth_representation_type is 3: | |||
depth_nonlinear_representation_num_minus1 | ue(v) | linear segments − 2, 0 to 62 | |
depth_nonlinear_representation_model[i] | ue(v) | i = 1 to num_minus1 + 1 | deviation from the straight line, 0 to 65535 (the end values are 0) |
A value is x = (−1)s · 2e−31 · (1 + n ÷ 2v) for 0 < e < 127 and
(−1)s · 2−(30+v) · n for e = 0 (Table H-2).
DMin and DMax are in luma sample widths of the texture view;
ZNear and ZFar use the units of the extrinsic camera
parameters. For type 3, DepthLUT[x] converts a depth sample to disparity
over 0 to 255: with n = depth_nonlinear_representation_num_minus1 + 2, node
k has pos = 255 · k ÷ n and deviation
dev = model[k], giving the point (pos − dev, pos + dev); between consecutive nodes the output is linearly
interpolated, rounded and clipped to 0 to 255.
3D reference displays information (51)
IDR access unit, and a multiview acquisition information message must be in the same access unit. It gives the reference display width, optional viewing distance (both in centimetres) and the baseline the sequence was optimised for. The receiver scales the baseline and the horizontal shift by the ratio of the reference width to its own width.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
prec_ref_baseline, prec_ref_display_width | ue(v) each | truncation error exponents, 0 to 31 | |
ref_viewing_distance_flag | u(1) | 1: the viewing distance is given | |
prec_ref_viewing_dist | ue(v) | flag | 0 to 31 |
num_ref_displays_minus1 | ue(v) | reference displays − 1, 0 to 31 | |
exponent_ref_baseline[i] u(6), mantissa_ref_baseline[i] u(v) | per display | the baseline in the units of the x translation of the acquisition message. Exponent 63 means unspecified | |
exponent_ref_display_width[i] u(6), mantissa_ref_display_width[i] u(v) | per display | the display width | |
exponent_ref_viewing_distance[i] u(6), mantissa_ref_viewing_distance[i] u(v) | viewing distance flag | the viewing distance | |
additional_shift_present_flag[i] | u(1) | per display | 1: a shift follows |
num_sample_shift_plus512[i] | u(10) | flag | 0 to 1023. Below 512: shift the left view left by 512 − value samples relative to the right view; 512 none; above 512: right by value − 512. Apply half to each view and fill the edges with a background colour |
three_dimensional_reference_displays_extension_flag | u(1) | 0; 1 is reserved and the rest is ignored |
Values are floating point as in the acquisition message, with the exponent 0 to 62 and mantissa length Max(0, e + prec − 31) bits (Max(0, prec − 30) for e = 0).
Alternative depth information (181)
For a sequence with two output views in which the non-base view packs up to four
half-width, half-height constituent pictures (global view and depth, GVD). It needs
4:2:0, 8-bit, frame_mbs_only_flag 1, no inter-view prediction (all anchor
and non-anchor reference counts 0) and a depth representation information message. IDR
access unit, valid for the sequence. Constituent picture i from 1 to 4 starts at
luma position (0,0), (0, h), (w, 0), (w, h) with w = (pic_width_in_mbs_minus1 + 1) × 8 and h the same for height.
| Field | Coding | Condition | Meaning |
|---|---|---|---|
depth_type | ue(v) | 0 (the only defined value; others are ignored) | |
num_constituent_views_gvd_minus1 | ue(v) | type 0 | 0 to 3: constituent pictures in each texture component − 1 |
depth_present_gvd_flag, z_gvd_flag, intrinsic_param_gvd_flag, rotation_gvd_flag, translation_gvd_flag | u(1) each | whether depth pictures are packed in the non-base depth view; and presence of the Z, intrinsic, rotation (unit matrix inferred when absent) and horizontal translation parameters | |
sign_gvd_z_near_flag[i], exp_gvd_z_near[i] u(7), man_len_gvd_z_near_minus1[i] u(5), man_gvd_z_near[i] u(v), and the same four for z_far | z flag, each i from 0 to num_constituent_views_gvd_minus1 + 1 | zNear and zFar per camera, binToFp(s, e, n, v) = (−1)s · (e = 0 ? 2−(30+v) · n : 2e−31 · (1 + n ÷ 2v)) (H-1). Exponent 127 means unspecified | |
prec_gvd_focal_length, prec_gvd_principal_point | ue(v) | intrinsic | 0 to 31 |
prec_gvd_rotation_param, prec_gvd_translation_param | ue(v) | rotation, translation | 0 to 31 |
per camera: sign_gvd_focal_length_x/y[i], exp_gvd_focal_length_x/y[i] u(6), man_gvd_focal_length_x/y[i]; the same for principal_point_x/y; sign_gvd_r[i][j][k], exp_gvd_r u(6), man_gvd_r for a 3×3 matrix; sign_gvd_t_x[i], exp_gvd_t_x u(6), man_gvd_t_x | u(1), u(6), u(v) | intrinsic, rotation, translation flags | the camera parameters of each constituent view, which with the decoded depth let a receiver project the base view into each constituent view and rebuild the views |
Depth sampling information (53)
Relative size and grid position of depth samples. IDR access unit, valid for the sequence. The syntax (H.13.1.7):
| Field | Coding | Condition | Meaning |
|---|---|---|---|
dttsr_x_mul, dttsr_x_dp | u(16), u(4) | depth sample width relative to luma texture sample width ≈ mul ÷ 2dp; inferred 1 and 0, and a mul of 0 is reserved | |
dttsr_y_mul, dttsr_y_dp | u(16), u(4) | same for height | |
per_view_depth_grid_pos_flag | u(1) | 1: a grid position per listed view | |
num_video_plus_depth_views_minus1 | ue(v) | flag 1 | views − 1 |
depth_grid_view_id[i] | ue(v) | flag 1 | the view_id of each entry |
depth_grid_position() | once per entry, or once | depth_grid_pos_x_fp u(20), _dp u(4), _sign_flag u(1), then the same for y. Offset of the depth grid's top-left sample from the texture luma grid = (1 − 2 · sign) · fp ÷ 2dp; inferred 0 |
Not covered on this page
The decoding processes of G.8 and H.8 (inter-view reference list construction, marking, inter-view prediction, MFC enhanced resolution reconstruction) and the level limits of G.10.2 and H.10.2 are not reproduced. The long semantic constraints on SEI messages 38 and 49 (G.13.2.3 beyond the fields) are summarised only. Source: ITU-T H.264 (06/2026, version 16), Annexes G and H.