D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264结构 (d3d12video.h)

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

Syntax

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;

Members

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

FrameTypeD3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME时,一个 UINT,指示要用于帧中所有切片标头中要使用的一个 UINT 帧的标识符。

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

一个 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

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

一个 UINT ,用于指定 pList0RefPicModifications 中的项数。

pList0RefPicModifications

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

List1RefPicModificationsCount

一个 UINT ,用于指定 pList1RefPicModifications 中的项数。

pList1RefPicModifications

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

QPMapValuesCount

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

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 None
D3D12_VIDEO_ENCODER_LEVELS_H264_1b 11 SPS.constraint_set3必须为 1
D3D12_VIDEO_ENCODER_LEVELS_H264_11 11 None
D3D12_VIDEO_ENCODER_LEVELS_H264_12 12 None
D3D12_VIDEO_ENCODER_LEVELS_H264_13 13 None
D3D12_VIDEO_ENCODER_LEVELS_H264_2 20 None
D3D12_VIDEO_ENCODER_LEVELS_H264_21 21 None
D3D12_VIDEO_ENCODER_LEVELS_H264_22 22 None
D3D12_VIDEO_ENCODER_LEVELS_H264_3 30 None
D3D12_VIDEO_ENCODER_LEVELS_H264_31 31 None
D3D12_VIDEO_ENCODER_LEVELS_H264_32 32 None
D3D12_VIDEO_ENCODER_LEVELS_H264_4 40 None
D3D12_VIDEO_ENCODER_LEVELS_H264_41 41 None
D3D12_VIDEO_ENCODER_LEVELS_H264_42 42 None
D3D12_VIDEO_ENCODER_LEVELS_H264_5 50 None
D3D12_VIDEO_ENCODER_LEVELS_H264_51 51 None
D3D12_VIDEO_ENCODER_LEVELS_H264_52 52 None
D3D12_VIDEO_ENCODER_LEVELS_H264_6 60 None
D3D12_VIDEO_ENCODER_LEVELS_H264_61 61 None
D3D12_VIDEO_ENCODER_LEVELS_H264_62 62 None

H264 序列参数集预期值

Syntax 元素 预期默认值 注释
profile_idc H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10的枚举值 None
constraint_set0_flag 0 None
constraint_set1_flag 0 None
constraint_set2_flag 0 None
constraint_set3_flag 0 如果使用D3D12_VIDEO_ENCODER_LEVELS_H264_1b
constraint_set4_flag 0 None
constraint_set5_flag 0 None
reserved_zero_2bits 0 None
level_idc 有关 H264 级别,请参阅上表 None
seq_parameter_set_id 用户特定 None
chroma_format_idc 1 仅用于 P010 或 NV12 YUV 4.2.0 格式
bit_depth_luma_minus8 0 for NV12, 2 for P010 None
qpprime_y_zero_transform_bypass_flag 0 None
seq_scaling_matrix_present_flag 0 None
log2_max_frame_num_minus4 与在D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264中相同 None
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 编码会话中使用的引用图片的最大数量 None
gaps_in_frame_num_value_allowed_flag 0 None
pic_width_in_mbs_minus1 std::ceil(sequenceTargetResolution.Width / 16.0)) - 1; None
pic_height_in_map_units_minus1 std::ceil(sequenceTargetResolution.Height / 16.0)) - 1; None
frame_mbs_only_flag 0 无交错支持
direct_8x8_inference_flag 基于D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM None
frame_cropping_flag 0 或 1,具体取决于编码分辨率为 16 对齐或不对齐 None
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 None

H264 图片参数集预期值

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

要求

Requirement 价值
最低支持的客户端 Windows 内部版本 22000
支持的最低服务器 Windows 内部版本 22000
Header d3d12video.h