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