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 命令的分辨率。 在某些编解码器中,编码会话中间的分辨率更改可能需要使用潜在的强制进行 SSH/关键帧请求重置 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 EncodeFrame 命令。 当分区分区设置为与刷新内要求的不兼容模式时,这一点尤其重要,例如,当切片中编码单元行会中断每个切片的字节数限制。 基于行内刷新的预期是,生成的帧包含 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