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

IVMRDeinterlaceControl9

COM
IIDa215fb8d-13c2-4f7f-993c-003d6271a459継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

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

解説(Remarks)

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

利用可能なデインターレースモードを判別するには、次の手順を実行します。

  1. VMR-9 を作成し、ミキシングモードに設定します。
  2. VMR-9 に対して IVMRDeinterlaceControl9 インターフェイスをクエリします。
  3. インターレースビデオの形式を記述する VMRVideoDesc 構造体を設定します。
  4. IVMRDeinterlaceControl9::GetNumberOfDeinterlaceModes を呼び出して、利用可能なデインターレースモードの数を取得します。
  5. 返された各モードについて、IVMRDeinterlaceControl::GetDeinterlaceModeCaps を呼び出して、そのモードに関する情報を取得します。

メソッド 7

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

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

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

lpVideoDescriptionVMR9VideoDesc*inビデオを記述する VMR9VideoDesc 構造体へのポインター。
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 を定義する必要があります。返された各モードについて、IVMRDeinterlaceControl9::GetDeinterlaceModeCaps メソッドを呼び出して、そのモードに関する情報を取得します。

vtbl 4 HRESULT GetDeinterlaceModeCaps(GUID* lpDeinterlaceMode, VMR9VideoDesc* lpVideoDescription, VMR9DeinterlaceCaps* lpDeinterlaceCaps)

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

lpDeinterlaceModeGUID*inデインターレースモードを識別する GUID へのポインター。IVMRDeinterlaceControl9::GetNumberOfDeinterlaceModes メソッドを呼び出して、ドライバーがサポートする GUID の一覧を取得します。
lpVideoDescriptionVMR9VideoDesc*inデインターレース対象のビデオを記述する VMR9VideoDesc 構造体へのポインター。 メソッドを呼び出す前に、構造体の dwSize メンバーを設定してください。
lpDeinterlaceCapsVMR9DeinterlaceCaps*outVMR9DeinterlaceCaps 構造体へのポインター。メソッドを呼び出す前に、構造体の 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)

VMR9VideoDesc 構造体および VMR9DeinterlaceCaps 構造体の dwSize メンバーを設定しない場合、このメソッドは E_INVALIDARG を返します。

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

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

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

戻り値

HRESULT 値を返します。想定される値は次のとおりです。

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

解説(Remarks)

VMR が要求されたモードを使用できない場合があります。その場合、IVMRDeinterlaceControl9::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 が優先モードを使用できないときは、IVMRDeinterlaceControl9::SetDeinterlacePrefs メソッドで指定されているとおり、別のモードにフォールバックします。

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

vtbl 7 HRESULT GetDeinterlacePrefs(DWORD* lpdwDeinterlacePrefs)

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

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

戻り値

HRESULT 値を返します。想定される値は次のとおりです。

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

解説(Remarks)

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

vtbl 8 HRESULT SetDeinterlacePrefs(DWORD dwDeinterlacePrefs)

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

dwDeinterlacePrefsDWORDinVMR9DeinterlacePrefs 列挙型のメンバーを指定します。

戻り値

HRESULT 値を返します。想定される値は次のとおりです。

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

解説(Remarks)

既定では、優先するデインターレースモードはドライバーが報告した最初のモードです。アプリケーションは、IVMRDeinterlaceControl9::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_IVMRDeinterlaceControl9 "{A215FB8D-13C2-4F7F-993C-003D6271A459}"
#usecom global IVMRDeinterlaceControl9 IID_IVMRDeinterlaceControl9 "{}"
#comfunc global IVMRDeinterlaceControl9_GetNumberOfDeinterlaceModes  3 var,var,var
#comfunc global IVMRDeinterlaceControl9_GetDeinterlaceModeCaps       4 var,var,var
#comfunc global IVMRDeinterlaceControl9_GetDeinterlaceMode           5 int,var
#comfunc global IVMRDeinterlaceControl9_SetDeinterlaceMode           6 int,var
#comfunc global IVMRDeinterlaceControl9_GetDeinterlacePrefs          7 var
#comfunc global IVMRDeinterlaceControl9_SetDeinterlacePrefs          8 int
#comfunc global IVMRDeinterlaceControl9_GetActualDeinterlaceMode     9 int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。