D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC 结构 (d3d12video.h)

表示用于 HEVC 编码的关联 EncodeFrame 命令的图片级控件元素。

语法

typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
  D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC                       FrameType;
  UINT                                                      slice_pic_parameter_set_id;
  UINT                                                      PictureOrderCountNumber;
  UINT                                                      TemporalLayerIndex;
  UINT                                                      List0ReferenceFramesCount;
  UINT                                                      *pList0ReferenceFrames;
  UINT                                                      List1ReferenceFramesCount;
  UINT                                                      *pList1ReferenceFrames;
  UINT                                                      ReferenceFramesReconPictureDescriptorsCount;
  D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC     *pReferenceFramesReconPictureDescriptors;
  UINT                                                      List0RefPicModificationsCount;
  UINT                                                      *pList0RefPicModifications;
  UINT                                                      List1RefPicModificationsCount;
  UINT                                                      *pList1RefPicModifications;
  UINT                                                      QPMapValuesCount;
  INT8                                                      *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC;

成员

Flags

D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS枚举中值的按位 OR 组合,指定要编码的帧的配置标志。

FrameType

指定图片类型的 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC 枚举中的值。 确保特定于编解码器的标志支持指定的类型。 此选择必须与主机设置的 GOP 结构配置保持同步。 请注意,GOP 按显示顺序定义,此图片类型选择必须遵循 GOP,但按编码顺序。

slice_pic_parameter_set_id

一个 UINT,指定要在当前帧的切片标头中使用的值来引用 PPS。

PictureOrderCountNumber

指定当前帧显示顺序的 UINT

TemporalLayerIndex

一个 UINT ,用于指定临时层次结构中的图片层编号。 检查 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC中的最大层数。

List0ReferenceFramesCount

一个 UINT ,指定要用于此帧的过去帧引用数。 此值应与 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC 中公开的内容一致。

pList0ReferenceFrames

指向 UINT 数组的指针,该数组指定要用于此帧的过去帧引用帧的列表。 此数组中的每个整数值都会索引到 pReferenceFramesReconPictureDescriptors 中,以引用 DPB 中保留的图片。

List1ReferenceFramesCount

一个 UINT ,指定要用于此帧的未来帧引用数。 此值应与 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC 中公开的内容一致。

pList1ReferenceFrames

指向 UINT 数组的指针,该数组指定要用于此帧的未来帧引用帧的列表。 此数组中的每个整数值都会索引到 pReferenceFramesReconPictureDescriptors 中,以引用 DPB 中保留的图片。

ReferenceFramesReconPictureDescriptorsCount

指定 pReferenceFramesReconPictureDescriptors 中的条目数的 UINT

pReferenceFramesReconPictureDescriptors

指向 UINT 数组的指针,该数组描述保存在 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC 中的 DPB 缓冲区的当前状态 。ReferenceFramespList0ReferenceFramespList1ReferenceFrames 列出从过去/将来引用到此描述符数组的索引映射。

此描述符数组反过来会将此帧的参考图片映射到重建的图片数组D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC中的资源索引 。ReferenceFrames。 此外,对于每个参考图片,它指示编码和显示顺序编号,以及它是否是长期引用。

此数组的大小始终与D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC匹配。关联 EncodeFrame 命令的 ReferenceFrames.NumTextures

List0RefPicModificationsCount

指定 pList0RefPicModifications 中的项数的 UINT

pList0RefPicModifications

指向包含 L0 列表修改命令的 UINT 数组的指针。

List1RefPicModificationsCount

指定 pList1RefPicModifications 中的项数的 UINT

pList1RefPicModifications

指向包含 L1 列表修改命令的 UINT 数组的指针。

QPMapValuesCount

指定 pRateControlQPMap 中存在的元素数的 UINT。 这应与帧中的编码块数匹配,将帧分辨率舍入到最接近的对齐值。

pRateControlQPMap

指向 Int8 数组的指针,其中包含要在此帧的每个平方区域上使用的 QP 映射值(按行/列扫描顺序)。 可以使用当前分辨率和D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS计算 QP 地图维度 。QPMapRegionPixelsSize 表示平方区域大小。

备注

下表列出了 HEVC 编码的预期 VPS、SPS 和 PPS 值。

HEVC 的Level_idc映射

D3D12 级别 预期general_level_idc 说明
D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 30 对应于 3 * 枚举级别 2 位后缀 (10)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 60 对应于 3 * 枚举级别 2 位后缀 (20)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 63 对应于 3 * 枚举级别 2 位后缀 (21)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 90 对应于 3 * 枚举级别 2 位后缀 (30)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 93 对应于 3 * 枚举级别 2 位后缀 (31)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 1 20 对应于 3 * 枚举级别 2 位后缀 (40)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 1 23 对应于 3 * 枚举级别 2 位后缀 (41)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 1 50 对应于 3 * 枚举级别 2 位后缀 (50)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 1 53 对应于 3 * 枚举级别 2 位后缀 (51)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 1 56 对应于 3 * 枚举级别 2 位后缀 (52)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 1 80 对应于 3 * 枚举级别 2 位后缀 (60)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 1 83 对应于 3 * 枚举级别 2 位后缀 (61)
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 1 86 对应于 3 * 枚举级别 2 位后缀 (62)

HEVC 视频参数设置预期值

语法元素 预期的默认值 说明
vps_video_parameter_set_id 特定于用户的
vps_base_layer_internal_flag 0
vps_base_layer_available_flag 0
vps_max_layers_minus1 0
vps_max_sub_layers_minus1 0
vps_temporal_id_nesting_flag 1
vps_reserved_ffff_16bits 0xFFFF
general_profile_space 0
general_tier_flag 1 用于高级层,0 用于主层
general_profile_idc D3D12_VIDEO_ENCODER_PROFILE_HEVC枚举值 + 1
general_profile_compatibility_flag[general_profile_space] 1
general_progressive_source_flag 1
general_interlaced_source_flag 0
general_non_packed_constraint_flag 1
general_frame_only_constraint_flag 1
general_reserved_zero_44bits 44 位零
general_level_idc 请参阅上表
vps_sub_layer_ordering_info_present_flag 0
vps_max_dec_pic_buffering_minus1[0] (MaxReferenceFramesInDPB/以前的参考帧/ + 1 /其他当前帧协调图片/) - 1/*减1 标头/;
vps_max_num_reorder_pics[0] 如果没有 B 帧,则为 0。 否则vps_max_dec_pic_buffering_minus1。
vps_max_latency_increase_plus1[0] 1
vps_max_layer_id 0
vps_num_layer_sets_minus1 0
vps_timing_info_present_flag 0
vps_extension_flag 0

HEVC 序列参数设置预期值

语法元素 预期的默认值 说明
sps_video_parameter_set_id 特定于用户的
sps_max_sub_layers_minus1 与关联的 VPS 中相同
sps_temporal_id_nesting_flag 与关联的 VPS 中相同
general_profile_space 0
general_tier_flag 1 用于高级层,0 用于主层
general_profile_idc D3D12_VIDEO_ENCODER_PROFILE_HEVC枚举值 + 1
general_profile_compatibility_flag[general_profile_space] 1
general_progressive_source_flag 1
general_interlaced_source_flag 0
general_non_packed_constraint_flag 1
general_frame_only_constraint_flag 1
general_reserved_zero_44bits 44 位零
general_level_idc 请参阅上表
chroma_format_idc 1 适用于 NV12 和 P010 的 4.2.0
pic_width_in_luma_samples std::ceil (sequenceTargetResolution.Width / SubregionBlockPixelsSize) ) * SubregionBlockPixelsSize 将当前帧分辨率用于D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS。SubregionBlockPixelsSize
pic_height_in_luma_samples std::ceil (sequenceTargetResolution.Height / SubregionBlockPixelsSize) ) * SubregionBlockPixelsSize 将当前帧分辨率用于D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS。SubregionBlockPixelsSize
conformance_window_flag 如果分辨率与 SubregionBlockPixelsSize 对齐,则为 0;否则为 1
conf_win_left_offset 0 仅当 conformance_windows_flag = 1 时
conf_win_right_offset (sps.pic_width_in_luma_samples - encodeResolution.Width) >> 1 仅当 conformance_windows_flag = 1 时
conf_win_top_offset 0 仅当 conformance_windows_flag = 1 时
conf_win_bottom_offset (sps.pic_height_in_luma_samples - encodeResolution.Height) >> 1 仅当 conformance_windows_flag = 1 时
bit_depth_luma_minus8 0 用于 NV12,2 用于 P010
bit_depth_luma_minus8 0 用于 NV12,2 用于 P010
log2_max_pic_order_cnt_lsb_minus4 基于D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC
sps_sub_layer_ordering_info_present_flag 与关联的 VPS 中相同
sps_max_dec_pic_buffering_minus1 与关联的 VPS 中相同
sps_max_num_reorder_pics 与关联的 VPS 中相同
sps_max_latency_increase_plus1 与关联的 VPS 中相同
log2_min_luma_coding_block_size_minus3 std::log2 (minCuSize) - 3) 例如 minCUSize=8 for D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8
log2_diff_max_min_luma_coding_block_size std::log2 (maxCuSize) - std::log2 (minCuSize) ) 例如 maxCUSize=16 for D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16
log2_min_transform_block_size_minus2 std::log2 (minTuSize) - 2) 例如 minTuSize=4 for D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4
log2_diff_max_min_transform_block_size std::log2 (maxTuSize) - std::log2 (minTuSize) ) 例如 maxTuSize=16 for D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16
max_transform_hierarchy_depth_inter 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC
max_transform_hierarchy_depth_inter 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC
scaling_list_enabled_flag 0
amp_enabled_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION
sample_adaptive_offset_enabled_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER
pcm_enabled_flag 0
num_short_term_ref_pic_sets 0
long_term_ref_pics_present_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES
num_long_term_ref_pics_sps 0
sps_temporal_mvp_enabled_flag 0
strong_intra_smoothing_enabled_flag 0
vui_parameters_present_flag 0
sps_extension_flag 0

HEVC 图片参数设置预期值

Syntax 元素 预期的默认值 说明
pps_pic_parameter_set_id 用户特定
pps_seq_parameter_set_id 用户特定
dependent_slice_segments_enabled_flag 0
output_flag_present_flag 0
num_extra_slice_header_bits 0
sign_data_hiding_enabled_flag 0
cabac_init_present_flag 1
num_ref_idx_lx_default_active_minus1[0] std::max (static_cast<INT> (pictureControl.List0ReferenceFramesCount) - 1, 0) )
num_ref_idx_lx_default_active_minus1[1] std::max (static_cast<INT> (pictureControl.List1ReferenceFramesCount) - 1, 0) )
init_qp_minus26 0
constrained_intra_pred_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION
transform_skip_enabled_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING
cu_qp_delta_enabled_flag 1
diff_cu_qp_delta_depth 0
pps_cb_qp_offset 0
pps_cr_qp_offset 0
pps_slice_chroma_qp_offsets_present_flag 1
weighted_pred_flag 0 不支持 API 中的加权预测
weighted_bipred_flag 0 不支持 API 中的加权预测
transquant_bypass_enabled_flag 0
tiles_enabled_flag 0
entropy_coding_sync_enabled_flag 0
pps_loop_filter_across_slices_enabled_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES
deblocking_filter_control_present_flag 1
deblocking_filter_override_enabled_flag 0
pps_deblocking_filter_disabled_flag 0
pps_beta_offset_div2 0
pps_tc_offset_div2 0
pps_scaling_list_data_present_flag 0
lists_modification_present_flag 如果发送下D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC列出修改,则为 1。 否则设置为 0。
log2_parallel_merge_level_minus2 0
slice_segment_header_extension_present_flag 0
pps_extension_flag 0

要求

   
最低受支持的客户端 Windows 内部版本 22000
最低受支持的服务器 Windows 内部版本 22000
标头 d3d12video.h