連続転送

INFINICAM UC-1 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

03-3518-6271