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

IVMRDeinterlaceControl

COM
IIDbb057577-0db8-4e6a-87a7-1a8c9a505a0f継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVMRDeinterlaceControl インターフェイスは、Video Mixing Renderer Filter 7 (VMR-7) を使用した高度なハードウェアアクセラレーションによるデインターレース処理のサポートを提供します。

解説(Remarks)

このインターフェイスは、VMR がミキサーモードの場合にのみ有効です。VMR がミキサーモードでない場合、このインターフェイスのすべてのメソッドは VFW_E_VMR_NOT_IN_MIXER_MODE を返します。

デインターレースモードは GUID によって識別されます。グラフィックスデバイスドライバーは、サポートするモードの GUID の配列を返します。この配列は品質順に、最高品質から最低品質へとソートされています。GUID のリストを取得するには、GetNumberOfDeinterlaceModes メソッドを呼び出します。特定のモードに関する詳細情報を取得するには、その GUID を GetDeinterlaceModeCaps メソッドに渡します。特定のモードを使用するように VMR を構成するには、SetDeinterlaceMode メソッドを呼び出します。

メソッド 7

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

vtbl 3 HRESULT GetNumberOfDeinterlaceModes(VMRVideoDesc* lpVideoDescription, DWORD* lpdwNumDeinterlaceModes, GUID* lpDeinterlaceModes)

GetNumberOfDeinterlaceModes メソッドは、指定したビデオ形式に対して VMR が使用できるデインターレースモードを取得します。

lpVideoDescriptionVMRVideoDesc*inビデオを記述する VMRVideoDesc 構造体へのポインター。
lpdwNumDeinterlaceModesDWORD*inoutDWORD 値へのポインター。入力時、この値は lpDeinterlaceModes で渡す配列のサイズを指定します。出力時には、メソッドが配列にコピーした GUID の数を受け取ります。
lpDeinterlaceModesGUID*out呼び出し元が割り当てた配列のアドレス。メソッドはこの配列を GUID 値で埋めます。必要な配列のサイズを判別するには、このパラメーターを NULL に設定し、lpdwNumDeinterlaceModes で返される値を確認します。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
E_POINTER
引数が NULL ポインターです。
S_OK
成功
VFW_E_VMR_NOT_IN_MIXER_MODE
VMR がミキサーモードではありません。
VFW_E_DDRAW_CAPS_NOT_SUITABLE
ビデオカードがハードウェアデインターレースをサポートしていません。

解説(Remarks)

このメソッドは GUID の配列を返します。各 GUID は、グラフィックスデバイスドライバーによってハードウェアでサポートされるデインターレースモードを表します。配列は品質順にソートされており、最初のエントリが最高品質を、2 番目のエントリが次に高い品質を、というように表します。

すべてのドライバーは、次のモードをサポートすることが必須です。

GUID 説明
DXVA_DeinterlaceBobDevice Bob モード

ドライバーは追加のモードをサポートでき、それらを識別するために独自の GUID を定義する必要があります。返された各モードについて、そのモードに関する情報を取得するには IVMRDeinterlaceControl::GetDeinterlaceModeCaps メソッドを呼び出します。

vtbl 4 HRESULT GetDeinterlaceModeCaps(GUID* lpDeinterlaceMode, VMRVideoDesc* lpVideoDescription, VMRDeinterlaceCaps* lpDeinterlaceCaps)

GetDeinterlaceModeCaps メソッドは、グラフィックスデバイスドライバーがサポートする特定のデインターレースモードの機能を取得します。

lpDeinterlaceModeGUID*inデインターレースモードを識別する GUID へのポインター。ドライバーがサポートする GUID のリストを取得するには、GetNumberOfDeinterlaceModes メソッドを呼び出します。
lpVideoDescriptionVMRVideoDesc*inデインターレース処理するビデオを記述する VMRVideoDesc 構造体へのポインター。メソッドを呼び出す前に、構造体の dwSize メンバーを設定してください。
lpDeinterlaceCapsVMRDeinterlaceCaps*inoutVMRDeinterlaceCaps 構造体へのポインター。メソッドを呼び出す前に、構造体の dwSize メンバーを設定してください。メソッドは、指定したデインターレースモードに関する情報でこの構造体を埋めます。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
E_POINTER
引数が NULL ポインターです。
S_OK
成功。
E_INVALIDARG
引数が無効です。
VFW_E_DDRAW_CAPS_NOT_SUITABLE
ビデオカードがハードウェアデインターレースをサポートしていません。
VFW_E_VMR_NO_DEINTERLACE_HW
ビデオカードがハードウェアデインターレースをサポートしていません。
VFW_E_VMR_NOT_IN_MIXER_MODE
VMR がミキサーモードではありません。

解説(Remarks)

このメソッドは VMRVideoDesc 構造体と VMRDeinterlaceCaps 構造体を返します。

vtbl 5 HRESULT GetDeinterlaceMode(DWORD dwStreamID, GUID* lpDeinterlaceMode)

GetDeinterlaceMode メソッドは、指定したビデオストリームのデインターレースモードを取得します。

dwStreamIDDWORDin確認するビデオストリームのインデックス。
lpDeinterlaceModeGUID*outGUID を受け取る変数へのポインター。この GUID は現在使用中のデインターレースモードを識別します。デインターレースモードが設定されていない場合、値は GUID_NULL になります。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
E_INVALIDARG
ストリーム番号が無効です。
E_POINTER
引数が NULL ポインターです。
S_FALSE
デインターレースモードが設定されていません。
S_OK
成功。
VFW_E_VMR_NOT_IN_MIXER_MODE
VMR がミキサーモードではありません。

解説(Remarks)

VMR が要求されたモードを使用できない場合があります。その場合、VMR は IVMRDeinterlaceControl::SetDeinterlacePrefs メソッドで指定された別のデインターレースモードにフォールバックします。

vtbl 6 HRESULT SetDeinterlaceMode(DWORD dwStreamID, GUID* lpDeinterlaceMode)

SetDeinterlaceMode メソッドは、指定したビデオストリームのデインターレースモードを設定します。

dwStreamIDDWORDin設定するビデオストリームのインデックス。すべてのストリームを設定するには、値 0xFFFFFFFF を使用します。
lpDeinterlaceModeGUID*inデインターレースモードを指定する GUID へのポインター。デインターレースをオフにするには、値 GUID_NULL を使用します。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
E_INVALIDARG
ストリーム番号が無効です。
E_POINTER
引数が NULL ポインターです。
S_OK
成功。
VFW_E_VMR_NOT_IN_MIXER_MODE
VMR がミキサーモードではありません。

解説(Remarks)

アプリケーションがモードを指定しない場合、VMR はドライバーが報告する最初のモードを既定として使用します。いずれの場合も、VMR が優先モードを使用できないときは、IVMRDeinterlaceControl::SetDeinterlacePrefs メソッドで指定された別のモードにフォールバックします。

SetDeinterlaceMode メソッドは、VMR への新しい接続に対してのみ有効です。一部のデインターレースモードでは追加の参照サンプルが必要であり、その正確な数はモードによって異なります。VMR はこれらの追加サンプル用のサーフェスを割り当てます。クライアントは、サーフェスが割り当てられる前にデインターレースモードを設定する必要があります。サーフェスの割り当ては、次のいずれかの後に発生します。

vtbl 7 HRESULT GetDeinterlacePrefs(DWORD* lpdwDeinterlacePrefs)

GetDeinterlacePrefs メソッドは、優先デインターレースモードを使用できない場合に VMR がどのようにデインターレースモードを選択するかを照会します。

lpdwDeinterlacePrefsDWORD*outVMRDeinterlacePrefs 列挙型のメンバーを受け取る変数へのポインター。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
E_POINTER
引数が NULL ポインターです。
S_OK
成功。
VFW_E_VMR_NOT_IN_MIXER_MODE
VMR がミキサーモードではありません。

解説(Remarks)

既定では、優先デインターレースモードはドライバーが報告する最初のモードです。アプリケーションは、IVMRDeinterlaceControl::SetDeinterlaceMode メソッドを呼び出して優先モードを設定できます。VMR が優先モードを使用できない場合は、dwDeinterlacePrefs パラメーターで指定された別のモードにフォールバックします。

vtbl 8 HRESULT SetDeinterlacePrefs(DWORD dwDeinterlacePrefs)

SetDeinterlacePrefs メソッドは、優先デインターレースモードを使用できない場合に VMR がどのようにデインターレースモードを選択するかを指定します。

dwDeinterlacePrefsDWORDinVMRDeinterlacePrefs 列挙型のメンバー。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
E_INVALIDARG
引数が無効です。
S_OK
成功。
VFW_E_VMR_NOT_IN_MIXER_MODE
VMR がミキサーモードではありません。

解説(Remarks)

既定では、優先デインターレースモードはドライバーが報告する最初のモードです。アプリケーションは、IVMRDeinterlaceControl::SetDeinterlaceMode メソッドを呼び出して優先モードを設定できます。VMR が優先モードを使用できない場合は、dwDeinterlacePrefs パラメーターで指定された別のモードにフォールバックします。

vtbl 9 HRESULT GetActualDeinterlaceMode(DWORD dwStreamID, GUID* lpDeinterlaceMode)

GetActualDeinterlaceMode メソッドは、指定したストリームに対して VMR が使用しているデインターレースモードを返します。

dwStreamIDDWORDinビデオストリームのインデックス。
lpDeinterlaceModeGUID*outデインターレースモードを識別する GUID 値を受け取る変数へのポインター。VMR がデインターレースハードウェアを初期化していない場合、または VMR がこのストリームをデインターレースすべきでないと判断した場合、メソッドは GUID_NULL を返します。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
E_INVALIDARG
ストリーム番号が無効です。
E_POINTER
引数が NULL ポインターです。
S_OK
成功。
VFW_E_VMR_NOT_IN_MIXER_MODE
VMR がミキサーモードではありません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVMRDeinterlaceControl "{BB057577-0DB8-4E6A-87A7-1A8C9A505A0F}"
#usecom global IVMRDeinterlaceControl IID_IVMRDeinterlaceControl "{}"
#comfunc global IVMRDeinterlaceControl_GetNumberOfDeinterlaceModes  3 var,var,var
#comfunc global IVMRDeinterlaceControl_GetDeinterlaceModeCaps       4 var,var,var
#comfunc global IVMRDeinterlaceControl_GetDeinterlaceMode           5 int,var
#comfunc global IVMRDeinterlaceControl_SetDeinterlaceMode           6 int,var
#comfunc global IVMRDeinterlaceControl_GetDeinterlacePrefs          7 var
#comfunc global IVMRDeinterlaceControl_SetDeinterlacePrefs          8 int
#comfunc global IVMRDeinterlaceControl_GetActualDeinterlaceMode     9 int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。