IDirectXVideoProcessor
COM公式ドキュメント
DirectX Video Acceleration (DXVA) のビデオプロセッサデバイスを表します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このビデオプロセッサデバイスを作成した DirectX Video Acceleration (DXVA) ビデオプロセッササービスを取得します。
| ppService | IDirectXVideoProcessorService** | out | IDirectXVideoProcessorService インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
このデバイスの作成に使用されたパラメーターを取得します。(IDirectXVideoProcessor.GetCreationParameters)
| pDeviceGuid | GUID* | outoptional | デバイス GUID を受け取ります。このパラメーターは NULL にできます。 |
| pVideoDesc | DXVA2_VideoDesc* | outoptional | 呼び出し元が割り当てた DXVA2_VideoDesc 構造体へのポインター。メソッドはこの構造体にビデオ形式の記述を格納します。このパラメーターは NULL にできます。 |
| pRenderTargetFormat | D3DFORMAT* | outoptional | レンダーターゲット形式を D3DFORMAT 値として受け取ります。詳細については Direct3D のドキュメントを参照してください。このパラメーターは NULL にできます。 |
| pMaxNumSubStreams | DWORD* | outoptional | デバイスがサポートするストリームの最大数を受け取ります。このパラメーターは NULL にできます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 引数が無効です。少なくとも 1 つのパラメーターが非 NULL でなければなりません。 |
解説(Remarks)
結果が不要な場合は、任意のパラメーターを NULL に設定できます。少なくとも 1 つのパラメーターは非 NULL でなければなりません。
ビデオプロセッサデバイスの機能を取得します。
| pCaps | DXVA2_VideoProcessorCaps* | out | ビデオプロセッサの機能を受け取る DXVA2_VideoProcessorCaps 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
このビデオプロセッサデバイス上のビデオプロセッサ (ProcAmp) 設定の値の範囲を取得します。
| ProcAmpCap | DWORD | in | クエリする ProcAmp 設定。ProcAmp Settings を参照してください。 |
| pRange | DXVA2_ValueRange* | out | ProcAmpCaps で指定された設定の値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
このデバイスがサポートするイメージフィルターの値の範囲を取得します。
| FilterSetting | DWORD | in | クエリするフィルター設定。詳細については DXVA Image Filter Settings を参照してください。 |
| pRange | DXVA2_ValueRange* | out | FilterSetting で指定された設定の値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
1 つ以上の入力サンプルに対してビデオ処理操作を実行し、その結果を Direct3D9 サーフェスに書き込みます。
| pRenderTarget | IDirect3DSurface9* | in | Direct3D サーフェスの IDirect3DSurface9 インターフェイスへのポインター。ビデオ処理操作の出力はこのサーフェスに書き込まれます。サーフェスは以下のいずれかの種類にできます。
|
| pBltParams | DXVA2_VideoProcessBltParams* | in | 実行するビデオ処理操作を記述する DXVA2_VideoProcessBltParams 構造体へのポインター。 |
| pSamples | DXVA2_VideoSample* | in | 入力サンプルを含む DXVA2_VideoSample 構造体の配列へのポインター。配列には少なくとも 1 つの要素が必要です。 入力サンプルの最大数は、ヘッダーファイル dxva2api.h で定義されている定数 MAX_DEINTERLACE_SURFACES によって決まります。 |
| NumSamples | DWORD | in | pSamples 配列内の要素数。 |
| pHandleComplete | HANDLE* | inoutoptional | 予約済み。NULL に設定してください。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
ドライバーの内部エラーです。 |
| 引数が無効です。 |
解説(Remarks)
このメソッドが返った時点で、操作が完了していない場合があります。
このメソッドが E_INVALIDARG を返した場合は、以下を確認してください。
- 入力サンプルの数 (NumSamples) は MAX_DEINTERLACE_SURFACES 以下でなければなりません。
- Direct3D サーフェスは VideoProcessBlt の有効なターゲットでなければなりません。詳細については pRT パラメーターの説明を参照してください。
- pBltParams で指定されるプレゼンテーション時刻 (TargetFrame) は、プライマリストリームの現在のピクチャの開始時刻および終了時刻と一致していなければなりません。具体的には、終了時刻より小さく、かつ開始時刻以上でなければなりません。pSamples 配列に後方参照ピクチャが含まれている場合、pSamples 内の最初のサンプルが現在のピクチャであるとは限らないことに注意してください。詳細については Input Sample Order を参照してください。
- pBltParams で指定されるターゲット矩形 (TargetRect) は、出力先サーフェス (pRT) より大きくすることはできません。
- pBltParams で指定される縮約サイズ (ConstrictionSize) は、ゼロ未満、またはターゲット矩形より大きくすることはできません。
- 背景色のアルファ成分は不透明でなければなりません。
- pBltParams で指定される ProcAmp 値は有効でなければなりません。ドライバーがサポートする ProcAmp 設定については、これらの値は IDirectXVideoProcessor::GetProcAmpRange メソッドが返す範囲内になければなりません。
- pBltParams で指定されるノイズフィルターおよびディテールフィルターは有効でなければなりません。ドライバーがサポートするフィルターについては、これらの値は IDirectXVideoProcessor::GetFilterPropertyRange メソッドが返す範囲内になければなりません。
- pBltParams で指定されるアルファ値は [0...1] の範囲内 (両端を含む) でなければなりません。
- pSamples で指定される各入力サンプルについて:
- 開始時刻は終了時刻より大きくすることはできません。
- 有効な IDirect3DSurface9 ポインターを指定しなければなりません。
- ソース矩形は入力サーフェスより大きくすることはできません。
- 出力先矩形は出力先サーフェスより大きくすることはできません。
- プレーナーアルファは [0...1] の範囲内 (両端を含む) でなければなりません。
- すべての矩形 (ソース、出力先、ターゲット) について、矩形を反転させる (left > right または top > bottom) ことや、負の値を持つことはできません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirectXVideoProcessor "{8C3A39F0-916E-4690-804F-4C8001355D25}" #usecom global IDirectXVideoProcessor IID_IDirectXVideoProcessor "{}" #comfunc global IDirectXVideoProcessor_GetVideoProcessorService 3 sptr #comfunc global IDirectXVideoProcessor_GetCreationParameters 4 var,var,var,var #comfunc global IDirectXVideoProcessor_GetVideoProcessorCaps 5 var #comfunc global IDirectXVideoProcessor_GetProcAmpRange 6 int,var #comfunc global IDirectXVideoProcessor_GetFilterPropertyRange 7 int,var #comfunc global IDirectXVideoProcessor_VideoProcessBlt 8 sptr,var,var,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirectXVideoProcessor "{8C3A39F0-916E-4690-804F-4C8001355D25}" #usecom global IDirectXVideoProcessor IID_IDirectXVideoProcessor "{}" #comfunc global IDirectXVideoProcessor_GetVideoProcessorService 3 sptr #comfunc global IDirectXVideoProcessor_GetCreationParameters 4 sptr,sptr,sptr,sptr #comfunc global IDirectXVideoProcessor_GetVideoProcessorCaps 5 sptr #comfunc global IDirectXVideoProcessor_GetProcAmpRange 6 int,sptr #comfunc global IDirectXVideoProcessor_GetFilterPropertyRange 7 int,sptr #comfunc global IDirectXVideoProcessor_VideoProcessBlt 8 sptr,sptr,sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。