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 編解碼器
針對 H264 和 HEVC 編碼器 (在新增 AV1 擴充功能之前支援的類型) ,解析的緩衝區內存配置不會變更。
type D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0的 WrittenSubregionsCount 元素,指出每個磚在壓縮輸出位流中寫入的順序相同。
呼叫端可以透過 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 特定已解析緩衝區配置。
記憶體設定定義為:
type D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0的 WrittenSubregionsCount 元素,指出每個磚在壓縮輸出位流中寫入的順序相同。
- bSize = tile_size_minus_1 + 1 + bStartOffset
- bStartOffset = 相對於此磚的位元組,實際的 bitstream 自動程式代碼磚大小會tile_size_minus_1 = (bSize - bStartOffset - 1) 。
- bHeaderSize = 0
- 第 i 個磚是從位移 = [sum j = (0, (i-1) ) { tile[j].bSize }] + tile[i].b].bStartOffset 的compressed_bitstream[offset] 讀取
指出編碼框架磚網格線結構的 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 |