IAMFilterGraphCallback
COM公式ドキュメント
IAMFilterGraphCallback インターフェイスは、グラフ構築中のコールバック機構を提供します。このインターフェイスを使用するには、アプリケーションまたはクライアントオブジェクトでこのインターフェイスを実装します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
UnableToRender メソッドは、指定されたピンをレンダリングするためのフィルターの組み合わせが見つからない場合に、Filter Graph Manager によって呼び出されます。
| pPin | IPin* | in | レンダリングできなかったピンの IPin インターフェイスを指定します。 |
戻り値
戻り値が S_OK の場合、Filter Graph Manager はピンのレンダリングを再試行します。S_FALSE やその他の成功コードを含む、それ以外の戻り値の場合、Filter Graph Manager は通常どおりグラフの構築を続行します。通常は、現在のフィルターを拒否し、別のフィルターの使用を試みます。
解説(Remarks)
Filter Graph Manager は、このメソッドを呼び出している間、グラフ全体のクリティカルセクションを保持します。そのため、コールバックメソッドでは、Filter Graph Manager のメソッドや、グラフの状態を変更する可能性のあるフィルターのメソッド(ピンの接続解除など)を呼び出さないようにしてください。これらを呼び出すと、デッドロックやその他の予期しない動作が発生する可能性があります。ただし、ピンに対してインターフェイスを照会したり、ピンの優先メディアタイプを確認したりすることは安全です。このメソッドの主な用途は、デコーダーなどの新しいフィルターを登録することです。
このメソッドは、__stdcall ではなく thiscall 呼び出し規約を使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMFilterGraphCallback "{56A868FD-0AD4-11CE-B0A3-0020AF0BA770}"
#usecom global IAMFilterGraphCallback IID_IAMFilterGraphCallback "{}"
#comfunc global IAMFilterGraphCallback_UnableToRender 3 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。