GrabBag/SDK/Device/IKapLibrary/Examples/Qt/MultiCamera/GeneralGrabWithGrabber.cpp

96 lines
3.3 KiB
C++

#include "GeneralGrabWithGrabber.h"
#include <string.h>
/// \~chinese 配置采集卡设备 \~english Configure frame grabber device
bool ConfigureFrameGrabber(pItkCamera pCam)
{
int ret = IK_RTN_OK;
/// \~chinese 设置缓冲区个数 \~english Set buffer count
ret = IKapSetInfo(pCam->g_hBoard, IKP_FRAME_COUNT, pCam->g_bufferCount);
if (ret != IKStatus_Success)
return false;
/// \~chinese 设置采集超时时间 \~english Set time of timeout
int timeout = -1;
ret = IKapSetInfo(pCam->g_hBoard, IKP_TIME_OUT, timeout);
if (ret != IKStatus_Success)
return false;
/// \~chinese 设置采集模式为非阻塞 \~english Set grab mode as non-block
int grab_mode = IKP_GRAB_NON_BLOCK;
ret = IKapSetInfo(pCam->g_hBoard, IKP_GRAB_MODE, grab_mode);
if (ret != IKStatus_Success)
return false;
/// \~chinese 设置传输模式为同步保护传输 \~english Set transfer mode as synchronous and protect
int transfer_mode = IKP_FRAME_TRANSFER_SYNCHRONOUS_NEXT_EMPTY_WITH_PROTECT;
ret = IKapSetInfo(pCam->g_hBoard, IKP_FRAME_TRANSFER_MODE, transfer_mode);
if (ret != IKStatus_Success)
return false;
/// \~chinese 禁用缓冲区自动清空 \~english Disable auto clear buffer function
int auto_clear = IKP_FRAME_AUTO_CLEAR_VAL_DISABLE;
ret = IKapSetInfo(pCam->g_hBoard, IKP_FRAME_AUTO_CLEAR, auto_clear);
if (ret != IKStatus_Success)
return false;
return true;
}
/// \~chinese 开始图像采集 \~english Start grabbing images
bool StartGrabImage(pItkCamera pCam)
{
ITKSTATUS res = ITKSTATUS_OK;
int ret = IK_RTN_OK;
/// \~chinese 创建格式转换的缓冲区 \~english Create buffer for format convert
int nWidth = 0, nHeight = 0;
ret = IKapGetInfo(pCam->g_hBoard, IKP_IMAGE_WIDTH, &nWidth);
if (ret != IKStatus_Success)
return false;
ret = IKapGetInfo(pCam->g_hBoard, IKP_IMAGE_HEIGHT, &nHeight);
if (ret != IKStatus_Success)
return false;
res = ItkBufferNew(nWidth, nHeight, ITKBUFFER_VAL_FORMAT_BGR161616, &pCam->g_hCvtBuffer);
if (ITKSTATUS_OK != res)
return false;
if (strcmp(pCam->g_devInfo.DeviceClass, "CameraLink") != 0) {
res = ItkDevExecuteCommand(pCam->g_hCamera, "AcquisitionStop");
if (ITKSTATUS_OK != res)
return false;
}
ret = IKapStartGrab(pCam->g_hBoard, 0);
if (ret != IKStatus_Success)
return false;
if (strcmp(pCam->g_devInfo.DeviceClass, "CameraLink") != 0) {
res = ItkDevExecuteCommand(pCam->g_hCamera, "AcquisitionStart");
if (ITKSTATUS_OK != res)
return false;
}
return true;
}
/// \~chinese 停止图像采集 \~english Stop grabbing images
bool StopGrabImage(pItkCamera pCam)
{
ITKSTATUS res = ITKSTATUS_OK;
int ret = IK_RTN_OK;
if (strcmp(pCam->g_devInfo.DeviceClass, "CameraLink") != 0) {
res = ItkDevExecuteCommand(pCam->g_hCamera, "AcquisitionStop");
if (ITKSTATUS_OK != res)
return false;
}
ret = IKapStopGrab(pCam->g_hBoard);
if (ret != IKStatus_Success)
return false;
return true;
}