“sane等待所有图片流程结束再调用sane_cancel,解决丢弃图像后继续扫描的流程异常问题”
This commit is contained in:
parent
708f263aff
commit
fe2d00802f
|
@ -216,7 +216,8 @@ DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, const QString &passwor
|
|||
m_source = source;
|
||||
m_saneDev = nullptr;
|
||||
m_password = password;
|
||||
m_reserveImage = false;
|
||||
m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
|
||||
m_abnormalImageResult = HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
DeviceUser::~DeviceUser()
|
||||
|
@ -367,31 +368,37 @@ void HGAPI DeviceUser::DeviceEventFunc(HGSaneDevice dev, HGUInt event, HGPointer
|
|||
if (HGSANE_EVENT_TYPE_SCANFINISHED == event)
|
||||
{
|
||||
emit p->scanFinishEvent();
|
||||
p->m_reserveImage = false;
|
||||
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
|
||||
p->m_abnormalImageResult = HGBASE_ERR_OK;
|
||||
}
|
||||
else if (HGSANE_EVENT_TYPE_WORKING == event)
|
||||
{
|
||||
emit p->scanWorkingEvent();
|
||||
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
|
||||
p->m_abnormalImageResult = HGBASE_ERR_OK;
|
||||
}
|
||||
}
|
||||
|
||||
HGUInt HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGUInt type, HGPointer param)
|
||||
{
|
||||
DeviceUser* p = (DeviceUser*)param;
|
||||
HGUInt result = HGBASE_ERR_OK;
|
||||
if (HGSANE_IMAGE_TYPE_DOUBLE == type && !p->m_reserveImage)
|
||||
|
||||
if (HGSANE_IMAGE_TYPE_DOUBLE == type && HGSANE_IMAGE_STATUS_NO_STATUS == p->m_abnormlImageStatus)
|
||||
{
|
||||
emit p->abnormalImage(image, &result);
|
||||
emit p->abnormalImage(image, &p->m_abnormalImageResult);
|
||||
}
|
||||
|
||||
if (HGBASE_ERR_OK == result)
|
||||
if (HGBASE_ERR_OK == p->m_abnormalImageResult || HGSANE_IMAGE_STATUS_RESERVE == p->m_abnormlImageStatus)
|
||||
{
|
||||
p->m_reserveImage = true;
|
||||
if (HGSANE_IMAGE_TYPE_DOUBLE == type)
|
||||
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_RESERVE;
|
||||
|
||||
emit p->newImage(image);
|
||||
}
|
||||
else
|
||||
{
|
||||
return HGSANE_ERR_STOPSCAN;
|
||||
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_DISCARD;
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
|
|
|
@ -134,7 +134,8 @@ private:
|
|||
HGSaneDevice m_saneDev;
|
||||
QString m_password;
|
||||
|
||||
bool m_reserveImage;
|
||||
HGUInt m_abnormlImageStatus;
|
||||
HGUInt m_abnormalImageResult;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -42,6 +42,10 @@ typedef struct
|
|||
#define HGSANE_IMAGE_TYPE_NORMAL 0L
|
||||
#define HGSANE_IMAGE_TYPE_DOUBLE 1L
|
||||
|
||||
#define HGSANE_IMAGE_STATUS_NO_STATUS 0L
|
||||
#define HGSANE_IMAGE_STATUS_RESERVE 1L
|
||||
#define HGSANE_IMAGE_STATUS_DISCARD 2L
|
||||
|
||||
/* Sane回调
|
||||
*/
|
||||
typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt event, HGPointer param);
|
||||
|
|
|
@ -1121,8 +1121,7 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
|
|||
HGUInt type = (SCANNER_ERR_DEVICE_DOUBLE_FEEDING == stat1)
|
||||
? HGSANE_IMAGE_TYPE_DOUBLE : HGSANE_IMAGE_TYPE_NORMAL;
|
||||
HGUInt imgRet = p->m_imageFunc((HGSaneDevice)p, img, type, p->m_imageParam);
|
||||
if (HGSANE_ERR_STOPSCAN == imgRet)
|
||||
stopScan = true;
|
||||
|
||||
HGBase_DestroyImage(img);
|
||||
}
|
||||
}
|
||||
|
@ -1131,13 +1130,13 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
|
|||
buffer = NULL;
|
||||
bufferSize = 0;
|
||||
|
||||
if (stopScan)
|
||||
{
|
||||
saneAPI.sane_cancel_api(p->m_devHandle);
|
||||
if (NULL != p->m_scanNotify)
|
||||
p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0);
|
||||
break;
|
||||
}
|
||||
// if (stopScan)
|
||||
// {
|
||||
// saneAPI.sane_cancel_api(p->m_devHandle);
|
||||
// if (NULL != p->m_scanNotify)
|
||||
// p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0);
|
||||
// break;
|
||||
// }
|
||||
|
||||
if (!p->m_cancelScan)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue