ICaptureGraphBuilder2::ControlStream
ControlStream メソッドは、キャプチャされたデータの 1 つ以上のストリームの開始タイムと終了タイムを設定する。
構文
HRESULT ControlStream(
const GUID *pCategory,
const GUID *pType,
IBaseFilter *pFilter,
REFERENCE_TIME *pstart,
REFERENCE_TIME *pstop,
WORD wStartCookie,
WORD wStopCookie
);
パラメータ
pCategory
[in] ピン カテゴリを指定する、ピン プロパティ セットの AMPROPERTY_PIN_CATEGORY 構造体のメンバへのポインタ。この引数の値には、NULL は指定できない。
pType
[in] メディア タイプを指定するメジャー タイプ GUID へのポインタ。または NULL。この引数が NULL の場合は、pFilter 引数も NULL に設定する。NULL に設定しないと、間違ったピンが制御され、予期しない結果が生じることがある。
pFilter
[in] 制御するフィルタを指定する IBaseFilter インターフェイスへのポインタ。グラフ内のすべてのキャプチャ フィルタを制御するには、この引数を NULL に設定する。
pstart
[in] 開始タイムが格納された変数へのポインタ。値が MAXLONGLONG (0x7FFFFFFFFFFFFFFF) の場合、メソッドは前の開始要求をキャンセルする。値が NULL の場合、グラフが実行するとピンは直ちに開始する。
pstop
[in] 終了タイムが格納された変数へのポインタ。値が MAXLONGLONG の場合、メソッドは前の開始要求をキャンセルする。値が NULL の場合、ピンは直ちに停止する。
wStartCookie
[in] EC_STREAM_CONTROL_STARTED イベント通知の第 2 引数として送られる値。詳細については、「注意」を参照すること。
wStopCookie
[in] EC_STREAM_CONTROL_STOPPED イベント通知の第 2 引数として送られる値。詳細については、「注意」を参照すること。
戻り値
HRESULT 値を返す。可能な値は次のとおりである。
戻りコード | 説明 |
S_FALSE | 少なくとも 1 つのダウンストリーム レンダラが終了通知を送らない。 |
S_OK | 成功。 |
E_FAIL | 適合するピンが見つからない、またはピンがストリーム コントロールをサポートしていない。 |
E_POINTER | NULL ポインタ引数。 |
注意
このメソッドは、メソッドの呼び出しで指定された検索条件を使って、キャプチャ フィルタ上の出力ピンを検索する。次に、これらのピンに対して IAMStreamControl メソッドを呼び出す。このメソッドを利用すると、アプリケーションは、グラフ内のフィルタやピンを列挙せずに、ストリームを制御できる。
このメソッドは、フレーム単位の精度が要求されるキャプチャや、個別のキャプチャ動作およびプレビュー動作の制御に使う。たとえば、ビデオのプレビューを中断せずに、ディスクへのキャプチャを停止できる。
最初の 3 つの引数は、制御するピンを指定する。キャプチャ グラフは、複数のキャプチャ フィルタを備えていることがある。たとえば、キャプチャ グラフは、ビデオ用のフィルタ、オーディオ用のフィルタ、クローズド キャプション データ用のフィルタを備えていることがある。また、キャプチャ フィルタは、複数の出力ピンを備えていることがある。一部のキャプチャ フィルタは、プレビュー用とキャプチャ用の別々のピンを備えていたり、ビデオ専用データ用とオーディオ-ビデオ インターリーブ データ用の別々のピンを備えていることがある。たとえば、ビデオ プレビューを制御するには、pCategory として PIN_CATEGORY_PREVIEW を指定し、pType として MEDIATYPE_Video を指定する。
注 : ピン カテゴリが PIN_CATEGORY_PREVIEW の場合、プレビュー ピンが送信したサンプルにはタイム スタンプが設定されていないので、特定の開始タイムや終了タイムは指定できない (「タイム スタンプ」を参照)。そのような場合は、NULL および MAXLONGLONG の値を使って、目的の時間にピンを開始または停止する。
また、デバイスがビデオ ポート ピンを使っている場合、デバイスはハードウェアを介してプレビュー サンプルを直接送信するので、プレビューではこのメソッドはサポートされていない。
ピンを制御するとき、このメソッドは IAMStreamControl::StartAt メソッドと IAMStreamControl::StopAt メソッドを呼び出す。各ピンは、開始時に EC_STREAM_CONTROL_STARTED イベント通知を送る。イベント通知の第 2 引数は、wStartCookie が示す値である。ピンは停止すると、EC_STREAM_CONTROL_STOPPED イベント通知を送る。このイベント通知の第 2 引数は、wStopCookie が示す値である。
このメソッドは、適合するピンを見つけると、ダウンストリームで、IAMStreamControl (通常はマルチプレクサ) をサポートする別のフィルタを検索する。フィルタが見つかると、このメソッドは、そのフィルタの開始タイムと終了タイムを設定する。これによって、キャプチャ フィルタ用とダウンストリーム フィルタ用の 2 つの終了通知のペアが生成される。ダウンストリーム フィルタからの終了通知のみが wStopCookie 引数を使う。このイベントを待機することにより、ダウンストリーム フィルタは最後のサンプルを受け取ることが保証される。
IAMStreamControl をサポートするダウンストリーム フィルタがない場合、メソッドは S_FALSE を返す。その場合は、最後のサンプルがレンダリングされる前に終了通知を受け取ることがある。
MAXLONGLONG は、可能な最大 REFERENCE_TIME 値である。DirectShow 基底クラス ライブラリでは、定数 MAX_TIME としても定義されている。
参照