D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION 结构 (d3d12video.h)
将引用图片中的更改描述为内存操作,作为操作标识符和操作所需的关联参数的元组。
语法
typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION {
UCHAR memory_management_control_operation;
UINT difference_of_pic_nums_minus1;
UINT long_term_pic_num;
UINT long_term_frame_idx;
UINT max_long_term_frame_idx_plus1;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION;
成员
memory_management_control_operation
要应用于影响引用图片标记状态的控制操作。
difference_of_pic_nums_minus1
与 memory_management_control_operation 等于 3 或 1 一起使用,可将长期帧索引分配给短期参考图片或将短期参考图片标记为“未使用以供参考”。
long_term_pic_num
与 memory_management_control_operation 等于 2 一起使用,将长期参考图片标记为“未使用以供参考”。
long_term_frame_idx
与等于 3 或 6 的memory_management_control_operation 一起使用,以便为图片分配长期帧索引。
max_long_term_frame_idx_plus1
值减 1 指定在收到另一个值(max_long_term_frame_idx_plus1) )之前,允许长期参考图片 (的长期帧索引的最大值。
备注
有关详细信息,请参阅 H264 规范了解更多详细信息:第 8.2.5.4 节“自适应内存控制解码的参考图片标记过程”。
变量 MaxLongTermFrameIdx 派生如下:
– 如果 max_long_term_frame_idx_plus1 等于 0,则 MaxLongTermFrameIdx 设置为“无长期帧索引”。 – 否则, (max_long_term_frame_idx_plus1 大于 0) , MaxLongTermFrameIdx 设置为等于 max_long_term_frame_idx_plus1 • 1。
将当前帧标记为短期引用的操作由 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS 结构中的标志提供,其对应的 PictureOrderCountNumber 和 FrameDecodingOrderNumber 值在关联的图片控件结构中指示。
变量 max_num_ref_frames 在此 API 中由报告的最大 DPB 容量指示。
请注意,为了将一个IDR帧标记为长期引用,建议的显式机制是先将它标记为短期引用,方法是在调用DID帧时设置D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE,然后使用内存管理操作“3”将其提升为长期参考帧,将短期参考图片标记为“用于长期引用”,并将长期帧索引分配给它。
或者,如果编码一个IDR帧并将 adaptive_ref_pic_marking_mode_flag 设置为 1,则驱动程序将假定客户端正在尝试 long_term_reference_flag 设置 H264 切片标头,并在 EncodeFrame 调用的输出位流中执行此操作。
要求
最低受支持的客户端 | Windows 内部版本 22000 |
最低受支持的服务器 | Windows 内部版本 22000 |
标头 | d3d12video.h |
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈