表示 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 缓冲区的当前状态 。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
一个 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 |