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