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

UINT 指定 pReferenceFramesReconPictureDescriptors中的条目数。

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

UINT 指定 pList0RefPicModifications中的项数。

pList0RefPicModifications

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

List1RefPicModificationsCount

UINT 指定 pList1RefPicModifications中的项数。

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 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 60 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 63 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 90 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 93 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 120 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 123 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 150 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 153 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 156 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 180 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 183 没有
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 186 没有

HEVC 视频参数集预期值

Syntax 元素 预期默认值 笔记
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 序列参数集预期值

Syntax 元素 预期默认值 笔记
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)) * 小区BlockPixelsSize 将当前帧分辨率用于D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS。子区域BlockPixelsSize
pic_height_in_luma_samples std::ceil(sequenceTargetResolution.Height / SubregionBlockPixelsSize)) * SubregionBlockPixelsSize 将当前帧分辨率用于D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS。子区域BlockPixelsSize
conformance_window_flag 如果分辨率与子区域BlockPixelsSize 对齐,则为 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 for NV12, 2 for P010 没有
bit_depth_luma_minus8 0 for NV12, 2 for 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