FrameHandlerSink

イメージストリームからのフレームを取り込む(コピーする)ためのSinkTypeです。以前のFrameGrabberSinkの代わりとなるもので、MemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionを保持し、画像データをバッファにコピーする役割を持つIFrameFilterクラスライブラリリファレンス>クラス>IFrameFilterを指定できるようになります。IFrameFilterの実装はデータのコピー中にユーザー定義の変換処理を行うことを可能にし、さらに不要なフレームを除去することもできるようになります。
いずれのフレームフィルタも登録されない場合、フレームはMemBufferCollectionにそのままコピーされます。

フレームはMemBufferCollection内のバッファに順番にコピーされていきます。最後のバッファにフレームがコピーされると、次のフレームはまた最初のバッファにコピーされ、その後同じように続きます。

FrameHandlerSinksnap modeもしくはgrab modeのどちらかで動作することが可能です。
そのモードはsetSnapModeクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::setSnapMode Methodをコールすることで切り替えが可能です。grab modeではGrabber::startLiveクラスライブラリリファレンス>クラス>Grabber>Grabber::startLive MethodがコールされるとすぐにフレームがMemBufferCollectionに継続的にコピーされていきます。Grabber::stopLiveクラスライブラリリファレンス>クラス>Grabber>Grabber::topLive Method へのコールがこのコピー処理を終了させます。
一方snap modeでは FrameHandlerSink::snapImagesクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::snapImages Method もしくは FrameHandlerSink::snapImagesAsyncクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::snapImagesAsync Method へのコールによってMemBufferCollectionに指定されたフレーム数がコピーされることになります。
FrameHandlerSink::snapImagesをコールする前にGrabber::startLiveをコールする必要があります。

インフォメーション

ヘッダファイル: tisudshl.h
ネームスペース: DShowLib
IC Imaging Control 3.0より導入

メソッド

メソッド 説明
createクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::create Method 新しいFrameHandlerSinkクラスライブラリリファレンス>クラス>FrameHandlerSinkを作成します。
getCreateDataクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getCreateData Method インスタンスを作成するための情報を保持する tCreateDataクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::tCreateData Structurev 構造体を返します。
getFrameCountクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getFrameCount Method Grabber::startLiveクラスライブラリリファレンス>クラス>Grabber>Grabber::startLive Methodへの最後のコール以降MemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionにコピーされたフレーム数を返します。
getFrameFiltersクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getFrameFilters Method 現在設定されているIFrameFilterクラスライブラリリファレンス>クラス>IFrameFilterの一覧を返します。
getLastAcqMemBufferクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getLastAcqMemBuffer Method 最後にフレームがコピーされたMemBufferを返します。シンクが再開するたびに、最初のバッファへのMemBufferCollection の開始設定をします。この関数はシンクの停止後、再開されるまで最後に取得したフレームを返します。
getMemBufferCollectionクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getMemBufferCollection Method 現在のMemBufferCollectionを返します。
getOutputFrameTypeクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getOutputFrameType Method シンクのフレームタイプを返します。これはMemBufferCollection のフレームタイプですがそれが設定されていない場合にはハンドラの出力フレームタイプとなります。
getSinkTypeクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getSinkType Method GrabberSinkType::getSinkTypeクラスライブラリリファレンス>クラス>GrabberSinkType>GrabberSinkType::getSinkType Methodの実装はeFRAMEHANDLER_SINKを返します。
getSnapModeクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getSnapMode Method FrameHandlerSinkクラスライブラリリファレンス>クラス>FrameHandlerSinkがsnap modeであるかどうかを返します。
setMemBufferCollectionクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::setMemBufferCollection Method FrameHandlerSink 用にMemBufferCollection をセットします。
setSnapModeクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::setSnapMode Method シンクの動作モードのGrabとSnapを切り替えます。grab modeではシンクに届く全てのフレームはフレームフィルタもしくはフィルタチェーンに渡され、それからMemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionへコピーされます。その後GrabberListenerクラスライブラリリファレンス>クラス>GrabberListenerのframeReadyイベントがコールされます。snap modeでは画像取り込み処理を開始させるために snapImagesクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::snapImages Method もしくは snapImagesAsyncクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::snapImagesAsync Method をコールする必要があります。
snapImagesクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::snapImages Method スナップのジョブを並べて複数のフレームをMemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionにコピーします。指定された枚数のフレームが取得されるかタイムアウトが発生した際にメソッドが戻ります。
snapImagesAsyncクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::snapImagesAsync Method スナップのジョブを並べて複数のフレームをMemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionにコピーします。メソッドはジョブのキューイング後すぐに戻ります。