IDirectXVideoProcessorService
COM公式ドキュメント
DirectX Video Acceleration (DXVA) のビデオ処理サービスへのアクセスを提供します。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ソフトウェアビデオ処理デバイスを登録します。
| pCallbacks | void* | in | 初期化関数へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
グラフィックスハードウェアがサポートするビデオプロセッサーを識別する GUID の配列を取得します。
| pVideoDesc | DXVA2_VideoDesc* | in | ビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。 |
| pCount | DWORD* | out | GUID の数を受け取ります。 |
| pGuids | GUID** | out | GUID の配列を受け取ります。配列のサイズは pCount パラメーターで取得されます。このメソッドが配列用のメモリを割り当てます。呼び出し元は CoTaskMemFree を呼び出してメモリを解放する必要があります。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
以下のビデオプロセッサー GUID があらかじめ定義されています。
| GUID | 説明 |
|---|---|
| DXVA2_VideoProcBobDevice | Bob デインターレースデバイス。このデバイスは "bob" アルゴリズムを使用してビデオをデインターレースします。Bob アルゴリズムは、単一のフィールド内のラインを補間することで、欠落しているフィールドラインを生成します。 |
| DXVA2_VideoProcProgressiveDevice | プログレッシブビデオデバイス。このデバイスは、デインターレースアルゴリズムを必要としないプログレッシブビデオで使用できます。 |
| DXVA2_VideoProcSoftwareDevice | リファレンス (ソフトウェア) デバイス。 |
グラフィックスデバイスは、ベンダー固有の GUID を追加で定義する場合があります。ドライバーは、品質の高い順に GUID のリストを提供します。最も品質の高いモードがリストの先頭になります。各モードの機能を取得するには、IDirectXVideoProcessorService::GetVideoProcessorCaps を呼び出し、そのモードの GUID を渡します。
例
// ビデオ記述子を初期化します。
g_VideoDesc.SampleWidth = VIDEO_MAIN_WIDTH;
g_VideoDesc.SampleHeight = VIDEO_MAIN_HEIGHT;
g_VideoDesc.SampleFormat.VideoChromaSubsampling = DXVA2_VideoChromaSubsampling_MPEG2;
g_VideoDesc.SampleFormat.NominalRange = DXVA2_NominalRange_16_235;
g_VideoDesc.SampleFormat.VideoTransferMatrix = EX_COLOR_INFO[g_ExColorInfo][0];
g_VideoDesc.SampleFormat.VideoLighting = DXVA2_VideoLighting_dim;
g_VideoDesc.SampleFormat.VideoPrimaries = DXVA2_VideoPrimaries_BT709;
g_VideoDesc.SampleFormat.VideoTransferFunction = DXVA2_VideoTransFunc_709;
g_VideoDesc.SampleFormat.SampleFormat = DXVA2_SampleProgressiveFrame;
g_VideoDesc.Format = VIDEO_MAIN_FORMAT;
g_VideoDesc.InputSampleFreq.Numerator = VIDEO_FPS;
g_VideoDesc.InputSampleFreq.Denominator = 1;
g_VideoDesc.OutputFrameFreq.Numerator = VIDEO_FPS;
g_VideoDesc.OutputFrameFreq.Denominator = 1;
// ビデオプロセッサー GUID を照会します。
UINT count;
GUID* guids = NULL;
hr = g_pDXVAVPS->GetVideoProcessorDeviceGuids(&g_VideoDesc, &count, &guids);
ビデオプロセッサーデバイスがサポートするレンダーターゲット形式を取得します。このリストには RGB および YUV 形式が含まれる場合があります。
| VideoProcDeviceGuid | GUID* | in | ビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。 |
| pVideoDesc | DXVA2_VideoDesc* | in | ビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。 |
| pCount | DWORD* | out | 形式の数を受け取ります。 |
| pFormats | D3DFORMAT** | out | D3DFORMAT 値として指定された形式の配列を受け取ります。配列のサイズは pCount パラメーターで取得されます。このメソッドが配列用のメモリを割り当てます。呼び出し元は CoTaskMemFree を呼び出してメモリを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
指定したビデオプロセッサーデバイスがサポートするサブストリーム形式のリストを取得します。
| VideoProcDeviceGuid | GUID* | in | ビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。 |
| pVideoDesc | DXVA2_VideoDesc* | in | ビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。 |
| RenderTargetFormat | D3DFORMAT | in | レンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。 |
| pCount | DWORD* | out | ppFormats 配列で返される要素の数を受け取ります。 |
| pFormats | D3DFORMAT** | out | D3DFORMAT 値の配列を受け取ります。呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要があります。この配列には、RGB と YUB の両方のピクセル形式を含めることができます。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
指定したビデオプロセッサーデバイスの機能を取得します。
| VideoProcDeviceGuid | GUID* | in | ビデオプロセッサーデバイスを識別する GUID。ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。 |
| pVideoDesc | DXVA2_VideoDesc* | in | ビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。 |
| RenderTargetFormat | D3DFORMAT | in | レンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。 |
| pCaps | DXVA2_VideoProcessorCaps* | out | ビデオプロセッサーの機能を受け取る DXVA2_VideoProcessorCaps 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
ビデオプロセッサー (ProcAmp) 設定の値の範囲を取得します。
| VideoProcDeviceGuid | GUID* | in | ビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。 |
| pVideoDesc | DXVA2_VideoDesc* | in | ビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。 |
| RenderTargetFormat | D3DFORMAT | in | レンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。 |
| ProcAmpCap | DWORD | in | 照会する ProcAmp 設定。ProcAmp Settings を参照してください。 |
| pRange | DXVA2_ValueRange* | out | ProcAmpCaps で指定された設定の値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
ビデオプロセッサーデバイスがサポートするイメージフィルターの値の範囲を取得します。
| VideoProcDeviceGuid | GUID* | in | ビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。 |
| pVideoDesc | DXVA2_VideoDesc* | in | ビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。 |
| RenderTargetFormat | D3DFORMAT | in | レンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。 |
| FilterSetting | DWORD | in | 照会するフィルター設定。DXVA Image Filter Settings を参照してください。 |
| pRange | DXVA2_ValueRange* | out | FilterSetting で指定されたイメージフィルター設定の値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
ビデオプロセッサーデバイスを作成します。
| VideoProcDeviceGuid | GUID* | in | 作成するビデオプロセッサーを指定する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。 |
| pVideoDesc | DXVA2_VideoDesc* | in | ビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。 |
| RenderTargetFormat | D3DFORMAT | in | レンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。 |
| MaxNumSubStreams | DWORD | in | このデバイスで使用されるサブストリームの最大数。 |
| ppVidProcess | IDirectXVideoProcessor** | out | ビデオプロセッサーの IDirectXVideoProcessor インターフェースへのポインターを受け取ります。呼び出し元はこのインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirectXVideoProcessorService "{FC51A552-D5E7-11D9-AF55-00054E43FF02}" #usecom global IDirectXVideoProcessorService IID_IDirectXVideoProcessorService "{}" #comfunc global IDirectXVideoProcessorService_RegisterVideoProcessorSoftwareDevice 4 sptr #comfunc global IDirectXVideoProcessorService_GetVideoProcessorDeviceGuids 5 var,var,var #comfunc global IDirectXVideoProcessorService_GetVideoProcessorRenderTargets 6 var,var,var,var #comfunc global IDirectXVideoProcessorService_GetVideoProcessorSubStreamFormats 7 var,var,int,var,var #comfunc global IDirectXVideoProcessorService_GetVideoProcessorCaps 8 var,var,int,var #comfunc global IDirectXVideoProcessorService_GetProcAmpRange 9 var,var,int,int,var #comfunc global IDirectXVideoProcessorService_GetFilterPropertyRange 10 var,var,int,int,var #comfunc global IDirectXVideoProcessorService_CreateVideoProcessor 11 var,var,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirectXVideoProcessorService "{FC51A552-D5E7-11D9-AF55-00054E43FF02}" #usecom global IDirectXVideoProcessorService IID_IDirectXVideoProcessorService "{}" #comfunc global IDirectXVideoProcessorService_RegisterVideoProcessorSoftwareDevice 4 sptr #comfunc global IDirectXVideoProcessorService_GetVideoProcessorDeviceGuids 5 sptr,sptr,sptr #comfunc global IDirectXVideoProcessorService_GetVideoProcessorRenderTargets 6 sptr,sptr,sptr,sptr #comfunc global IDirectXVideoProcessorService_GetVideoProcessorSubStreamFormats 7 sptr,sptr,int,sptr,sptr #comfunc global IDirectXVideoProcessorService_GetVideoProcessorCaps 8 sptr,sptr,int,sptr #comfunc global IDirectXVideoProcessorService_GetProcAmpRange 9 sptr,sptr,int,int,sptr #comfunc global IDirectXVideoProcessorService_GetFilterPropertyRange 10 sptr,sptr,int,int,sptr #comfunc global IDirectXVideoProcessorService_CreateVideoProcessor 11 sptr,sptr,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。