Microsoft DirectX 8.0

IAMStreamControl インターフェイス

このインターフェイスを使用すると、フィルタ上のストリームを個別に制御できる。いくつかのフィルタ上のピンは、このインターフェイスを公開している。たとえば、AVI Mux フィルタは、その入力ピンでこのインターフェイスをサポートし、オーディオ キャプチャ フィルタと WDM ビデオ キャプチャ フィルタは、それぞれの出力ピンでこのインターフェイスをサポートする。

このインターフェイスによって、アプリケーションは、指定の時間にストリームのオンとオフを切り替えることができる。たとえば、ビデオの再生中にオーディオ ストリームをオフにして音声を消すことができる。キャプチャ アプリケーションの場合は、このインターフェイスを使用することで、キャプチャの正確な開始タイムと終了タイムを指定したり、キャプチャ ストリームとプレビュー ストリームを互いに独立して制御できる。

ピンがストリーミングを開始する基準タイムを指定するには、StartAt メソッドを呼び出す。ピンがストリーミングを終了する時間を指定するには、StopAt メソッドを呼び出す。次に、フィルタ グラフ マネージャ上で IMediaControl::Run を呼び出す。

このインターフェイスを使用する場合は、次の制限事項に注意する。

アプリケーションによっては、ICaptureGraphBuilder2::ControlStream メソッドの方が便利な場合がある。これは、このメソッドがグラフ レベルでのストリーム制御をサポートし、アプリケーションが各フィルタとピンを列挙する必要がないからである。

フィルタ開発者 : CBaseStreamControl 基底クラスは、このインターフェイスを実装する。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterface サポートされているインターフェイスへのポインタを取得する。
AddRef 参照カウントをインクリメントする。
Release 参照カウントをデクリメントする。
IAMStreamControl メソッド説明
StartAt ピンに対してストリーミング データ送信の開始タイムを指定する。
StopAt ピンに対して処理とデータ送信の終了タイムを指定する。
GetInfo 現在のストリーミング設定に関する情報を取得する。

IAMStreamControl::GetInfo

IAMStreamControl インターフェイス

開始タイムと終了タイムを含む、現在のストリーミング設定に関する情報を取得する。

構文

HRESULT GetInfo(
    AM_STREAM_INFO *pInfo
);

パラメータ

pInfo
[out] 現在のストリーム設定が含まれている AM_STREAM_INFO 構造体へのポインタ。

戻り値

メソッドが成功した場合は、S_OK を返す。それ以外の場合は、失敗の原因を示す HRESULT 値を返す。

注意

AM_STREAM_INFO 構造体の dwFlags メンバには、有効な開始タイムと終了タイムが設定されているかどうかを示すフラグと、フィルタがデータを破棄しているかどうかを示すフラグが含まれる。

IAMStreamControl::StartAt

IAMStreamControl インターフェイス

ピンに対してストリーミング データ送信の開始タイムを指定する。ストリーミングが実際に開始すると、フィルタは EC_STREAM_CONTROL_STARTED 通知コードを送信する。

構文

HRESULT StartAt(
    const REFERENCE_TIME *ptStart,
    DWORD dwCookie
);

パラメータ

ptStart
[in] ストリーミングの開始タイムへのポインタ。NULL の場合、イベント通知を送信せずに即座に開始する。MAX_TIME の場合、既存の開始要求がキャンセルされる。
dwCookie
[in] 開始時にイベント通知と共に送信される値。ptStart が MAX_TIME または NULL の場合は無視される。

戻り値

メソッドが成功した場合は、S_OK を返す。それ以外の場合は、失敗の原因を示す HRESULT 値を返す。

注意

デフォルトでストリームは有効なので、このメソッドを呼び出す必要があるのは、StopAt メソッドを呼び出した後だけである。

ピンが実際にストリーミングを開始すると、EC_STREAM_CONTROL_STARTED イベントが通知される。先頭のイベント パラメータは、ピンの IPin インターフェイスへのポインタであり、2 番目のパラメータは、dwCookie パラメータで指定される値である。これによって、アプリケーションは、イベントを各自の要求に結び付け直すことができる。

開始タイムと終了タイムが 1 つの時点に対してスケジュールされている場合、瞬間的に開始し、そして終了する。これを使用することで、1 つのフレームをキャプチャできる。

IAMStreamControl::StopAt

IAMStreamControl インターフェイス

ピンに対して処理とデータ送信の終了タイムを指定する。

構文

HRESULT StopAt(
    const REFERENCE_TIME *ptStop,
    BOOL bSendExtra,
    DWORD dwCookie
);

パラメータ

ptStop
[in] ストリーミングの終了タイムへのポインタ。NULL の場合、イベント通知を送信せずに即座に終了する。MAX_TIME の場合、既存の終了要求がキャンセルされる。
bSendExtra
[in] スケジュールされている終了タイムを過ぎてから追加サンプルを送信するかどうかを示すブール値。TRUE を指定すると、追加サンプルが送信される。
dwCookie
[in] 終了時にイベント通知と共に送信する値。ptStart が MAX_TIME または NULL の場合は無視される。

戻り値

メソッドが成功した場合は、S_OK を返す。それ以外の場合は、失敗の原因を示す HRESULT 値を返す。

注意

ピンが実際にストリーミングを終了すると、EC_STREAM_CONTROL_STOPPED イベントが通知される。先頭のイベント パラメータは、ピンの IPin インターフェイスへのポインタであり、2 番目のパラメータは、dwCookie パラメータで指定される値である。これによって、アプリケーションは、イベントを各自の要求に結び付け直すことができる。

ビデオ キャプチャの場合は、一般に、キャプチャ フィルタの出力ピンとマルチプレクサの入力ピンの両方でこのメソッドを呼び出し、マルチプレクサからの通知のみに注意を払う。これによって、キャプチャ フィルタが余分なフレームを不必要にキャプチャすることが防止され、その一方で、マルチプレクサが最後のフレームを実際にファイルに保存することが保証される。

さらに、キャプチャ ピンの bSendExtra パラメータには TRUE を指定し、マルチプレクサ ピンには FALSE を指定する必要がある。追加フレームが送信されない場合、マルチプレクサはいつまでも終了タイムを待ち、既にすべての情報をキャプチャしたことを理解しない。マルチプレクサはキャプチャ ピンが送信した追加フレームを破棄するので、これがファイルに書き込まれることはない。上のケースに示したように、別のダウンストリーム ピンでも IAMStreamControl を使用しているのでない限り、bSendExtra に TRUE を設定してはならない。

パケットの中間の時間を指定して StopAt を呼び出すと、破棄の状態に移行する前に、フィルタはパケット全体を配信する。また、開始タイムと終了タイムが 1 つの時点に対してスケジュールされている場合は、瞬間的に開始し、そして終了する。これを使用することで、1 つのフレームをキャプチャできる。