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 ) に応じて、このメタデータを解析します。
H264/HEVC コーデックの ResolvedLayoutEncoderMetadataDrvBuffer
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))
AV1 コーデックの ResolvedLayoutEncoderMetadataDrvBuffer
WINDOWS 11 バージョン 24H2 (WDDM 3.2) で追加された AV1 エンコード (pInputArguments-EncoderCodec> は D3D12DDI_VIDEO_ENCODER_CODEC_0095_AV1 と等しい) の場合、ドライバーは追加された AV1 固有の解決済みバッファー レイアウトを使用する必要があります。
メモリ レイアウトは次のように定義されます。
type D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0の WrittenSubregionsCount 要素は、各タイルが圧縮出力ビットストリームに書き込まれるのと同じ順序で示されます。
- bSize = tile_size_minus_1 + 1 + bStartOffset
- bStartOffset = このタイルを基準にスキップするバイト数。実際のビットストリームコードタイルサイズはtile_size_minus_1 = (bSize - bStartOffset - 1) です。
- bHeaderSize = 0
- i 番目のタイルは、offset = [sum j = (0, (i-1))){ tile[j].bSize }] + tile[i].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) |
Header | d3d12umddi.h |