IMFVideoProcessor
COM公式ドキュメント
Enhanced Video Renderer (EVR) におけるビデオ処理を制御します。
解説(Remarks)
このインターフェイスは、グラフィックスドライバーが実装する機能へのアクセスを提供します。ドライバーは 1 つ以上のビデオプロセッサ モードを提供し、それぞれは GUID によって識別されます。各モードは独自の機能セットを持ちます。利用可能なモードの一覧は、ビデオのメディアタイプに応じて変化する場合があります。
このインターフェイスを使用するには、次の手順を実行します。
- EVR 入力ストリームのメディアタイプを初期化します。(Media Session を使用している場合、これはトポロジが解決された後に行われます。Media Session が MF_TOPOSTATUS_READY のステータス値を持つ MESessionTopologyStatus イベントを送信するまで待機してください。)
- IMFVideoProcessor::GetAvailableVideoProcessorModes を呼び出して、利用可能なビデオプロセッサモードの一覧を取得します。
- IMFVideoProcessor::GetVideoProcessorCaps を呼び出して、各ビデオプロセッサモードの機能を調べます。
- IMFVideoProcessor::SetVideoProcessorMode を呼び出してモードを選択します。この手順を省略した場合、ストリーミング開始時に EVR が自動的にビデオプロセッサモードを選択します。その場合は、手順 5 に進む前に再生が開始されるまで待機してください。
- IMFVideoProcessor::GetProcAmpRange および IMFVideoProcessor::GetFilteringRange を呼び出して、各種の ProcAmp 設定および画像フィルター設定の値の範囲を調べます。
- IMFVideoProcessor::SetProcAmpValues および IMFVideoProcessor::SetFilteringValue を呼び出して、ProcAmp 設定および画像フィルター設定を変更します。
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ビデオドライバーがサポートするビデオプロセッサモードを取得します。
| lpdwNumProcessingModes | DWORD* | inout | ビデオプロセッサモードの数を受け取ります。 |
| ppVideoProcessingModes | GUID** | out | GUID の配列へのポインターを受け取ります。配列の要素数は lpdwNumProcessingModes パラメーターに返されます。呼び出し側は、CoTaskMemFree を呼び出して配列のメモリを解放する必要があります。このパラメーターは NULL にできます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
ビデオプロセッサモードは GUID によって識別されます。定義済み GUID の一覧については、IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids を参照してください。ドライバーは、ベンダー固有の GUID を追加で定義できます。各モードの機能を取得するには、GUID を IMFVideoProcessor::GetVideoProcessorCaps メソッドに渡します。
このメソッドを呼び出す前に、参照ストリームのメディアタイプを設定する必要があります。利用可能なモードは、参照ストリームのメディアタイプに依存する場合があります。
ビデオプロセッサモードの機能を取得します。
| lpVideoProcessorMode | GUID* | in | ビデオプロセッサモードを識別する GUID へのポインター。利用可能なモードの一覧を取得するには、IMFVideoProcessor::GetAvailableVideoProcessorModes を呼び出します。 |
| lpVideoProcessorCaps | DXVA2_VideoProcessorCaps* | out | 機能を受け取る DXVA2_VideoProcessorCaps 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドを呼び出す前に、参照ストリームのメディアタイプを設定する必要があります。
アプリケーションが優先するビデオプロセッサモードを取得します。優先モードを設定するには、IMFVideoProcessor::SetVideoProcessorMode を呼び出します。
| lpMode | GUID* | out | 優先するビデオプロセッサモードを識別する GUID を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 参照ストリームのメディアタイプが設定されていません。 | |
| アプリケーションが優先するビデオプロセッサモードを指定していません。 |
優先するビデオプロセッサモードを設定します。EVR は、再生開始時にこのモードの使用を試みます。
| lpMode | GUID* | in | ビデオプロセッサモードを識別する GUID へのポインター。利用可能なモードの一覧を取得するには、IMFVideoProcessor::GetAvailableVideoProcessorModes を呼び出します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
要求されたモードは無効です。 |
| ミキサーは既に Direct3D リソースを割り当てており、モードを変更できません。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドを呼び出す前に、次のように参照ストリームのメディアタイプを設定してください。
- DirectShow EVR フィルター: ピン 0 を接続します。
- EVR メディアシンク: ストリーム 0 のメディアタイプを設定します。
- ミキサー (スタンドアロン): 入力ストリーム 0 のメディアタイプを設定し、出力ストリームのメディアタイプを設定します。
このメソッドは、ビデオ再生が開始される前に呼び出してください。
色調整 (ProcAmp) 設定の値の範囲を取得します。
| dwProperty | DWORD | in | 照会する ProcAmp 設定。取り得る値の一覧については、ProcAmp Settings を参照してください。 |
| pPropRange | DXVA2_ValueRange* | out | 指定した ProcAmp 設定の値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwProperty の値が無効です。 | |
| ビデオプロセッサモードが設定されていません。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドは、現在のビデオプロセッサモードが指定した ProcAmp 設定に対してサポートする値の範囲を返します。
ミキサーにビデオプロセッサモードが設定されていない場合、このメソッドは失敗します。ビデオプロセッサモードを選択するには、IMFVideoProcessor::SetVideoProcessorMode を呼び出します。設定しない場合、ストリーミング開始時に EVR が自動的にモードを選択します。
ドライバーがサポートする ProcAmp 設定を調べるには、IMFVideoProcessor::GetVideoProcessorCaps を呼び出します。
1 つ以上の色調整 (ProcAmp) 設定の現在の設定を取得します。
| dwFlags | DWORD | in | 照会する操作を指定する、1 つ以上のフラグのビットごとの OR。フラグの一覧については、ProcAmp Settings を参照してください。 |
| Values | DXVA2_ProcAmpValues* | out | DXVA2_ProcAmpValues 構造体へのポインター。メソッドは、dwFlags で指定された各操作の現在の値でこの構造体を埋めます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドを呼び出す前に、参照ストリームのメディアタイプを設定する必要があります。
ミキサーのビデオプロセッサモードが設定されるまで、返される値はすべて 0 になります。プロセッサモードが設定された後は、返される値は現在のモードを反映します。ビデオプロセッサモードを選択するには、IMFVideoProcessor::SetVideoProcessorMode を呼び出します。設定しない場合、ストリーミング開始時に EVR が自動的にモードを選択します。
ドライバーがサポートする ProcAmp 設定を調べるには、IMFVideoProcessor::GetVideoProcessorCaps を呼び出します。
1 つ以上の色調整 (ProcAmp) 設定を設定します。
| dwFlags | DWORD | in | 設定する ProcAmp 値を指定する、1 つ以上のフラグのビットごとの OR。フラグの一覧については、ProcAmp Settings を参照してください。 |
| pValues | DXVA2_ProcAmpValues* | in | DXVA2_ProcAmpValues 構造体へのポインター。dwFlags で設定した各フラグについて、対応する構造体メンバーに目的の値を設定します。各操作の有効な値の範囲を取得するには、IMFVideoProcessor::GetProcAmpRange を呼び出します。dwFlags に対応するフラグが設定されていない構造体メンバーは、メソッドによって無視されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwFlags パラメーターが無効であるか、pValues 内の 1 つ以上の値が正しい範囲内にありません。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドを呼び出す前に、ビデオプロセッサモードを設定してください。ビデオプロセッサモードを選択するには、IMFVideoProcessor::SetVideoProcessorMode を呼び出します。設定しない場合、ストリーミング開始時に EVR が自動的にモードを選択します。
ドライバーがサポートする ProcAmp 設定を調べるには、IMFVideoProcessor::GetVideoProcessorCaps を呼び出します。
指定した画像フィルター設定の値の範囲を取得します。
| dwProperty | DWORD | in | 照会する画像フィルタリングパラメーター。取り得る値の一覧については、DXVA Image Filter Settings を参照してください。 |
| pPropRange | DXVA2_ValueRange* | out | 指定した画像フィルタリングパラメーターの値の範囲を受け取る DXVA2_ValueRange 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
ドライバーはこのフィルター設定をサポートしていません。 |
| dwProperty の値が無効です。 | |
| ビデオプロセッサモードが設定されていません。 | |
| 指定した操作は利用できません。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドは、現在のビデオプロセッサモードが指定した画像フィルター設定に対してサポートする値の範囲を返します。
ミキサーにビデオプロセッサモードが設定されていない場合、このメソッドは失敗します。ビデオプロセッサモードを選択するには、IMFVideoProcessor::SetVideoProcessorMode を呼び出します。設定しない場合、ストリーミング開始時に EVR が自動的にモードを選択します。
ドライバーがサポートする画像フィルターを調べるには、IMFVideoProcessor::GetVideoProcessorCaps を呼び出します。
画像フィルターの現在の設定を取得します。
| dwProperty | DWORD | in | 照会するフィルター設定。取り得る値の一覧については、DXVA Image Filter Settings を参照してください。 |
| pValue | DXVA2_Fixed32* | out | 現在の値を受け取る DXVA2_Fixed32 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwProperty の値が無効です。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドを呼び出す前に、参照ストリームのメディアタイプを設定する必要があります。
ミキサーのビデオプロセッサモードが設定されるまで、返される値はすべて 0 になります。プロセッサモードが設定された後は、返される値は現在のモードを反映します。ビデオプロセッサモードを選択するには、IMFVideoProcessor::SetVideoProcessorMode を呼び出します。設定しない場合、ストリーミング開始時に EVR が自動的にモードを選択します。
ドライバーがサポートする画像フィルターを調べるには、IMFVideoProcessor::GetVideoProcessorCaps を呼び出します。
画像フィルターのパラメーターを設定します。
| dwProperty | DWORD | in | 設定する画像フィルタリングパラメーター。取り得る値の一覧については、DXVA Image Filter Settings を参照してください。 |
| pValue | DXVA2_Fixed32* | in | 新しい値を指定する DXVA2_Fixed32 構造体へのポインター。各パラメーターの有効な値の範囲を取得するには、IMFVideoProcessor::GetFilteringRange を呼び出します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwProperty の値が無効です。 | |
| 参照ストリームのメディアタイプが設定されていません。 |
解説(Remarks)
このメソッドを呼び出す前に、ビデオプロセッサモードを設定してください。ビデオプロセッサモードを選択するには、IMFVideoProcessor::SetVideoProcessorMode を呼び出します。設定しない場合、ストリーミング開始時に EVR が自動的にモードを選択します。
ドライバーがサポートする画像フィルターを調べるには、IMFVideoProcessor::GetVideoProcessorCaps を呼び出します。
合成矩形の背景色を取得します。背景色は、ビデオ画像のレターボックス表示に使用されます。
| lpClrBkg | COLORREF* | out | 背景色を受け取る COLORREF 値へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
合成矩形の背景色を設定します。背景色は、ビデオ画像のレターボックス表示に使用されます。
| ClrBkg | COLORREF | in | 背景色。COLORREF 値として指定します。この値を作成するには、RGB マクロを使用します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFVideoProcessor "{6AB0000C-FECE-4D1F-A2AC-A9573530656E}" #usecom global IMFVideoProcessor IID_IMFVideoProcessor "{}" #comfunc global IMFVideoProcessor_GetAvailableVideoProcessorModes 3 var,var #comfunc global IMFVideoProcessor_GetVideoProcessorCaps 4 var,var #comfunc global IMFVideoProcessor_GetVideoProcessorMode 5 var #comfunc global IMFVideoProcessor_SetVideoProcessorMode 6 var #comfunc global IMFVideoProcessor_GetProcAmpRange 7 int,var #comfunc global IMFVideoProcessor_GetProcAmpValues 8 int,var #comfunc global IMFVideoProcessor_SetProcAmpValues 9 int,var #comfunc global IMFVideoProcessor_GetFilteringRange 10 int,var #comfunc global IMFVideoProcessor_GetFilteringValue 11 int,var #comfunc global IMFVideoProcessor_SetFilteringValue 12 int,var #comfunc global IMFVideoProcessor_GetBackgroundColor 13 var #comfunc global IMFVideoProcessor_SetBackgroundColor 14 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFVideoProcessor "{6AB0000C-FECE-4D1F-A2AC-A9573530656E}" #usecom global IMFVideoProcessor IID_IMFVideoProcessor "{}" #comfunc global IMFVideoProcessor_GetAvailableVideoProcessorModes 3 sptr,sptr #comfunc global IMFVideoProcessor_GetVideoProcessorCaps 4 sptr,sptr #comfunc global IMFVideoProcessor_GetVideoProcessorMode 5 sptr #comfunc global IMFVideoProcessor_SetVideoProcessorMode 6 sptr #comfunc global IMFVideoProcessor_GetProcAmpRange 7 int,sptr #comfunc global IMFVideoProcessor_GetProcAmpValues 8 int,sptr #comfunc global IMFVideoProcessor_SetProcAmpValues 9 int,sptr #comfunc global IMFVideoProcessor_GetFilteringRange 10 int,sptr #comfunc global IMFVideoProcessor_GetFilteringValue 11 int,sptr #comfunc global IMFVideoProcessor_SetFilteringValue 12 int,sptr #comfunc global IMFVideoProcessor_GetBackgroundColor 13 sptr #comfunc global IMFVideoProcessor_SetBackgroundColor 14 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。