Sinkの種類と使い分け
ICImagingControl3.5より、用途に合わせて複数のSinkを使い分けることができるようになりました。
概要
以下、4つのフレームSinkが用意されています。
- FrameNotificationSinkクラスライブラリリファレンス>クラス>FrameNotificationSinkは、最も簡素なSinkであり、イメージデータに対して最も高速に動作します。
- FrameQueueSinkクラスライブラリリファレンス>クラス>FrameQueueSinkは、内部に複数の一時バッファを実装しており、連続した入力フレームを取得して処理することができます
- FrameSnapSinkクラスライブラリリファレンス>クラス>FrameSnapSink は、イメージストリームから1枚以上のイメージを不定期に取得したい場合に使用します。
- FrameHandlerSinkクラスライブラリリファレンス>クラス>FrameHandlerSinkは、ICImagingControl3.4以前で使用されていた従来のSinkです。
FrameNotificationSink
外部のアルゴリズムに画像ストリームを高速に受け渡ししたい場合に、簡単で効率的な方法です。 FrameNotificationSinkListener::frameReceivedクラスライブラリリファレンス>クラス>FrameNotificationSinkListener>FrameNotificationSinkListener::frameReceivedによって 画像ストリーム内の画像へ直接的なアクセスが可能で、必要とされるあて先にコピーすることができるようになります。
FrameNotificationSinkListener::frameReceivedクラスライブラリリファレンス>クラス>FrameNotificationSinkListener>FrameNotificationSinkListener::frameReceivedコールバックはドライバのスレッド内に直接作用 するため、入力されたフレームに対して高速なハンドリングが 可能になりますが、コールバック内で時間がかかるとフレームドロップが発生します。ドライバがバッファを持っている場合であっても、ドライバの バッファリングは制御できません。
連続したフレームをすべて取得したい場合や、過去のフレームへのアクセスが必要な場合はFrameQueueSinkクラスライブラリリファレンス>クラス>FrameQueueSinkを 使用してください。
FrameQueueSink
Sink内に一時的なバッファである2種類のキューバッファを実装しており、連続した一定期間の全フレームを取得することができます。
システムのメモリ上に一時的な複数のバッファを保持することで、各フレームへの処理が追い付かない場合もバッファ量が許す限り、入力された連続したフレームを扱うことができるようになります。
FrameSnapSink
これから取得される1フレームまたは複数フレームの画像に対して、簡単なアクセスを提供します。不定期に画像データを取得する場合に使用します。