PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0回调函数 (d3d12umddi.h)
PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0回调函数记录一个命令,用于将编码操作的输出元数据解析为可读格式。
语法
PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 Pfnd3d12ddiVideoEncodeResolveOutputMetadata00820;
void Pfnd3d12ddiVideoEncodeResolveOutputMetadata00820(
[in] D3D12DDI_HCOMMANDLIST hDrvCommandList,
[in] const D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS_0080_2 *pInputArguments,
[out] const D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS_0082_0 *pOutputArguments
)
{...}
参数
[in] hDrvCommandList
命令列表的驱动程序数据的句柄。 驱动程序使用此内存区域来存储与其命令列表相关的内部数据结构。
[in] pInputArguments
指向包含此回调的输入参数 的D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS_0080_2 结构的指针。
[out] pOutputArguments
指向存储此回调输出 的D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS_0082_0 结构的指针。
返回值
无
备注
对于所有编码器,驱动程序必须在 ResolvedLayoutEncoderMetadataDrvBuffer 的内存中连续放置所有布局信息。 API 客户端将根据驱动程序级别) (D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS_0080_2.EncoderCodec 的编码器类型相应地分析此元数据。
ResolvedLayoutEncoderMetadataDrvBuffer for H264/HEVC 编解码器
对于在 AV1 扩展) 添加之前支持的 H264 和 HEVC 编码器 (类型,解析的缓冲区内存布局不会更改。
类型的 WrittenSubregionsCount 元素 D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0 指示每个磁贴在压缩的输出位流中写入的顺序相同。
调用方可以通过 ResolveEncoderOutputMetadata 的 H264/HEVC 布局推断已解析元数据缓冲区的最大大小:
- maxSliceNumber = D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2.MaxSubregionsNumber;
- MaxEncoderOutputMetadataResolvedBufferSize = sizeof (D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0) + (maxSliceNumber * sizeof (D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0) )
ResolvedLayoutEncoderMetadataDrvBuffer for AV1 编解码器
对于 av1 编码 (pInputArguments-EncoderCodec> 等于 D3D12DDI_VIDEO_ENCODER_CODEC_0095_AV1) (已在 Windows 11 版本 24H2 (WDDM 3.2) 中添加),驱动程序应使用添加的特定于 AV1 的解析缓冲区布局。
内存布局定义为:
类型的 WrittenSubregionsCount 元素 D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0 指示每个磁贴在压缩的输出位流中写入的顺序相同。
- bSize = tile_size_minus_1 + 1 + bStartOffset
- bStartOffset = 相对于此磁贴跳过的字节数,实际位流编码的磁贴大小为 tile_size_minus_1 = (bSize - bStartOffset - 1) 。
- bHeaderSize = 0
- 从偏移量 = [sum j = (0, (i-1) ) { tile[j].bSize }] + tile[i].bStartOffset] 的 compressed_bitstream[offset] 读取第 i 个磁贴
指示编码的框架磁贴网格结构的 D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095 结构
D3D12DDI_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_0095 结构,指示仅在 GPU 上执行 EncodeFrame 后获取的编码元数据值。
调用方可以通过 ResolveEncoderOutputMetadata 中 AV1 的布局推断已解析元数据缓冲区的最大大小。
- MaxTiles = D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2.MaxSubregionsNumber;
- MaxEncoderOutputMetadataResolvedBufferSize = sizeof (D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0) + (MaxTiles * sizeof (D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0) ) ;+ sizeof (D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095) + sizeof (D3D12DDI_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_0095)
有关常规信息,请参阅 D3D12 视频编码 。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 11 (WDDM 3.0) |
标头 | d3d12umddi.h |