Grabber::setCallback Method [非推奨]
コールバック関数を設定します。
構文
bool setCallback( const tsFrameEndCallback& callback = tsFrameEndCallback() );
パラメータ | 説明 |
---|---|
callback | コールバック関数を表す構造体。 |
戻り値
コールバックが正常にインストールされた場合はtrue、エラーが発生した場合はfalse。
備考
frame endにてコールされる関数です。1つのコールバック関数しか設定できないので、setCallbackへの次のコールは前の関数をオーバーライドすることになります。そのコールバック関数は新しいスレッドとして開始されます。しかし一度に1つのスレッドしか開始できません。
MemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionが格納できる数を超えるイメージを取り込んだ場合、コールバック関数が実行されるまでかなりの時間を要することになり、その関数の処理が完了しない間にバッファには新しいイメージが入ってきてしまうことになります。
コールバック関数の実行がデバイスのフレーム1枚を取り込む時間よりもかかってしまう場合、他の関数が実行中でない最初のframe endイベントでコールされます。この場合、いくつかのフレームを見失ってしまいますがそれらはMemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollection内に格納されることになります。
Grabber::snapImagesクラスライブラリリファレンス>クラス>Grabber>Grabber::snapImages Method と(デバイスが適当なFrameGrabberSinkクラスライブラリリファレンス>クラス>FrameGrabberSinkによって連続取り込みモードに設定されている場合) Grabber::stopLiveクラスライブラリリファレンス>クラス>Grabber>Grabber::stopLive Method は最後のコールバック関数が戻り値を返すまでブロックします。
コールバック関数はデバイスがオープンかつ有効、そしてライブモードでない時のみ設定が可能です。これらデバイスの状態については Grabber::isDevOpenクラスライブラリリファレンス>クラス>Grabber>Grabber::isDevOpen Method, Grabber::isDevValidクラスライブラリリファレンス>クラス>Grabber>Grabber::isDevValid Method, Grabber::isLiveクラスライブラリリファレンス>クラス>Grabber>Grabber::isLive Methodを参照ください。
コールバック関数は以下の通り定義される必要があります。
void callBackFunc( void *data, tMemBufferPtr buffer, unsigned long ctr );
各パラメータの詳細は以下の通りです。
パラメータ | 説明 |
---|---|
data | ユーザーデータへのポインタです。setCallbackと共に与えるものです。 |
buffer | 取り込んだイメージを格納するバッファへのポインタです。 |
ctr | フレームが取り込まれた時点での内部フレームカウンタの値です (参照:Grabber::getFrameCount ) |
コールバック関数をセットするには、関数へのポインタとユーザーデータへのポインタをtsFrameEndCallbackクラスライブラリリファレンス>構造体>tsFrameEndCallback Structure 型の構造体に入れる必要があります。
インフォメーション
このメソッドはIC Imaging Control 3.0より非推奨となりました。
代わりに GrabberListenerクラスライブラリリファレンス>クラス>GrabberListener を使用してください。