D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0 结构 (d3d12umddi.h)

D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0 结构包含视频编码操作输入的序列级参数。

语法

typedef struct D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0 {
  D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS_0082_0                 Flags;
  D3D12DDI_VIDEO_ENCODER_INTRA_REFRESH_0080                            IntraRefreshConfig;
  D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_0080_2                           RateControl;
  D3D12DDI_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC_0080                  PictureTargetResolution;
  D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080              SelectedLayoutMode;
  D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2 FrameSubregionsLayoutData;
  D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0                 CodecGopSequence;
} D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0;

成员

Flags

一个 D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS_0082_0 值,该值指示当前编码帧操作的序列控件描述符标志。

IntraRefreshConfig

一个D3D12DDI_VIDEO_ENCODER_INTRA_REFRESH_0080结构,指定在触发刷新内会话时应使用的刷新内模式的参数。 有关使用中新鲜的详细信息,请参阅备注。

RateControl

指定速率控制配置的 D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_0080_2 结构。

检查 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE 标志以确定是否支持动态重新配置速率控制:

  • 如果支持,修改后的 RateControl 会导致速率控制算法重启,新配置从执行关联的 EncodeFrame 命令开始。
  • 如果不支持,应在编码会话开始时设置 RateControl ,在会话期间不会更改。

PictureTargetResolution

描述编码此帧时要使用的分辨率 的D3D12DDI_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC_0080 结构。 必须基于 创建此操作的关联编码器堆时指定的分辨率列表来设置目标分辨率。

检查 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RESOLUTION_RECONFIGURATION_AVAILABLE 标志以确定是否支持动态重新配置解析:

  • 如果支持, PictureTargetResolution 指示要用于关联 EncodeFrame 命令的分辨率。 在某些编解码器中,编码会话过程中的分辨率更改可能需要使用潜在的强制IDR/关键帧请求重置 GOP,还需要重置解码的图片缓冲区 (DPB) 缓冲区和帧管理算法。
  • 如果不支持, PictureTargetResolution 指示整个编码会话的目标分辨率,且在会话期间不得更改。

SelectedLayoutMode

一个D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080值,该值指示正在使用哪种布局模式,以及要在 FrameSubregionsLayoutData 中使用的联合成员。

检查 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE 标志以确定是否支持子区域动态重新配置:

  • 如果支持, SelectedLayoutMode 指示用于关联 EncodeFrame 命令的子分区模式。
  • 如果不支持,*SelectedLayoutMode 指示完整编码会话的目标子区域模式,并且不得在编码会话期间更改。

FrameSubregionsLayoutData

包含图片子区域布局可选编解码器特定数据的 D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2 结构。 如果 SelectedLayoutMode 指示没有子区域,则此成员必须为 NULL。

CodecGopSequence

一个D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0结构,用于指定视频序列中使用的当前 GOP(按显示顺序)。 对 EncodeFrame 的调用必须遵循此 GOP,但在 B 帧重新排序后按顺序排列。

检查 D3D12_VIDEO_ENCODER_SUPPORT_FLAG__0083_0_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE 标志以确定是否支持 GOP 动态重新配置:

  • 如果受支持, CodecGopSequence 指示从关联的 EncodeFrame 命令开始使用的新 GOP 子区域模式。
  • 如果不支持, CodecGopSequence 指示目标 GOP 模式 (完整编码会话的显示顺序) ,并且不得在编码会话期间更改。

注解

有关常规信息,请参阅 D3D12 视频编码

使用刷新内

使用双向引用帧 (B 帧) 与刷新内是互斥的。 调用方应检查,如果刷新内模式处于活动状态,则 CodecGopSequence 的结构不包含 B 帧。 使用 非D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE 的刷新内模式查询 D3D12DDICAPS_VIDEO_ENCODER_SUPPORT_DATA时, CodecGopSequence 集不得包含 B 帧,否则查询将返回不支持。

在每次刷新完成之后,通过定期请求新一波的内刷新,可以使用无限刷新内刷新。

启动持续时间 N 帧的内刷新时,主机将执行以下操作:

  • 设置相应的图片控制标志以在刷新中启动;
  • 控制图片控件结构中 [0..N) 之间的帧索引,以提示驱动程序有关刷新会话内进度的信息。

当显式请求持续时间为 N 帧的刷新内波时,预期行为如下所示:

  • 如果内部刷新的请求发生在 GOP 的开头,则 N 帧会发生内部刷新,然后用 I 帧启动新的 GOP。

  • 如果内部刷新请求发生在 GOP 中间,图片组将结束,直到最后一个提交的 EncodeFrame 命令,并在刷新内会话后重启,新 GOP 从 I 帧开始。 例如,当 GOP 为 IPPPP...IPPPP...,如果在 GOP 的“IPP”部分提交时请求刷新内启动,则将忽略该 GOP 的最后两个 P 帧,将为 N 个下一个帧发出刷新内会话,然后预期会重新启动 GOP 结构的新关键帧。

对于基于行的刷新中:

  • 配置的 GOP 结构必须重新配置为 Infinite IPPP...P。。。在刷新会话期间,GOP (GOPLength = 0u 和 PPicturePeriod = 1u) 。 然后,可以在刷新内波完成后再次重新配置它。

  • 配置的子分区模式将重新配置为与每帧的 N 个统一切片分区相对应,持续时间为 N 编码帧 命令。 当分区分区设置为与刷新内要求不兼容的模式时,这一点尤其重要,例如,当切片中的编码单元行将中断设置为每个切片的字节的限制时。 基于行的刷新预期是,生成的帧包含 N 个切片(所有 P 切片),当前刷新内行切片除外,该切片必须是 I 切片。

要求

要求
最低受支持的客户端 Windows 11 (WDDM 3.0)
标头 d3d12umddi.h

另请参阅

D3D12DDI_VIDEO_ENCODER_ENCODEFRAME_INPUT_STREAM_ARGUMENTS_0082_0

D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAGS_0083_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0

PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2