|
|
@@ -130,23 +130,10 @@ int HK_SetWaitAEDoneForTakePhoto(int waitAE)
|
|
|
// "pImgMark" - 输出本次拍照图像的水印信息, 可以设置NULL
|
|
|
int HK_TakePhoto(HKImgType imgType, const char *saveImgPath, int timeout, HKImgMark *pImgMark)
|
|
|
{
|
|
|
- int fd; char runDir[MAX_PATH_CHARS] = { 0 }, lockFile[MAX_PATH_CHARS+32] = { 0 };
|
|
|
int ret, index = 0; HKImgMark imgMark = { 0 }; HANDLE hCam = NULL; PthotoProcCtx ctx = { 0 };
|
|
|
MV_CC_DEVICE_INFO_LIST devList = { 0 }; MV_CC_DEVICE_INFO *pDevInfo; MVCC_ENUMVALUE exposureMode = { 0 };
|
|
|
|
|
|
- // 1, 占用锁定, 避免同时间拍照
|
|
|
- xGetSelfRunningInfo(runDir, NULL);
|
|
|
- if(runDir[strlen(runDir)-1] == '/') sprintf(lockFile, "%s%s", runDir, "status/");
|
|
|
- else sprintf(lockFile, "%s/%s", runDir, "status/");
|
|
|
- if(!sw_dir_exists(lockFile)) sw_dir_create(lockFile);
|
|
|
- strcat(lockFile, "hk_takephoto.lock");
|
|
|
-
|
|
|
- fd = open(lockFile, O_CREAT | O_RDWR | __O_CLOEXEC, 0666);
|
|
|
- if(-1 == fd) { return -1; }
|
|
|
-
|
|
|
- if(-1 == flock(fd, LOCK_EX | LOCK_NB)) { close(fd); return -2; }
|
|
|
-
|
|
|
- // 2, 查找相机, 获取其设备信息
|
|
|
+ // 1, 查找相机, 获取其设备信息
|
|
|
ret = MV_CC_Initialize();
|
|
|
if(MV_OK != ret)
|
|
|
{
|
|
|
@@ -162,7 +149,7 @@ int HK_TakePhoto(HKImgType imgType, const char *saveImgPath, int timeout, HKImgM
|
|
|
}
|
|
|
if(devList.nDeviceNum < 1)
|
|
|
{
|
|
|
- ret = -3;
|
|
|
+ ret = -1;
|
|
|
sw_log_error("[%s] 没有相机,数量=%u!!", MODULE_NAME, devList.nDeviceNum);
|
|
|
goto end_p;
|
|
|
}
|
|
|
@@ -171,7 +158,7 @@ findp:
|
|
|
pDevInfo = devList.pDeviceInfo[index++];
|
|
|
if(!pDevInfo)
|
|
|
{
|
|
|
- ret = -4;
|
|
|
+ ret = -2;
|
|
|
sw_log_error("[%s] unexpected internal error, failed to obtain camera information!!", MODULE_NAME);
|
|
|
goto end_p;
|
|
|
}
|
|
|
@@ -192,7 +179,7 @@ findp:
|
|
|
strcpy(imgMark.camSerialNum, (const char *)pDevInfo->SpecialInfo.stGigEInfo.chSerialNumber);
|
|
|
}
|
|
|
else { // SDK出错, 我只枚举了U口和G口相机, 不可能出现其他类型
|
|
|
- ret = -5;
|
|
|
+ ret = -3;
|
|
|
sw_log_error("[%s] unexpected internal error, unknown camera type(%u)!!", MODULE_NAME, pDevInfo->nTLayerType);
|
|
|
goto end_p;
|
|
|
}
|
|
|
@@ -200,12 +187,12 @@ findp:
|
|
|
if(xstrcasecmp(ctx.manuName, manufacturer) != 0 && !is_hikrobot_manu_alias(ctx.manuName))
|
|
|
{
|
|
|
if(index < devList.nDeviceNum) goto findp;
|
|
|
- ret = -6;
|
|
|
+ ret = -4;
|
|
|
sw_log_error("[%s] 没有找到 \"%s\" 的相机!!", MODULE_NAME, manufacturer);
|
|
|
goto end_p;
|
|
|
}
|
|
|
|
|
|
- // 3, 打开相机, 设置其触发模式
|
|
|
+ // 2, 打开相机, 设置其触发模式
|
|
|
ret = MV_CC_CreateHandleWithoutLog(&hCam, pDevInfo);
|
|
|
if(MV_OK == ret) ret = MV_CC_OpenDevice(hCam, MV_ACCESS_Exclusive, 0);
|
|
|
if(MV_OK == ret && pDevInfo->nTLayerType == MV_USB_DEVICE /*U口相机*/)
|
|
|
@@ -216,7 +203,7 @@ findp:
|
|
|
{ // 探测网络最佳包大小(只对GigE相机有效)
|
|
|
int size = MV_CC_GetOptimalPacketSize(hCam);
|
|
|
if(size > 0) ret = MV_CC_SetIntValueEx(hCam, "GevSCPSPacketSize", size);
|
|
|
- else ret = -7;
|
|
|
+ else ret = -5;
|
|
|
}
|
|
|
if(MV_OK != ret)
|
|
|
{
|
|
|
@@ -232,7 +219,7 @@ findp:
|
|
|
goto end_p;
|
|
|
}
|
|
|
|
|
|
- // 4, 开始拍照, 等待完成后输出
|
|
|
+ // 3, 开始拍照, 等待完成后输出
|
|
|
ret = MV_CC_GetExposureAutoMode(hCam, &exposureMode);
|
|
|
if(MV_OK != ret)
|
|
|
{
|
|
|
@@ -255,7 +242,7 @@ findp:
|
|
|
ctx.hESig = sw_signal_create();
|
|
|
if(!ctx.hESig)
|
|
|
{
|
|
|
- ret = -8;
|
|
|
+ ret = -6;
|
|
|
sw_log_error("[%s] SIG信号量创建失败!!", MODULE_NAME);
|
|
|
goto end_p;
|
|
|
}
|
|
|
@@ -264,7 +251,7 @@ findp:
|
|
|
HANDLE hThrd = sw_thrd_create("PhotoProc", THREAD_DEFAULT_PRIORITY, THREAD_DEFAULT_STACK_SIZE, PhotoProc, (unsigned long)&ctx, 0);
|
|
|
if(!hThrd)
|
|
|
{
|
|
|
- ret = -9;
|
|
|
+ ret = -7;
|
|
|
sw_signal_destroy(ctx.hESig);
|
|
|
sw_log_error("[%s] 拍照线程-创建失败!!", MODULE_NAME);
|
|
|
goto end_p;
|
|
|
@@ -275,14 +262,14 @@ findp:
|
|
|
if(0 == ret) ret = ctx.rCode;
|
|
|
else
|
|
|
{
|
|
|
- ret = 10;
|
|
|
+ ret = -8;
|
|
|
sw_log_error("[%s] 拍照过程-等待超时!!", MODULE_NAME);
|
|
|
}
|
|
|
|
|
|
sw_thrd_destroy(hThrd, WAITTHRD_SAFEEXIT_TIMEOUT);
|
|
|
sw_signal_destroy(ctx.hESig);
|
|
|
|
|
|
- // 5, 成功拍照, 输出相机的信息
|
|
|
+ // 4, 成功拍照, 输出相机的信息
|
|
|
if(MV_OK == ret)
|
|
|
{
|
|
|
MVCC_FLOATVALUE fv = { 0 };
|
|
|
@@ -292,7 +279,7 @@ findp:
|
|
|
if(pImgMark) memcpy(pImgMark, &imgMark, sizeof(HKImgMark));
|
|
|
}
|
|
|
|
|
|
- // 6, 任务结束, 释放相关的资源
|
|
|
+ // 5, 任务结束, 释放相关的资源
|
|
|
end_p:
|
|
|
if(hCam)
|
|
|
{
|
|
|
@@ -302,10 +289,6 @@ end_p:
|
|
|
}
|
|
|
MV_CC_Finalize();
|
|
|
|
|
|
- flock(fd, LOCK_UN);
|
|
|
- close(fd);
|
|
|
- sw_file_delete(lockFile);
|
|
|
-
|
|
|
return ret;
|
|
|
}
|
|
|
|