FrameQueueSink

アプリケーションとして、すべてのフレームを処理する必要がある場合にFrameQueueSinkを使用します。

Sinkはそのコンストラクタをコールする事で作成され、IFrameQueueSinkListenerクラスライブラリリファレンス>クラス>IFrameQueueSinkListenerを実装したクラスへの参照、または 関数オブジェクトを必要とします。リスナーのメソッドはフレームが利用可能になった時、またはSinkの状態が変化したときにコールされます。

バッファの取り扱い

Sinkは内部的にIFrameQueueBufferクラスライブラリリファレンス>クラス>IFrameQueueBufferの2つのキューを管理しています。
- フリーバッファの入力キュー
- 画像の入力されたバッファの出力キュー

バッファは、AllocAndQueueBuffersクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.AllocAndQueueBuffers MethodまたはQueueBufferクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.QueueBuffer Methodのコールによって入力キューに入れられます。入力キューの現在のバッファ長は InputQueueSizeクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.InputQueueSize Propertyで知ることができます。

FrameQueueSinkはデバイスから画像を受け取ると、入力キューからバッファを受け取り、画像データをコピーして出力キューに配置します。Sinkが画像を受け取った時点で入力キューが空の場合、その画像はドロップされます。Sinkがコピーしたフレーム数やドロップされたフレームの情報はCountOfFramesCopiedクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.CountOfFramesCopied PropertyCountOfFramesDroppedクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.CountOfFramesDropped Propertyで問い合わせることができます。

バッファは、PopOutputQueueBufferクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.PopOutputQueueBuffer MethodまたはPopAllOutputQueueBuffersクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.PopAllOutputQueueBuffers Methodをコールすることで、出力キューから取り出すことができます。出力キューの現在のバッファ長はOutputQueueSizeクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.OutputQueueSize Propertyで知ることができます。

Sink上でフレームがドロップする事を避けるために、アプリケーションは入力キューがいつでも利用可能なバッファであることを保証しなければなりません。そのため出力キューから抽出されたバッファの処理が終われば、再度キューに入力する必要があります。

Sink イベント

IFrameQueueSinkListener.SinkConnectedクラスライブラリリファレンス>クラス>IFrameQueueSinkListener>IFrameQueueSinkListener.SinkConnected Methodメソッドは、ICImagingControl.LiveStartクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStart Methodまたは ICImagingControl.LivePrepareクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LivePrepare Methodの呼び出し中にSink画像フォーマットが決定された際にコールされます。これは、ビデオキャプチャデバイスから最初の画像が入力される前に、正しいフォーマットでバッファを割り当て、それらが正しくキューされるために使用することができます。

IFrameQueueSinkListener.FramesQueuedクラスライブラリリファレンス>クラス>IFrameQueueSinkListener.FramesQueued Methodメソッドは、フレームが入力され、出力キューにコピーされたあと、毎回コールされます。コールバック実行中に次のフレームが出力キューに追加された場合は、コールバックが戻った直後に再度コールされます。

IFrameQueueSinkListener.SinkDisconnectedクラスライブラリリファレンス>クラス>IFrameQueueSinkListener>IFrameQueueSinkListener.SinkDisconnected Methodメソッドは、 ICImagingControl.LiveStopクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStop Methodの呼び出し中にデバイスが停止するとコールされます。

シンク状態の変化

ICImagingControl.LiveStartクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStart Methodまたは ICImagingControl.LivePrepareクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LivePrepare Methodがコールされたとき、

ストリーミングが開始されると、

ICImagingControl.LiveStopクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStop Methodが コールされると、

インフォメーション

ネームスペース: TIS.Imaging
IC Imaging Control 3.5より実装

プロパティ

プロパティ 説明
CountOfFramesCopiedクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.CountOfFramesCopied Property このSinkの出力キューにコピーされたフレーム数を返します。
CountOfFramesDroppedクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.CountOfFramesDropped Property 入力キューにバッファが足りないために、このSinkがドロップしたフレーム数を返します。
InputQueueSizeクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.InputQueueSize Property キューに入っている(または空いている)IFrameQueueBufferクラスライブラリリファレンス>クラス>IFrameQueueBufferインスタンスの現在の数を返します。
IsCancelRequestedクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.IsCancelRequested Property Sinkが現在、停止状態に移行している場合にtrueを返します。
OutputFrameTypeクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.OutputFrameType Property このSinkによって使用されているIFrameクラスライブラリリファレンス>クラス>IFramesのFrameTypeクラスライブラリリファレンス>クラス>FrameTypeを返します。
OutputQueueSizeクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.OutputQueueSize Property 出力リストに保持されているIFrameQueueBufferクラスライブラリリファレンス>クラス>IFrameQueueBufferインスタンスの現在の数を返します。

メソッド

メソッド 説明
AllocAndQueueBuffersクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.AllocAndQueueBuffers Method 1つ以上のIFrameQueueBufferクラスライブラリリファレンス>クラス>IFrameQueueBufferをキューバッファリストに割り当て、キューされたバッファリストに入れます。
FrameQueueSinkクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.FrameQueueSink Method 新しいFrameQueueSinkクラスライブラリリファレンス>クラス>FrameQueueSinkを作成します。
PopAllInputQueueBuffersクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.PopAllInputQueueBuffers Method キューされたバッファリストにある全てのバッファを返し、内部リストを空にします。
PopAllOutputQueueBuffersクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.PopAllOutputQueueBuffers Method コピーされたバッファリストにある全てのバッファを返し、内部リストを空にします。
PopOutputQueueBufferクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.PopOutputQueueBuffer Method コピーされたバッファリストから1つのIFrameQueueBufferクラスライブラリリファレンス>クラス>IFrameQueueBufferを返します。
QueueBufferクラスライブラリリファレンス>クラス>FrameQueueSink>FrameQueueSink.QueueBuffer Method 1つ以上のIFrameQueueBufferクラスライブラリリファレンス>クラス>IFrameQueueBuffersをキューされたバッファリストに入れます。