USB 2.0 USB 3.x GigE |
USB 2.0 USB 3.x GigE |
INT is_GetImageInfo (HIDS hCam, INT nMemId, UEYEIMAGEINFO *pImageInfo, INT nImageInfoSize)
is_GetImageInfo() provides additional information on the images you take. The function returns a timestamp indicating the time of image capture, and the states of the camera I/Os at that point in time. To get information on the last image that was taken, call is_GetImageInfo() directly after receiving the IS_SET_EVENT_FRAME event.
Using the function with GigE and USB 3 uEye cameras
The UEYEIMAGEINFO structure returns the camera timestamp u64TimestampDevice, which indicates the time of image capture with a resolution of 0.1 μs. The time of image capture is defined as:
•The time when a (hardware or software) trigger event is received by the camera in trigger mode. The delay between the receipt of the trigger signal and the start of exposure depends on the sensor.
•The time when the sensor starts to output image data in freerun mode (see also How to proceed: Image capture). A rolling shutter sensors starts to output image data after exposure of the first row. With a global shutter sensor, image data is output after exposure of all rows.
The UEYETIME structure returns a timestamp with a resolution of 1 ms. The timestamp is synchronized with the PC's system time, and resynchronized every 60 seconds. This may cause minor time shifts in the value passed in UEYETIME (average time about 3 ms).
To determine the exact interval between two image captures, it is therefore recommended to read out the camera timestamp u64TimestampDevice.
Using the function with USB 2 uEye cameras, USB 3 uEye CP Rev. 1 and USB 3 uEye LE cameras (from version 4.82 on)
The u64TimestampDevice timestamp returns the time when image data transfer to the PC was completed.
The UEYETIME structure returns the timestamp (with a resolution of 1 ms) synchronized with the PC system time.
For the normal trigger mode (without overlapping trigger), the following formula can be used to calculate approximately the time stamp for the start of image acquisition:
u64TimestampDevice -= static_cast<uint64_t>((frametime_inc * static_cast<double>(aoi.s32Height) * 10000000.0) + (exposure * 10000.0));
Image buffers that are part of a sequence need to be locked using is_LockSeqBuf(). This is important to ensure correct assignment between image data and image information. Otherwise, it may happen that an image buffer is filled with new image data. In this case, the image information will not match the image data any more. |
hCam |
Camera handle |
nMemId |
ID of the image buffer for which information is requested |
pImageInfo |
Pointer to a UEYEIMAGEINFO type structure to which the information will be written |
nImageInfoSize |
Size of the structure |
Contents of the UEYEIMAGEINFO structure
DWORD |
dwFlags |
Internal status flags (currently not used) |
BYTE |
byReserved1[4] |
Reserved |
UINT64 |
u64TimestampDevice |
Internal timestamp of image capture (tick count of the camera in 0.1 μs steps) |
UEYETIME |
TimestampSystem |
Structure with timestamp information in PC system time format, see UEYETIME below |
DWORD |
dwIoStatus |
With GigE and USB 3 uEye cameras: Returns the states of the digital I/Os at the time of image capture: •Digital input (trigger): Pending signal •GPIO as input: Pending signal •GPIO as output: Set level With all other cameras, dwIoStatus is empty. See dwIOStatus below. |
WORD |
wAOIIndex |
AOI index (only sequence AOI mode of UI-124x/UI-324x/UI-524x and UI-125x/UI-325x/UI-525x) |
WORD |
wAOICycle |
Readout cycles (only sequence AOI mode of UI-124x/UI-324x/UI-524x and UI-125x/UI-325x/UI-525x) |
unsigned long long |
u64FrameNumber |
Internal image number (not chronological) Note: Use u64TimestampDevice to get the right image sequence. |
DWORD |
dwImageBuffers |
Number of image buffers existing in the camera |
DWORD |
dwImageBuffersInUse |
Number of image buffers in use in the camera |
DWORD |
dwReserved3 |
Reserved |
DWORD |
dwImageHeight |
Image height |
DWORD |
dwImageWidth |
Image width |
DWORD |
dwHostProcessTime |
DIB mode only: Time in µs which was used for image processing (time difference between raw image data arrival and the setting of the frame event). The value is an indication of the maximum possible frame rate. |
BYTE |
bySequencerIndex |
Sequencer-set used for this image acquisition, when the sequencer-mode was active. See is_Sequencer() to get more info about this set. |
DWORD |
dwFocusValue |
uEye LE USB 3.1 Gen 1 AF: Returns the focus settings that were used to capture the image. |
BOOL |
bFocusing |
uEye LE USB 3.1 Gen 1 AF: Returns if autofocus was active when the image was captured. |
Status flags in UEYEIMAGEINFO::dwIoStatus
Bit combination |
State of digital input |
State of GPIO 1 |
State of GPIO 2 |
---|---|---|---|
000 |
0 |
0 |
0 |
001 |
0 |
0 |
1 |
010 |
0 |
1 |
0 |
011 |
0 |
1 |
1 |
100 |
1 |
0 |
0 |
101 |
1 |
0 |
1 |
110 |
1 |
1 |
0 |
111 |
1 |
1 |
1 |
Contents of the UEYEIMAGEINFO::UEYETIME structure
WORD |
wYear |
Timestamp year |
WORD |
wMonth |
Timestamp month |
WORD |
wDay |
Timestamp day |
WORD |
wHour |
Timestamp hour |
WORD |
wMinute |
Timestamp minute |
WORD |
wSecond |
Timestamp second |
WORD |
wMilliseconds |
Timestamp millisecond |
BYTE |
wReserved[10] |
Reserved |
IS_INVALID_CAMERA_HANDLE |
Invalid camera handle |
IS_INVALID_PARAMETER |
One of the submitted parameters is outside the valid range or is not supported for this sensor or is not available in this mode. This may happen when e.g.: •more memory is allocated than the UEYEIMAGEINFO structure needs •nImageBufferID <= 0 •pImageInfo == NULL •nImageInfoSize <= 0 |
IS_NO_SUCCESS |
General error message |
IS_SUCCESS |
Function executed successfully |
UEYEIMAGEINFO ImageInfo;
// Read out camera timestamp
INT nRet = is_GetImageInfo( m_hCam, m_lMemoryId, &ImageInfo, sizeof(ImageInfo));
if (nRet == IS_SUCCESS)
{
unsigned long long u64TimestampDevice;
u64TimestampDevice = ImageInfo.u64TimestampDevice;
CString Str; // Read out timestamp in system time
Str.Format("%02d.%02d.%04d, %02d:%02d:%02d:%03d",
ImageInfo.TimestampSystem.wDay,
ImageInfo.TimestampSystem.wMonth,
ImageInfo.TimestampSystem.wYear,
ImageInfo.TimestampSystem.wHour,
ImageInfo.TimestampSystem.wMinute,
ImageInfo.TimestampSystem.wSecond,
ImageInfo.TimestampSystem.wMilliseconds);
DWORD dwTotalBuffers = ImageInfo.dwImageBuffers;
DWORD dwUsedBuffers = ImageInfo.dwImageBuffersInUse;
}
Sample Program
•uEyeTimestamp (C++)