lWaitTimeout);/**/
final long lNumberOfBuffers = mDcamAcquisition.getBufferControl()
.getNumberOfSinglePlaneBuffers();
DCAMCAP_TRANSFERINFO lTransferinfo = mDcamAcquisition.getTransferinfo();
mDcamAcquisition.mAcquiredFrameIndex = lTransferinfo.nFrameCount();
while (mStopIfFalse)
{
// DCAMCAP_EVENT_FRAMEREADYORSTOPPED(2|16),
final DCAMWAIT_EVENT lDcamcapEventToWaitFor;
if (mContinuousAcquisition && !mStackAcquisition)
lDcamcapEventToWaitFor = DCAMWAIT_EVENT.DCAMCAP_EVENT_FRAMEREADYORSTOPPED;
else if (mStackAcquisition)
lDcamcapEventToWaitFor = DCAMWAIT_EVENT.DCAMCAP_EVENT_FRAMEREADYORSTOPPED;
else
lDcamcapEventToWaitFor = DCAMWAIT_EVENT.DCAMCAP_EVENT_FRAMEREADY;
mDcamAcquisition.mAcquisitionStartedSignal.countDown();
if (mDcamAcquisition.mDebug)
System.out.print("waitForEvent.before... ");
final boolean lWaitSuccess = (mDcamAcquisition.mDcamDevice.getDcamWait().waitForEvent(lDcamcapEventToWaitFor,
lWaitTimeout));
if (mDcamAcquisition.mDebug)
System.out.println(" ...after.");
final long lAcquisitionTimeStampInNanoseconds = StopWatch.absoluteTimeInNanoseconds();
// System.out.println(System.nanoTime());
lTransferinfo = mDcamAcquisition.getTransferinfo();
final long lNumberOfFramesWrittenByDrivertoBuffers = lTransferinfo.nFrameCount();
final long lDriversFrameIndex = lNumberOfFramesWrittenByDrivertoBuffers - 1;
final long lReceivedFrameIndexInBufferList = lTransferinfo.nNewestFrameIndex();
if (mDcamAcquisition.mDebug)
{
System.out.println("lDriversFrameIndex=" + lDriversFrameIndex);
System.out.println("lReceivedFrameIndexInBufferList=" + lReceivedFrameIndexInBufferList);
}
if (!lWaitSuccess)
{
if (!mDcamAcquisition.isExternalTriggering() && !mDcamAcquisition.isSoftwareTriggering())
{
System.err.println("DcamJ: waiting for event failed!!!!");
System.err.format("DcamJ: frame index = %d (local index = %d) out of %d frames to capture (%s acquisition) \n",
mDcamAcquisition.mAcquiredFrameIndex,
lReceivedFrameIndexInBufferList,
mNumberOfFramesToCapture,
mStackAcquisition ? "stack"
: "single plane");
System.err.println("DcamJ: timeout waiting for frame!");
break;
}
continue;
}
final long lDcamWaitEvent = mDcamAcquisition.mDcamDevice.getDcamWait()
.getEvent();
final boolean lReceivedStopEvent = lDcamWaitEvent == DCAMWAIT_EVENT.DCAMCAP_EVENT_STOPPED.value;
final boolean lReceivedFrameReadyEvent = lDcamWaitEvent == DCAMWAIT_EVENT.DCAMCAP_EVENT_FRAMEREADY.value;
DcamFrame lDcamFrame = null;
if (mStackAcquisition && lReceivedStopEvent)
{
if (mDcamAcquisition.mDebug)
System.out.println("DcamJ: Received Stop Event");
if (mStackAcquisition)
{
lDcamFrame = mDcamAcquisition.getBufferControl()
.getStackDcamFrame();
lDcamFrame.setIndex(lDriversFrameIndex);
lDcamFrame.setTimeStampInNs(lAcquisitionTimeStampInNanoseconds);
mDcamAcquisition.notifyListeners( mDcamAcquisition.mAcquiredFrameIndex,
lAcquisitionTimeStampInNanoseconds,
0,
lDcamFrame);
mDcamAcquisition.mAcquiredFrameIndex++;
mStopIfFalse = false;
}
}
if (!mStackAcquisition && lReceivedFrameReadyEvent)
{
long lFirstFrameNotYetAcquired = mDcamAcquisition.mAcquiredFrameIndex;
long lNumberOfFramesToAcquire = lDriversFrameIndex - lFirstFrameNotYetAcquired;
long lRingBufferFrameIndex = (lReceivedFrameIndexInBufferList - lNumberOfFramesToAcquire);
while (lRingBufferFrameIndex < 0)
lRingBufferFrameIndex += lNumberOfBuffers;
lRingBufferFrameIndex %= lNumberOfBuffers;
for (long lFrameIndex = lFirstFrameNotYetAcquired; lFrameIndex <= lDriversFrameIndex; lFrameIndex++)
{
lDcamFrame = mDcamAcquisition.getBufferControl()
.getDcamFrameForIndex(lRingBufferFrameIndex);
lDcamFrame.setIndex(lFrameIndex);
lDcamFrame.setTimeStampInNs(lAcquisitionTimeStampInNanoseconds);
mDcamAcquisition.notifyListeners( lFrameIndex,
lAcquisitionTimeStampInNanoseconds,
lRingBufferFrameIndex,
lDcamFrame);
mDcamAcquisition.mAcquiredFrameIndex++;
lRingBufferFrameIndex = (lRingBufferFrameIndex + 1) % lNumberOfBuffers;
}
}
if (lDcamFrame != null)
{
if (mDcamAcquisition.mDebug)
System.out.format("DcamJ: true frame index = %d, acquired frame index = %d (local index = %d) \n",
lDriversFrameIndex,
mDcamAcquisition.mAcquiredFrameIndex,
lReceivedFrameIndexInBufferList);
lDcamFrame.setIndex(lDriversFrameIndex);
lDcamFrame.setTimeStampInNs(lAcquisitionTimeStampInNanoseconds);
}
if (lReceivedFrameReadyEvent)
{
if (mDcamAcquisition.mDebug)
System.out.println("DcamJ: Received frame ready Event");
if (!mContinuousAcquisition && !mStackAcquisition
&& lReceivedFrameIndexInBufferList >= mNumberOfFramesToCapture - 1)
{
mStopIfFalse = false;
}
}
}
// if (!mContinuousAcquisition)
{
// System.out.println("getTransferinfo.before");
lTransferinfo = mDcamAcquisition.getTransferinfo();
// System.out.println("getTransferinfo.after");
final int lNumberOfFramesWrittenByDrivertoBuffers = (int) lTransferinfo.nFrameCount();
final long lReceivedFrameIndexInBufferList = lTransferinfo.nNewestFrameIndex();
if (mDcamAcquisition.mDebug)
{
System.out.println("lNumberOfFramesWrittenByDrivertoBuffers=" + lNumberOfFramesWrittenByDrivertoBuffers);
System.out.println("lReceivedFrameIndexInBufferList=" + lReceivedFrameIndexInBufferList);