IAMStreamControl
COM公式ドキュメント
IAMStreamControl インターフェイスは、フィルター上の個々のストリームを制御します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
StartAt メソッドは、データの配信をいつ開始するかをピンに通知します。
| ptStart | LONGLONG* | inoptional | ピンがデータの配信を開始する時刻を指定する REFERENCE_TIME 値へのポインター。値が MAXLONGLONG (0x7FFFFFFFFFFFFFFF) の場合、このメソッドは直前の開始要求をキャンセルします。psStart が NULL の場合、ピンはグラフの実行時にただちに開始します。 プレビュー ピンは配信するサンプルにタイム スタンプを付けないため、プレビュー ピンで有効な値は NULL と MAXLONGLONG のみです。 |
| dwCookie | DWORD | in | 開始通知とともに送信する値を指定します。「解説」を参照してください。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合は、失敗の原因を示す HRESULT 値を返します。
解説(Remarks)
既定では、ピンはフィルター グラフが実行されるとすぐにデータを配信します。StartAt メソッドを使用すると、ピンはグラフの実行後、指定した時刻になるまで待機してからデータの配信を開始します。
dwCookie パラメーターが 0 以外の場合、ピンはデータの配信を開始するときに EC_STREAM_CONTROL_STARTED イベントを送信します。第 1 のイベント パラメーターはピンの IPin インターフェイスへのポインターであり、第 2 のパラメーターは dwCookie の値です。
このメソッドは、次の特殊なケースを実装します。
- ptStart が NULL の場合、ピンはグラフの実行時にすぐに開始します。イベントは送信されず、dwCookie の値は無視されます。
- ptStart に MAXLONGLONG の値が含まれ、保留中の停止要求がある場合、ピンはグラフの実行時に開始します。保留中の停止要求がない場合、ピンは停止したままになります。いずれの場合も、開始イベントは送信されず、dwCookie の値は無視されます。
- 開始時刻がサンプルの開始時刻と停止時刻の間にある場合、ピンはそのサンプルを配信します。
- 開始時刻が停止時刻と等しい場合、ピンは 1 つのサンプルを配信します。
StopAt メソッドは、データの配信をいつ停止するかをピンに通知します。
| ptStop | LONGLONG* | inoptional | ピンがデータの配信を停止する時刻を指定する REFERENCE_TIME 値へのポインター。値が MAXLONGLONG (0x7FFFFFFFFFFFFFFF) の場合、このメソッドは直前の停止要求をキャンセルします。psStop が NULL の場合、ピンはただちに停止します。 プレビュー ピンは配信するサンプルにタイム スタンプを付けないため、プレビュー ピンで有効な値は NULL と MAXLONGLONG のみです。 |
| bSendExtra | BOOL | in | 予定された停止時刻の後に追加のサンプルを送信するかどうかを示すブール値を指定します。TRUE の場合、ピンは 1 つの追加サンプルを送信します。 |
| dwCookie | DWORD | in | 開始通知とともに送信する値を指定します。「解説」を参照してください。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合は、失敗の原因を示す HRESULT 値を返します。
解説(Remarks)
dwCookie パラメーターが 0 以外の場合、ピンはデータの配信を停止するときに EC_STREAM_CONTROL_STOPPED イベントを送信します。第 1 のイベント パラメーターはピンの IPin インターフェイスへのポインターであり、第 2 のパラメーターは dwCookie の値です。ptStop が NULL または MAXLONGLONG の場合、イベントは送信されず、dwCookie の値は無視されます。
ビデオ キャプチャでは、通常、このメソッドをキャプチャ フィルターの出力ピンとマルチプレクサーの入力ピンに対して呼び出します。アプリケーションは、マルチプレクサーからの停止イベントを待機する必要があります。これにより、キャプチャ フィルターが適切な数のフレームを送信すると同時に、すべてのフレームがマルチプレクサーに到達することが保証されます。また、bSendExtra パラメーターは、キャプチャ ピンに対しては TRUE に、マルチプレクサー ピンに対しては FALSE に設定します。これにより、キャプチャ フィルターは 1 つの追加フレームを送信します。マルチプレクサーはキャプチャ ピンからのタイム スタンプに依存するため、追加フレームが送信されないと、マルチプレクサーは停止時刻を無期限に待機します。マルチプレクサーは追加フレームを受信すると、それを破棄します。
このメソッドは、次の境界条件を処理します。
- 停止時刻がサンプルの開始時刻と停止時刻の間にある場合、ピンはそのサンプルを配信します。
- 開始時刻が停止時刻と等しい場合、ピンは 1 つのサンプルを配信します。
GetInfo メソッドは、開始時刻や停止時刻を含む、現在のストリーム制御設定に関する情報を取得します。
| pInfo | AM_STREAM_INFO* | out | 現在のストリーム制御設定を受け取る、呼び出し元によって割り当てられた AM_STREAM_INFO 構造体へのポインター。 |
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMStreamControl "{36B73881-C2C8-11CF-8B46-00805F6CEF60}" #usecom global IAMStreamControl IID_IAMStreamControl "{}" #comfunc global IAMStreamControl_StartAt 3 var,int #comfunc global IAMStreamControl_StopAt 4 var,int,int #comfunc global IAMStreamControl_GetInfo 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IAMStreamControl "{36B73881-C2C8-11CF-8B46-00805F6CEF60}" #usecom global IAMStreamControl IID_IAMStreamControl "{}" #comfunc global IAMStreamControl_StartAt 3 sptr,int #comfunc global IAMStreamControl_StopAt 4 sptr,int,int #comfunc global IAMStreamControl_GetInfo 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。