Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IDirectXVideoProcessorService

IDirectXVideoProcessorService

COM
IIDfc51a552-d5e7-11d9-af55-00054e43ff02継承元IDirectXVideoAccelerationService自前メソッド開始 vtbl4

公式ドキュメント

DirectX Video Acceleration (DXVA) のビデオ処理サービスへのアクセスを提供します。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 4 HRESULT RegisterVideoProcessorSoftwareDevice(void* pCallbacks)

ソフトウェアビデオ処理デバイスを登録します。

pCallbacksvoid*in初期化関数へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 5 HRESULT GetVideoProcessorDeviceGuids(DXVA2_VideoDesc* pVideoDesc, DWORD* pCount, GUID** pGuids)

グラフィックスハードウェアがサポートするビデオプロセッサーを識別する GUID の配列を取得します。

pVideoDescDXVA2_VideoDesc*inビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。
pCountDWORD*outGUID の数を受け取ります。
pGuidsGUID**outGUID の配列を受け取ります。配列のサイズは 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);
vtbl 6 HRESULT GetVideoProcessorRenderTargets(GUID* VideoProcDeviceGuid, DXVA2_VideoDesc* pVideoDesc, DWORD* pCount, D3DFORMAT** pFormats)

ビデオプロセッサーデバイスがサポートするレンダーターゲット形式を取得します。このリストには RGB および YUV 形式が含まれる場合があります。

VideoProcDeviceGuidGUID*inビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。
pVideoDescDXVA2_VideoDesc*inビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。
pCountDWORD*out形式の数を受け取ります。
pFormatsD3DFORMAT**outD3DFORMAT 値として指定された形式の配列を受け取ります。配列のサイズは pCount パラメーターで取得されます。このメソッドが配列用のメモリを割り当てます。呼び出し元は CoTaskMemFree を呼び出してメモリを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 7 HRESULT GetVideoProcessorSubStreamFormats(GUID* VideoProcDeviceGuid, DXVA2_VideoDesc* pVideoDesc, D3DFORMAT RenderTargetFormat, DWORD* pCount, D3DFORMAT** pFormats)

指定したビデオプロセッサーデバイスがサポートするサブストリーム形式のリストを取得します。

VideoProcDeviceGuidGUID*inビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。
pVideoDescDXVA2_VideoDesc*inビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。
RenderTargetFormatD3DFORMATinレンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。
pCountDWORD*outppFormats 配列で返される要素の数を受け取ります。
pFormatsD3DFORMAT**outD3DFORMAT 値の配列を受け取ります。呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要があります。この配列には、RGB と YUB の両方のピクセル形式を含めることができます。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

vtbl 8 HRESULT GetVideoProcessorCaps(GUID* VideoProcDeviceGuid, DXVA2_VideoDesc* pVideoDesc, D3DFORMAT RenderTargetFormat, DXVA2_VideoProcessorCaps* pCaps)

指定したビデオプロセッサーデバイスの機能を取得します。

VideoProcDeviceGuidGUID*inビデオプロセッサーデバイスを識別する GUID。ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。
pVideoDescDXVA2_VideoDesc*inビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。
RenderTargetFormatD3DFORMATinレンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。
pCapsDXVA2_VideoProcessorCaps*outビデオプロセッサーの機能を受け取る DXVA2_VideoProcessorCaps 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 9 HRESULT GetProcAmpRange(GUID* VideoProcDeviceGuid, DXVA2_VideoDesc* pVideoDesc, D3DFORMAT RenderTargetFormat, DWORD ProcAmpCap, DXVA2_ValueRange* pRange)

ビデオプロセッサー (ProcAmp) 設定の値の範囲を取得します。

VideoProcDeviceGuidGUID*inビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。
pVideoDescDXVA2_VideoDesc*inビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。
RenderTargetFormatD3DFORMATinレンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。
ProcAmpCapDWORDin照会する ProcAmp 設定。ProcAmp Settings を参照してください。
pRangeDXVA2_ValueRange*outProcAmpCaps で指定された設定の値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 10 HRESULT GetFilterPropertyRange(GUID* VideoProcDeviceGuid, DXVA2_VideoDesc* pVideoDesc, D3DFORMAT RenderTargetFormat, DWORD FilterSetting, DXVA2_ValueRange* pRange)

ビデオプロセッサーデバイスがサポートするイメージフィルターの値の範囲を取得します。

VideoProcDeviceGuidGUID*inビデオプロセッサーデバイスを識別する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。
pVideoDescDXVA2_VideoDesc*inビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。
RenderTargetFormatD3DFORMATinレンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。
FilterSettingDWORDin照会するフィルター設定。DXVA Image Filter Settings を参照してください。
pRangeDXVA2_ValueRange*outFilterSetting で指定されたイメージフィルター設定の値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 11 HRESULT CreateVideoProcessor(GUID* VideoProcDeviceGuid, DXVA2_VideoDesc* pVideoDesc, D3DFORMAT RenderTargetFormat, DWORD MaxNumSubStreams, IDirectXVideoProcessor** ppVidProcess)

ビデオプロセッサーデバイスを作成します。

VideoProcDeviceGuidGUID*in作成するビデオプロセッサーを指定する GUID。 ビデオプロセッサー GUID のリストを取得するには、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を呼び出します。
pVideoDescDXVA2_VideoDesc*inビデオコンテンツを記述する DXVA2_VideoDesc 構造体へのポインター。
RenderTargetFormatD3DFORMATinレンダーターゲットサーフェスの形式。D3DFORMAT 値として指定します。詳細については、Direct3D のドキュメントを参照してください。D3DFORMAT 列挙体で定義されていない形式を指定するために、FOURCC コードを使用することもできます。Video FOURCCs を参照してください。
MaxNumSubStreamsDWORDinこのデバイスで使用されるサブストリームの最大数。
ppVidProcessIDirectXVideoProcessor**outビデオプロセッサーの IDirectXVideoProcessor インターフェースへのポインターを受け取ります。呼び出し元はこのインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。