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 缓冲区的当前状态 。ReferenceFrames。 pList0ReferenceFrames 和 pList1ReferenceFrames 列出从过去/将来引用到此描述符数组的索引映射。
此描述符数组反过来会将此帧的参考图片映射到重建的图片数组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 |