連続転送
INFINICAM UC SDK 連続転送
連続転送を開始すると、SDK内部でデバイスから画像取得を繰り返すようになります。 SDK内部には画像を溜め込むリングバッファが存在し、取得した画像は順次バッファに格納されます。
SDKの内部で1枚画像を取得すると、あらかじめ指定した関数(以下、コールバック関数)が呼び出されるため、その関数内で保存処理等を実行してください。
コールバック関数の実行中は、バッファがロックされ上書きされないようになっています。 コールバック関数の処理に時間をかけると、SDK内部の画像取得が追い付いてしまい、画像取得は待機状態に入ります。 その状況になると、フレーム抜けが発生する可能性が高まります。 回避するには、出来る限りリングバッファ数を多く設定しておく必要があります。
※1つのバッファはおよそ0.4MBのメモリを消費します。
リングバッファ数を増やせばフレーム抜けが防げることを保証するわけではありません。
OS上の別ソフトの割込み等によりフレーム抜けが発生する場合があります。
リングバッファ数の設定
リングバッファ数は下記関数で設定します。
result = PUC_SetRingBufferCount(hDevice, 1024);
if (PUC_CHK_FAILED(result))
{
return;
}
※設定可能な最大リングバッファ数はPUC_MAX_RING_BUF_COUNTで定義されています。
連続転送の開始
FILE* fp;
_tfopen_s(&fp, _T(“test.dat”), _T(“wb”));
result = PUC_BeginXferData(hDevice, RecieveProc, fp);
if (PUC_CHK_FAILED(result))
return;
}
PUC_BeginXferData の引数には、画像の取得毎に呼ばれるコールバック関数へのポインタと、コールバック関数に渡す引数を指定します。 上記の例では、あらかじめオープンしていたファイルポインタを渡しています。
void RecieveProc(PPUC_XFER_DATA_INFO pXferData, void* arg)
{
FILE* fp = (FILE*)arg;
fwrite(pXferData->pData, pXferData->nDataSize, 1, fp);
}}
コールバック関数では画像をファイルに書き込んでいます。 コールバック関数に時間がかかるとフレーム抜けに繋がるため、出来る限り処理は少なくしてください。
連続転送の終了
result = PUC_EndXferData(hDevice);
if (PUC_CHK_FAILED(result))
{
return;
}
ハイスピードカメラの選定・販売・レンタルから
撮影・解析までお任せください
お問い合わせは
こちらから
専門知識を持った担当者が
お客様の課題や要件をお伺いします
無償デモ撮影・解析
の申し込み
ハイスピードカメラの動作や
必要性を事前に検証できます
製品価格入り資料を
ダウンロード
製品のカタログや活用事例集を
無料でダウンロードできます
電話でお問い合わせ
平日9:00~18:00