IDirectXVideoDecoder
COM公式ドキュメント
DirectX Video Acceleration (DXVA) のビデオデコーダーデバイスを表します。
解説(Remarks)
IDirectXVideoDecoder の各メソッドは Direct3D デバイスに対して呼び出しを行います。そのため、デバイス作成時に指定する D3DCREATE フラグがこのインターフェイスの動作に影響することがあります。たとえば D3DCREATE_MULTITHREADED フラグを指定した場合、デコード操作の間 Direct3D のグローバルクリティカルセクションが保持されます。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このデコーダーデバイスを作成した DirectX Video Acceleration (DXVA) デコーダーサービスを取得します。
| ppService | IDirectXVideoDecoderService** | out | IDirectXVideoDecoderService インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
このデバイスの作成に使用されたパラメーターを取得します。(IDirectXVideoDecoder.GetCreationParameters)
| pDeviceGuid | GUID* | outoptional | デバイス GUID を受け取ります。このパラメーターは NULL にできます。 |
| pVideoDesc | DXVA2_VideoDesc* | outoptional | ビデオ形式の説明を受け取る DXVA2_VideoDesc 構造体へのポインター。このパラメーターは NULL にできます。 |
| pConfig | DXVA2_ConfigPictureDecode* | outoptional | デコーダー構成を受け取る DXVA2_ConfigPictureDecode 構造体へのポインター。このパラメーターは NULL にできます。 |
| pDecoderRenderTargets | IDirect3DSurface9*** | out | IDirect3DSurface9 インターフェイスポインターの配列を受け取ります。これらのポインターはデコーダーのレンダーターゲットを表します。このメソッドは配列用のメモリを確保し、各ポインターに対して AddRef を呼び出します。呼び出し元は各ポインターを解放し、CoTaskMemFree を呼び出して配列のメモリを解放する必要があります。このパラメーターは NULL にできます。 |
| pNumSurfaces | DWORD* | outoptional | pppDecoderRenderTargets 配列の要素数を受け取ります。このパラメーターは NULL にできます。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効な引数です。少なくとも 1 つのパラメーターは非 NULL である必要があります。 |
解説(Remarks)
結果が不要なパラメーターは NULL に設定できます。少なくとも 1 つのパラメーターは非 NULL である必要があります。
pppDecoderRenderTargets に非 NULL の値を指定してレンダーターゲットサーフェスを受け取る場合、pNumSurfaces は NULL にできません。これは pppDecoderRenderTargets で返される配列のサイズを受け取るためです。
DirectX Video Acceleration (DXVA) デコーダーバッファーへのポインターを取得します。
| BufferType | DWORD | in | 取得するバッファーの種類。次のいずれかの値を使用します。 |
| ppBuffer | void** | out | メモリバッファーの先頭へのポインターを受け取ります。 |
| pBufferSize | DWORD* | out | バッファーのサイズをバイト単位で受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは、バッファーを含む Direct3D サーフェスをロックします。バッファーの使用が終わったら、IDirectXVideoDecoder::ReleaseBuffer を呼び出してサーフェスのロックを解除してください。
GPU に多くの操作がキューイングされている場合、このメソッドはブロックすることがあります。空きバッファーが利用可能になると、ブロックが解除されます。
IDirectXVideoDecoder::GetBuffer の呼び出しによって取得したバッファーを解放します。
| BufferType | DWORD | in | 解放するバッファーの種類。GetBuffer メソッドの BufferType パラメーターで使用したものと同じ値を指定します。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
デコード操作を開始します。
| pRenderTarget | IDirect3DSurface9* | in | デコードされたフレームが書き込まれるレンダーターゲットの IDirect3DSurface9 インターフェイスへのポインター。 |
| pvPVPData | void* | inoptional | 予約済み。NULL に設定してください。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効なサーフェスの種類です。「解説」を参照してください。 |
解説(Remarks)
このメソッドを呼び出した後、IDirectXVideoDecoder::Execute を呼び出してデコード操作を実行します。すべてのデコード操作を実行し終えたら、IDirectXVideoDecoder::EndFrame を呼び出します。
BeginFrame の各呼び出しには、対応する EndFrame の呼び出しが必要であり、BeginFrame の呼び出しをネストすることはできません。
DXVA 1.0 からの移行に関する注意: バッファーをインデックスで指定する IAMVideoAccelerator::BeginFrame メソッドとは異なり、このメソッドは非圧縮バッファーへのポインターを直接受け取ります。
pRenderTarget が指すサーフェスは、DxvaType に DXVA2_VideoDecoderRenderTarget の値を指定して IDirectXVideoAccelerationService::CreateSurface を呼び出して作成する必要があります。
デコード操作の終了を通知します。
| pHandleComplete | HANDLE* | inoutoptional | 予約済み。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
現在のフレームに対してデコード操作を実行します。
| pExecuteParams | DXVA2_DecodeExecuteParams* | in | デコード操作に必要な情報を含む DXVA2_DecodeExecuteParams 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、IDirectXVideoDecoder::BeginFrame を呼び出す必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirectXVideoDecoder "{F2B0810A-FD00-43C9-918C-DF94E2D8EF7D}" #usecom global IDirectXVideoDecoder IID_IDirectXVideoDecoder "{}" #comfunc global IDirectXVideoDecoder_GetVideoDecoderService 3 sptr #comfunc global IDirectXVideoDecoder_GetCreationParameters 4 var,var,var,sptr,var #comfunc global IDirectXVideoDecoder_GetBuffer 5 int,sptr,var #comfunc global IDirectXVideoDecoder_ReleaseBuffer 6 int #comfunc global IDirectXVideoDecoder_BeginFrame 7 sptr,sptr #comfunc global IDirectXVideoDecoder_EndFrame 8 sptr #comfunc global IDirectXVideoDecoder_Execute 9 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirectXVideoDecoder "{F2B0810A-FD00-43C9-918C-DF94E2D8EF7D}" #usecom global IDirectXVideoDecoder IID_IDirectXVideoDecoder "{}" #comfunc global IDirectXVideoDecoder_GetVideoDecoderService 3 sptr #comfunc global IDirectXVideoDecoder_GetCreationParameters 4 sptr,sptr,sptr,sptr,sptr #comfunc global IDirectXVideoDecoder_GetBuffer 5 int,sptr,sptr #comfunc global IDirectXVideoDecoder_ReleaseBuffer 6 int #comfunc global IDirectXVideoDecoder_BeginFrame 7 sptr,sptr #comfunc global IDirectXVideoDecoder_EndFrame 8 sptr #comfunc global IDirectXVideoDecoder_Execute 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。