Windows 图形显示驱动开发-WDDM 3.2- D3D12 AV1 视频编码(二)

AV1 的预期位流标头值
驱动程序/主机标头编码责任

给定具有 K 个磁贴的编码帧,驱动程序将在压缩位流中写入 K 个 decode_tile() AV1 语法元素,这与 EncodeFrame 参数中请求的磁贴相对应。

然后,API 客户端利用 tile_start_and_end_present_flag/tg_start/tg_end 元素构建 tile_group_obu() AV1 语法元素,以便根据需要将磁贴排列为磁贴组,条件是按顺序放置磁贴。 tile_size_minus_1 元素是从相关磁贴 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA 信息编码的,decode_tile() 元素是从压缩位流缓冲区复制的。 最后,每个 tile_group_obu() 都被封装在 OBU_TILE_GROUP 类型的 open_bitstream_unit() 元素周围,并以 OBU_FRAME_HEADER 作为前缀。 对于单个磁贴组,可以改用 OBU_FRAME 类型。

API 客户端负责将当前帧的 obu_extension_flag 推断为 !(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1),并在 open_bitstream_unit() 中进行必要的 temporal_id 和 spatial_id 编码。

EncodeFrame 提交按编码顺序进行,与 D3D12 Encode API 中实现的其他编解码器类似。

分辨率更改和空间可伸缩性

如果驱动程序报告 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE,,它仍仅适用于关键帧上的分辨率更改。

活动序列标头的 max_frame_*_minus_1 语法必须设置为所使用的相关 ID3D12VideoEncoderHeap 中存在的最大分辨率。 使用分辨率的不同帧也存在于关联的 ID3D12VideoEncoderHeap 中,可以使用 AV1 语法frame_size_override_flag in frame_size() 来传达分辨率更改。

如果支持 D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME,则引用帧必须指向比编码的当前切换帧更高的或相等的分辨率,并且不同的分辨率必须全部存在于正在使用的相关 ID3D12VideoEncoderHeap 中。

同样,如果支持空间可伸缩性,则引用帧的不同分辨率必须全部存在于所使用的关联的 ID3D12VideoEncoderHeap 中。

速率控制说明

D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget 的可接受范围为 0..63。 最低值产生最高的质量。

通常,D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE 适用于不同速率控制模式的质量与速度调整和以下速率控制参数:常量 QP 中的 QP、CBR、VBR 和 QVBR 中的比特率和质量级别。 驱动程序可以在 D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0.EncodeErrorFlags 中为其他不支持的速率控制参数重新配置返回 D3D12DDI_VIDEO_ENCODER_ENCODE_ERROR_FLAG_0082_0_RECONFIGURATION_REQUEST_NOT_SUPPORTED。

编码操作 API

添加或更新了以下结构和枚举的扩展,以支持 AV1 编码操作:

  • D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO_0095
  • D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095
  • D3D12DD1_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS
  • D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095
  • D3D12DDI_VIDEO_ENCODER_AV1_SEGMENT_DATA_0095
  • D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095
  • D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095
  • D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095
  • D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095
  • D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095
  • D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095
  • D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095
  • D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095
  • pAV1PicData 已添加到 D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0
  • D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095
  • pTilesPartition_AV1 已添加到 D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2
  • D3D12DDI_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_0095

此外,需要更新驱动程序的现有 PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 回调,以处理为 AV1 编码添加的 AV1 特定解析缓冲区布局。

相关推荐
如若1232 小时前
Windows SSH + Headscale/Tailscale 组网及免密登录完整配置教程
运维·windows·ubuntu·ssh·内网穿透
ITHAOGE153 小时前
下载 | Win11 25H2 官方正式版ISO映像!(10月更新、消费者版/专业版、商业版/企业版、26200.9711)
windows·科技·微软·电脑
John_Hui3 小时前
Windows 10 安装版本:mysql-8.1.0-winx64.zip
数据库·windows·mysql
kingx34 小时前
Windows Server安全配置深度复盘:关键 Payload 与解题思路
windows·靶场·web·加固
技术人生0014 小时前
DirectX修复工具下载安装教程-Windows系统游戏dll修复工具下载安装修复教程
windows·游戏
硅基手札5 小时前
CAN 技术系列 08 · CAN 控制器寄存器与 IP 架构
驱动开发·架构·嵌入式开发·通信协议·can总线
2601_962364976 小时前
企业 PC 安全升级,Windows Hello 商用生物识别模组介绍
windows·安全
硅基手札6 小时前
CAN 技术系列 09 · CAN 传输模式:轮询 / 中断 / DMA
驱动开发·bsp·嵌入式开发·通信协议·can总线
2501_916007478 小时前
Windows OpenSSL 生成 iOS 证书,制作 p12 与描述文件,KXBuild 签名实操
windows·vscode·ios·objective-c·个人开发·swift·敏捷流程
ccbw1610 小时前
CH9444X多芯片组合的通道扩展架构与损耗叠加分析
驱动开发·架构·带宽·采集