連続転送

連続転送を開始すると、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;
}