共用方式為


D3D12 AV1 視訊編碼

Direct3D12 視訊編碼功能已擴充,以支援從 Windows 11 版本 24H2 (WDDM 3.2) 開始的 AV1 編碼。 本文說明現有 D3D12 視訊編碼 DDI 需要修改和新結構以支援 AV1 編碼的延伸點。 如需包括應用層級特定數據的詳細資訊,請參閱 AV1 D3D12視訊編碼規格

速率控制的擴展

下列現有的列舉將透過擴充功能來更新,以支援速率控制和速率控制支援:

啟用 D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT 時,擴充速率控制結構會用於 D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS_0080_2.pConfiguration_XXX;若未啟用,則會根據 D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080 參考頁面上記載的表格使用舊版結構。

視訊編碼支援擴充功能

現有的視訊相關架構已擴充,以允許驅動程序報告 AV1 視訊編碼支援和功能。 本節列出用來查詢和報告 AV1 視訊編碼支援的新增或更新結構和列舉。

編碼作業

AV1 的預期位元流標頭值

驅動程式/主機標頭編碼責任

假設具有 K 磚的編碼框架,驅動程式會在壓縮的 bitstream 中寫入 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 編碼 API 中實作的其他編解碼器一樣。

解析度變更和空間延展性

如果驅動程式報告 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE,它仍然只適用於關鍵影格上的解析度變更。

使用中的活動序列標頭的 max_frame_*_minus_1 語法必須設為所使用的相關聯的 ID3D12VideoEncoderHeap 中的最大解析度。 使用解析度的不同畫面格也會出現在相關聯的 ID3D12VideoEncoderHeap 中,可以使用 frame_size() 中的 AV1 語法frame_size_override_flag來傳達解析度的變更。

如果支持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的編碼作業:

此外,驅動程式的現有 PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 回呼需要更新,以便能夠處理針對AV1編碼所新增的AV1特定解析緩衝區佈局。