次の方法で共有


ビデオのデコード

Microsoft Direct3D ランタイムは、ユーザー モード ディスプレイ ドライバーの DecodeBeginFrame 関数と DecodeEndFrame 関数を呼び出して、これらの関数が呼び出される間の、ユーザー モード ディスプレイ ドライバーがビデオをデコードできる期間を示します。 ユーザー モード ディスプレイ ドライバーでビデオ デコード操作を実行する前に、Microsoft Direct3D ランタイムでユーザー モードディスプレイ ドライバーの SetDecodeRenderTarget 関数を呼び出して、これらのデコード操作のレンダー ターゲット サーフェスを設定する必要があります。 ただし、SetDecodeRenderTarget の呼び出しは、開始フレームから終了フレームまでの期間外でのみ行うことができます。

保護モードおよび DecodeBeginFrame の呼び出しでは、Direct3D ランタイムは、D3DDDIARG_DECODEBEGINFRAME 構造体の pPVPSetKey メンバーがポイントする変数の DirectX VA コンテンツ キーを設定または変更します。 デコード デバイスは、このフレームと後続のフレームの圧縮された DirectX VA バッファーの保護された転送で、このキーを使用します。

注: Direct3D ランタイムは、キーを変更または設定するためだけに pPVPSetKey ポインターを設定します。 以前に設定したキーを使用し続けるために、ランタイムはポインターを NULL に設定して、同じキーの再読み込みに時間がかかる可能性を回避します。 ドライバーは、冗長な設定を排除しません。 デコーダー アプリケーションでは、冗長な設定を避ける必要があります。

デコード操作用のレンダー ターゲット サーフェスが設定されると、ユーザー モードディスプレイ ドライバーは DecodeExecute 関数の呼び出しを受け取り、開始フレームから終了フレームまでの期間にビデオ デコード操作を実行できます。

DecodeExecute の呼び出しでは、D3DDDIARG_DECOD の hDecode メンバーで指定される各デコード GUID に対して、D3DDDIARG_DECODEEXECUTE 構造体の pCompressedBuffers 配列にある、DXVADDI_DECODEBUFFERDESC 構造体の CompressedBufferType メンバーで指定されるすべてのバッファー型が使用されるわけではありません。 たとえば、スライス コントロール (D3DDDIFMT_SLICECONTROLDATA)、逆量子化 (D3DDDIFMT_INVERSEQUANTIZATIONDATA)、ビット ストリーム (D3DDDIFMT_BITSTREAMDATA) のバッファーは、可変長デコード (VLD) 処理にのみ必要であり、デブロッキング制御バッファー (D3DDDIFMT_DEBLOCKINGDATA) は MPEG-2 ではまったく使用されません。

保護モードでは、保護された転送用にコンテンツ キーを使用して暗号化されたバッファーには、バッファー記述子内 (つまり DXVADDI_DECODEBUFFERDESC 構造体の pCipherCounter メンバーがポイントする変数内) の初期カウンター値へのポインターが含まれます。 ユーザー モード ディスプレイ ドライバーの DecodeExecute 関数の個々の呼び出しでは、DecodeExecute がデコード操作でバッファーのデータを使用する前に、ローカル ビデオ メモリに対してこのようなバッファーの保護された転送を実行する必要があります。 ただし、残差 (D3DDDIFMT_RESIDUALDIFFERENCEDATA) とビット ストリーム (D3DDDIFMT_BITSTREAMDATA) 以外の種類の DirectX VA 圧縮バッファーを暗号化する計画はありません。