diff --git a/.gitignore b/.gitignore index 2a69982..fd9f6c6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ O.* /dbd .cvsignore *.db -*.db.* \ No newline at end of file +*.db.* +pv.list +core.* \ No newline at end of file diff --git a/ADHamaApp/src/hama.cpp b/ADHamaApp/src/hama.cpp index e5c3c92..4aaf202 100644 --- a/ADHamaApp/src/hama.cpp +++ b/ADHamaApp/src/hama.cpp @@ -473,7 +473,6 @@ return 0; } //============================================================================ void Hama::imageTask(){ -epicsTimeStamp imageStamp; int status; unsigned char *image; int acquire; @@ -484,7 +483,6 @@ epicsTimeStamp imageStamp; int imageMode=0; int totalImages=0; uint64_t prevAcquisitionCount = 0; - epicsTimeStamp startTime; // endTime; DCAMCAP_TRANSFERINFO captransferinfo; //static const char *functionName = "imageTask"; @@ -514,13 +512,12 @@ epicsTimeStamp imageStamp; else { acquire = 1; /* Get the current time */ - epicsTimeGetCurrent(&startTime); prevAcquisitionCount = 0; } } /* Added this delay for the thread not to hog the processor. No need to run on full speed. */ - epicsThreadSleep(0.001); + //epicsThreadSleep(0.001); // get image transfer status. unlock(); @@ -549,7 +546,10 @@ epicsTimeStamp imageStamp; memset(image, 0, width * 2 * height); count++; - accessCapturedImage(m_hdcam, captransferinfo.nNewestFrameIndex, image, width * 2, width, height); + + int32 ts_sec = 0, ts_microsec = 0; + accessCapturedImage(m_hdcam, captransferinfo.nNewestFrameIndex, image, + width * 2, width, height, ts_sec, ts_microsec); getIntegerParam(NDArrayCallbacks, &callback); if(callback) { @@ -564,8 +564,7 @@ epicsTimeStamp imageStamp; if(pImage) { pImage->uniqueId = count; - pImage->timeStamp = imageStamp.secPastEpoch + - (imageStamp.nsec / 1.0e9); + pImage->timeStamp = ts_sec + (ts_microsec / 1.0e6); updateTimeStamp(&pImage->epicsTS); memcpy(pImage->pData, (epicsUInt16 *)image, pImage->dataSize); @@ -1052,7 +1051,9 @@ inline void* memcpy_s( void* dst, size_t dstsize, const void* src, size_t srclen return memcpy( dst, src, srclen ); } -asynStatus Hama::accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy ) +asynStatus Hama::accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, + int32 rowbytes, int32 cx, int32 cy, + int32& ts_sec, int32& ts_microsec) { DCAMERR err; @@ -1074,6 +1075,10 @@ asynStatus Hama::accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 return asynError; } + // Get timestamp from the the frame + ts_sec = bufframe.timestamp.sec; + ts_microsec = bufframe.timestamp.microsec; + // copy target ROI int32 copyrowbytes = cx * 2; char* pSrc = (char*)bufframe.buf; diff --git a/ADHamaApp/src/hama.h b/ADHamaApp/src/hama.h index a336d4c..0e5c94e 100644 --- a/ADHamaApp/src/hama.h +++ b/ADHamaApp/src/hama.h @@ -269,7 +269,7 @@ private: asynStatus startAcquire(void); asynStatus stopAcquire(void); void getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width, int32& rowbytes, int32& height, int32& framebytes); - asynStatus accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy); + asynStatus accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy, int32& ts_sec, int32& ts_microsec); asynStatus imageTransferStatus(HDCAM hdcam, DCAMCAP_TRANSFERINFO &captransferinfo); diff --git a/cmds/st.cmd b/cmds/st.cmd index ba9cb96..5a39edf 100644 --- a/cmds/st.cmd +++ b/cmds/st.cmd @@ -44,3 +44,5 @@ dbpf Hama:cam1:PoolUsedMem.SCAN 0 dbpf Hama:image1:EnableCallbacks 1 epicsThreadSleep(1.0) + +dbl > pv.list