D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 结构 (d3d12video.h)

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

语法

typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 {
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS                                         Flags;
  D3D12_VIDEO_ENCODER_FRAME_TYPE_H264                                                               FrameType;
  UINT                                                                                              pic_parameter_set_id;
  UINT                                                                                              idr_pic_id;
  UINT                                                                                              PictureOrderCountNumber;
  UINT                                                                                              FrameDecodingOrderNumber;
  UINT                                                                                              TemporalLayerIndex;
  UINT                                                                                              List0ReferenceFramesCount;
  UINT                                                                                              *pList0ReferenceFrames;
  UINT                                                                                              List1ReferenceFramesCount;
  UINT                                                                                              *pList1ReferenceFrames;
  UINT                                                                                              ReferenceFramesReconPictureDescriptorsCount;
  D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264                                             *pReferenceFramesReconPictureDescriptors;
  UCHAR                                                                                             adaptive_ref_pic_marking_mode_flag;
  UINT                                                                                              RefPicMarkingOperationsCommandsCount;
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION           *pRefPicMarkingOperationsCommands;
  UINT                                                                                              List0RefPicModificationsCount;
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList0RefPicModifications;
  UINT                                                                                              List1RefPicModificationsCount;
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList1RefPicModifications;
  UINT                                                                                              QPMapValuesCount;
  INT8                                                                                              *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264;

成员

Flags

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

FrameType

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

pic_parameter_set_id

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

idr_pic_id

D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAMEFrameType** 时,是一个 UINT,指示要用于帧中所有切片标头的IDR 帧的标识符。

PictureOrderCountNumber

指定当前帧显示顺序的 UINT

FrameDecodingOrderNumber

指定具有语义的帧解码顺序的 UINT ,由切片标头指示frame_num语法元素,该元素在每个引用图片之后递增。

TemporalLayerIndex

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

List0ReferenceFramesCount

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

pList0ReferenceFrames

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

List1ReferenceFramesCount

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

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

adaptive_ref_pic_marking_mode_flag

为帧引用处理定义语义模式的 UCHAR

adaptive_ref_pic_marking_mode_flag值 指定了引用图片标记模式
0 1
滑动窗口参考图片标记模式:为短期参考图片提供先入先出机制的标记模式。 自适应参考图片标记模式:一种引用图片标记模式,提供语法元素,用于将引用图片标记为“供参考使用”并分配长期帧索引。

RefPicMarkingOperationsCommandsCount

指定与当前帧关联的引用图片标记操作数的 UINT 。 要求 将adaptive_ref_pic_marking_mode_flag 设置为 1。

pRefPicMarkingOperationsCommands

指向 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION 结构的数组的指针,该结构表示与当前帧关联的引用图片标记操作的列表。 此列表描述的操作需要在编码会话期间相应地反映在 DPB 描述符中。

List0RefPicModificationsCount

指定 pList0RefPicModifications 中的项数的 UINT

pList0RefPicModifications

指向 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION 结构的数组的指针,该结构表示 pList0ReferenceFrames 列表的引用图片列表修改操作的列表。

List1RefPicModificationsCount

指定 pList1RefPicModifications 中的项数的 UINT

pList1RefPicModifications

指向 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION 结构的数组的指针,该结构表示 pList1ReferenceFrames 列表的引用图片列表修改操作的列表。

QPMapValuesCount

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

pRateControlQPMap

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

备注

请注意,如果当前帧标记为引用图片,则输出必须包含重建后的图片以及主机的位流,以便将其放置在重建的图片引用列表中的未来命令中。 请注意,某些帧类型可能存在标记为引用的限制,检查设置这些值之前的功能支持。

下表列出了 H264 编码的预期 SPS 和 PPS 值。

H264 的Level_idc映射

D3D12 级别 预期level_idc 说明
D3D12_VIDEO_ENCODER_LEVELS_H264_1 10
D3D12_VIDEO_ENCODER_LEVELS_H264_1b 11 SPS.constraint_set3必须为 1
D3D12_VIDEO_ENCODER_LEVELS_H264_11 11
D3D12_VIDEO_ENCODER_LEVELS_H264_12 12
D3D12_VIDEO_ENCODER_LEVELS_H264_13 13
D3D12_VIDEO_ENCODER_LEVELS_H264_2 20
D3D12_VIDEO_ENCODER_LEVELS_H264_21 21
D3D12_VIDEO_ENCODER_LEVELS_H264_22 22
D3D12_VIDEO_ENCODER_LEVELS_H264_3 30
D3D12_VIDEO_ENCODER_LEVELS_H264_31 31
D3D12_VIDEO_ENCODER_LEVELS_H264_32 32
D3D12_VIDEO_ENCODER_LEVELS_H264_4 40
D3D12_VIDEO_ENCODER_LEVELS_H264_41 41
D3D12_VIDEO_ENCODER_LEVELS_H264_42 42
D3D12_VIDEO_ENCODER_LEVELS_H264_5 50
D3D12_VIDEO_ENCODER_LEVELS_H264_51 51
D3D12_VIDEO_ENCODER_LEVELS_H264_52 52
D3D12_VIDEO_ENCODER_LEVELS_H264_6 60
D3D12_VIDEO_ENCODER_LEVELS_H264_61 61
D3D12_VIDEO_ENCODER_LEVELS_H264_62 62

H264 序列参数集预期值

Syntax 元素 预期的默认值 说明
profile_idc H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 的枚举值
constraint_set0_flag 0
constraint_set1_flag 0
constraint_set2_flag 0
constraint_set3_flag 0 如果使用 D3D12_VIDEO_ENCODER_LEVELS_H264_1b,则为 1
constraint_set4_flag 0
constraint_set5_flag 0
reserved_zero_2bits 0
level_idc 有关 H264 级别,请参阅上表
seq_parameter_set_id 用户特定
chroma_format_idc 1 仅适用于 P010 或 NV12 YUV 4.2.0 格式
bit_depth_luma_minus8 0 用于 NV12,2 用于 P010
qpprime_y_zero_transform_bypass_flag 0
seq_scaling_matrix_present_flag 0
log2_max_frame_num_minus4 与 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 中相同
pic_order_cnt_type 与 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 中相同 此 API 仅支持模式 0 和 2
log2_max_pic_order_cnt_lsb_minus4 与 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 中相同 仅当 pic_order_cnt_type == 0 时
max_num_ref_frames 编码会话中使用的参考图片的最大数量
gaps_in_frame_num_value_allowed_flag 0
pic_width_in_mbs_minus1 std::ceil (sequenceTargetResolution.Width / 16.0) ) - 1;
pic_height_in_map_units_minus1 std::ceil (sequenceTargetResolution.Height / 16.0) ) - 1;
frame_mbs_only_flag 0 无隔行扫描支持
direct_8x8_inference_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM
frame_cropping_flag 0 或 1,具体取决于编码分辨率是否为 16 对齐
frame_cropping_rect_left_offset 0 仅当 frame_cropping_flag = 1 时
frame_cropping_rect_right_offset ( (pic_width_in_mbs_minus1+1) * 16 - sequenceTargetResolution.Width) / 2 仅当 frame_cropping_flag = 1 时
frame_cropping_rect_top_offset ( (pic_height_in_map_units_minus1+1) * 16 - sequenceTargetResolution.Height) / 2 仅当 frame_cropping_flag = 1 时
frame_cropping_rect_bottom_offset 0 仅当 frame_cropping_flag = 1 时
vui_paramenters_present_flag 0

H264 图片参数集预期值

语法元素 预期的默认值 说明
pic_parameter_set_id 特定于用户的
seq_parameter_set_id 特定于用户的
entropy_coding_mode_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING
pic_order_present_flag 0 仅支持 pic_cnt_type = 0,2
num_slice_groups_minus1 0
num_ref_idx_l1_active_minus1 std::max (static_cast<INT> (pictureControl.List0ReferenceFramesCount) - 1, 0)
num_ref_idx_l0_active_minus1 std::max (static_cast<INT> (pictureControl.List1ReferenceFramesCount) - 1, 0)
weighted_pred_flag 0
weighted_bipred_idc 0
pic_init_qp_minus26 0
pic_init_qs_minus26 0
chroma_qp_index_offset 0
deblocking_filter_control_present_flag 1
constrained_intra_pred_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION
redundant_pic_cnt_present_flag 0
transform_8x8_mode_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM 仅当使用高配置文件时
pic_scaling_matrix_present_flag 0
second_chroma_qp_index_offset 0

要求

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