添加异常图片处理协议
This commit is contained in:
parent
96cbfed48d
commit
6f5bde5cc4
|
@ -785,7 +785,7 @@ void final_img_queue::clear(void)
|
||||||
mem_usage_ = 0;
|
mem_usage_ = 0;
|
||||||
queue_.clear();
|
queue_.clear();
|
||||||
}
|
}
|
||||||
bool final_img_queue::put(int w, int h, int bpp, int channels, int line_bytes, void* data, unsigned bytes
|
bool final_img_queue::put(int w, int h, int bpp, int channels, int line_bytes, void* data, unsigned bytes, int statu
|
||||||
, const char* tmp_path, const char* name_leading, const char* ext, int ind, uint32_t id)
|
, const char* tmp_path, const char* name_leading, const char* ext, int ind, uint32_t id)
|
||||||
{
|
{
|
||||||
IMGDT imgd;
|
IMGDT imgd;
|
||||||
|
@ -799,6 +799,7 @@ bool final_img_queue::put(int w, int h, int bpp, int channels, int line_bytes, v
|
||||||
imgd.header.line_bytes = line_bytes;
|
imgd.header.line_bytes = line_bytes;
|
||||||
imgd.header.width = w;
|
imgd.header.width = w;
|
||||||
imgd.header.src_id = id;
|
imgd.header.src_id = id;
|
||||||
|
imgd.header.statu = statu;
|
||||||
imgd.offset = 0;
|
imgd.offset = 0;
|
||||||
imgd.data.reset(new tiny_buffer(bytes, tmp_path, name_leading, ext, ind));
|
imgd.data.reset(new tiny_buffer(bytes, tmp_path, name_leading, ext, ind));
|
||||||
|
|
||||||
|
|
|
@ -213,6 +213,7 @@ typedef struct _img_header
|
||||||
int bits;
|
int bits;
|
||||||
int channels;
|
int channels;
|
||||||
int line_bytes;
|
int line_bytes;
|
||||||
|
int statu; // SANE_Image_Statu
|
||||||
unsigned bytes;
|
unsigned bytes;
|
||||||
uint32_t src_id;
|
uint32_t src_id;
|
||||||
}IMH;
|
}IMH;
|
||||||
|
@ -236,7 +237,7 @@ public:
|
||||||
unsigned long long mem_usage(void);
|
unsigned long long mem_usage(void);
|
||||||
size_t size(void);
|
size_t size(void);
|
||||||
void clear(void);
|
void clear(void);
|
||||||
bool put(int w, int h, int bpp, int channels, int line_bytes, void* data, unsigned bytes
|
bool put(int w, int h, int bpp, int channels, int line_bytes, void* data, unsigned bytes, int statu
|
||||||
, const char* tmp_path, const char* name_leading, const char* ext, int ind, uint32_t id);
|
, const char* tmp_path, const char* name_leading, const char* ext, int ind, uint32_t id);
|
||||||
bool front(IMH* header);
|
bool front(IMH* header);
|
||||||
void fetch_front(void* buf, int* len, bool* over);
|
void fetch_front(void* buf, int* len, bool* over);
|
||||||
|
|
|
@ -3615,7 +3615,7 @@ int hg_scanner::save_final_image(hg_imgproc::LPIMGHEAD head, void* buf, uint32_t
|
||||||
return ui_ev_cb_((scanner_handle)this, SANE_EVENT_IMAGE_OK, &img, &final_img_index_, NULL);
|
return ui_ev_cb_((scanner_handle)this, SANE_EVENT_IMAGE_OK, &img, &final_img_index_, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (final_imgs_.put(head->width, head->height, head->bits, head->channels, head->line_bytes, buf, head->total_bytes
|
if (final_imgs_.put(head->width, head->height, head->bits, head->channels, head->line_bytes, buf, head->total_bytes, head->statu
|
||||||
, final_path_.c_str(), "final", "dat", final_img_index_, id))
|
, final_path_.c_str(), "final", "dat", final_img_index_, id))
|
||||||
return SCANNER_ERR_OK;
|
return SCANNER_ERR_OK;
|
||||||
else
|
else
|
||||||
|
@ -3972,14 +3972,18 @@ int hg_scanner::start(void)
|
||||||
|
|
||||||
return status_;
|
return status_;
|
||||||
}
|
}
|
||||||
int hg_scanner::get_image_info(SANE_Parameters* ii)
|
int hg_scanner::get_image_info(SANE_Parameters* ii, int len)
|
||||||
{
|
{
|
||||||
int ret = SCANNER_ERR_OK;
|
int ret = SCANNER_ERR_OK;
|
||||||
IMH imh;
|
IMH imh;
|
||||||
|
SANE_Image* iiex = len == sizeof(SANE_Image) ? (SANE_Image*)ii : nullptr;
|
||||||
|
|
||||||
fetching_id_ = -1;
|
fetching_id_ = -1;
|
||||||
bzero(&imh, sizeof(imh));
|
memset(&imh, 0, sizeof(imh));
|
||||||
bzero(ii, sizeof(*ii));
|
memset(ii, 0, len);
|
||||||
|
if (iiex)
|
||||||
|
ii = &iiex->header;
|
||||||
|
|
||||||
while ((!wait_img_.is_waiting() || !wait_usb_.is_waiting()) && final_imgs_.size() <= 0)
|
while ((!wait_img_.is_waiting() || !wait_usb_.is_waiting()) && final_imgs_.size() <= 0)
|
||||||
this_thread::sleep_for(chrono::milliseconds(10));
|
this_thread::sleep_for(chrono::milliseconds(10));
|
||||||
|
|
||||||
|
@ -3993,6 +3997,13 @@ int hg_scanner::get_image_info(SANE_Parameters* ii)
|
||||||
{
|
{
|
||||||
copy_to_sane_image_header(ii, imh.width, imh.height, imh.line_bytes, imh.channels, imh.bits);
|
copy_to_sane_image_header(ii, imh.width, imh.height, imh.line_bytes, imh.channels, imh.bits);
|
||||||
fetching_id_ = imh.src_id;
|
fetching_id_ = imh.src_id;
|
||||||
|
if (iiex)
|
||||||
|
{
|
||||||
|
iiex->src_id = imh.src_id;
|
||||||
|
iiex->flag.statu = imh.statu;
|
||||||
|
iiex->flag.dpi = resolution_;
|
||||||
|
iiex->bytes = imh.bytes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4016,6 +4027,13 @@ int hg_scanner::get_image_info(SANE_Parameters* ii)
|
||||||
else
|
else
|
||||||
imh.bits = 8;
|
imh.bits = 8;
|
||||||
|
|
||||||
|
if (iiex)
|
||||||
|
{
|
||||||
|
iiex->src_id = -1;
|
||||||
|
iiex->flag.statu = SANE_Image_Statu_OK;
|
||||||
|
iiex->flag.dpi = resolution_;
|
||||||
|
}
|
||||||
|
|
||||||
ret = SCANNER_ERR_OK;
|
ret = SCANNER_ERR_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -475,7 +475,7 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual int start(void);
|
virtual int start(void);
|
||||||
virtual int get_image_info(SANE_Parameters* ii);
|
virtual int get_image_info(SANE_Parameters* ii, int len);
|
||||||
virtual int read_image_data(unsigned char* buf, int* len);
|
virtual int read_image_data(unsigned char* buf, int* len);
|
||||||
virtual int stop(void);
|
virtual int stop(void);
|
||||||
virtual int reset(void);
|
virtual int reset(void);
|
||||||
|
|
|
@ -407,14 +407,14 @@ void hg_scanner_mgr::on_hgscanner_pnp(usb_event ev, libusb_device* device, int v
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for (; i < online_devices_.size(); ++i)
|
for (; i < online_devices_.size(); ++i)
|
||||||
{
|
{
|
||||||
if (online_devices_[i].dev == device) // 濮濄倕顦╅崑鍥х暰閸氬奔绔撮崣鎷岊啎婢跺洭鍣搁弬鎷岀箾閹恒儱鎮楅敍宀冾啎婢跺洤顕挒鈾€鈧竸evice閳ユ繀绻氶幐浣风瑝閸欐﹫绱辨俊鍌涚亯閸嬪洩顔曟稉宥嗗灇缁斿绱濇导姘嚤閼风顔曟径鍥櫢鏉╃偞绉烽幁顖欑瑝閼宠姤顒滅敮鍛婂复閺€璁圭礉缂佹垵鐣鹃崚鎷岊嚉鐠佹儳顦惃鍓哻anner鐎电钖勫妞剧瑝閸掍即鍣撮弨?
|
if (online_devices_[i].dev == device) // 濮濄倕顦╅崑é<EFBFBD>¥Ñ…暰閸氬奔绔撮崣鎷岊啎婢跺æ´é<EFBFBD>£æ<EFBFBD><EFBFBD>弬鎷岀箾閹æ<EFBFBD>’儱鎮楅æ•<EFBFBD>宀冾啎婢跺洤顕挒鈾€鈧î„<EFBFBD>竸evice閳ユ繀绻氶å¹<EFBFBD>浣风ç‘<EFBFBD>é–¸æ¬<EFBFBD>﹫绱辨俊é<EFBFBD>Œæ¶šäº¯é–¸å¬ªæ´©é¡”曟稉宥嗗ç<EFBFBD>‡ç¼<EFBFBD>斿绱濇导姘嚤閼风î—<EFBFBD>顔曟径é<EFBFBD>¥î„€æ«¢é<EFBFBD>‰â•ƒå<EFBFBD>žç»‰çƒ½å¹<EFBFBD>顖欑ç‘<EFBFBD>é–¼å® å§¤é¡’æ»…æ•®é<EFBFBD>›å©‚å¤<EFBFBD>閺€ç’<EFBFBD>åœç¤‰ç¼‚佹垵é<EFBFBD>£é¹ƒå´šéŽ·å²Šåš‰é<EFBFBD> 佹儳顦惃é<EFBFBD>“å“»anneré<EFBFBD>Žç”µî”Šé’–勫妞剧ç‘<EFBFBD>é–¸æŽ<EFBFBD>å<EFBFBD>³é<EFBFBD>£æ’®å¼?
|
||||||
{
|
{
|
||||||
online_devices_[i].ind = index;
|
online_devices_[i].ind = index;
|
||||||
add = false;
|
add = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (add) // 婢跺嫮鎮婄€电钖勯垾娓別vice閳ユ繃鏁奸崣妯兼畱閹懏娅?
|
if (add) // 婢跺嫮鎮婄€电钖勯垾娓別vice閳ユ繃é<EFBFBD><EFBFBD>奸崣妯兼畱閹æ‡<EFBFBD>å¨?
|
||||||
{
|
{
|
||||||
i = 0;
|
i = 0;
|
||||||
for (auto& v : online_devices_)
|
for (auto& v : online_devices_)
|
||||||
|
@ -1060,7 +1060,7 @@ scanner_err hg_scanner_mgr::hg_scanner_stop(scanner_handle h)
|
||||||
}
|
}
|
||||||
scanner_err hg_scanner_mgr::hg_scanner_get_img_info(scanner_handle h, SANE_Parameters* bmi, long len)
|
scanner_err hg_scanner_mgr::hg_scanner_get_img_info(scanner_handle h, SANE_Parameters* bmi, long len)
|
||||||
{
|
{
|
||||||
return (scanner_err)SCAN_PTR(h)->get_image_info(bmi);
|
return (scanner_err)SCAN_PTR(h)->get_image_info(bmi, (int)len);
|
||||||
}
|
}
|
||||||
scanner_err hg_scanner_mgr::hg_scanner_read_img_data(scanner_handle h, unsigned char* data, long* len)
|
scanner_err hg_scanner_mgr::hg_scanner_read_img_data(scanner_handle h, unsigned char* data, long* len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,7 @@ extern SANE_Status inner_sane_io_control(SANE_Handle h, unsigned long code, void
|
||||||
extern const char* inner_sane_err_desc(SANE_Status err);
|
extern const char* inner_sane_err_desc(SANE_Status err);
|
||||||
extern SANE_Status inner_sane_read_ext(SANE_Img_Ext_Info* ext_info, SANE_Int* len);
|
extern SANE_Status inner_sane_read_ext(SANE_Img_Ext_Info* ext_info, SANE_Int* len);
|
||||||
extern SANE_Status inner_sane_ex_get_driver_version(SANE_Int* hh, SANE_Int* hl, SANE_Int* lh, SANE_Int* ll);
|
extern SANE_Status inner_sane_ex_get_driver_version(SANE_Int* hh, SANE_Int* hl, SANE_Int* lh, SANE_Int* ll);
|
||||||
|
extern SANE_Status inner_sane_get_parameters_ex(SANE_Handle h, SANE_Image* info);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 导出接口
|
/// 导出接口
|
||||||
|
@ -115,6 +116,10 @@ SANE_Status sane_read_ext_info(SANE_Img_Ext_Info* ext_info, SANE_Int* len)
|
||||||
{
|
{
|
||||||
return inner_sane_read_ext(ext_info, len);
|
return inner_sane_read_ext(ext_info, len);
|
||||||
}
|
}
|
||||||
|
SANE_Status sane_get_parameters_ex(SANE_Handle h, SANE_Image* info)
|
||||||
|
{
|
||||||
|
return inner_sane_get_parameters_ex(h, info);
|
||||||
|
}
|
||||||
int sane_ex_get_driver_version(int* hh, int* hl, int* lh, int* ll)
|
int sane_ex_get_driver_version(int* hh, int* hl, int* lh, int* ll)
|
||||||
{
|
{
|
||||||
return inner_sane_ex_get_driver_version(hh, hl, lh, ll);
|
return inner_sane_ex_get_driver_version(hh, hl, lh, ll);
|
||||||
|
|
|
@ -1669,6 +1669,18 @@ SANE_Status hg_sane_middleware::get_image_parameters(SANE_Handle handle, SANE_Pa
|
||||||
|
|
||||||
return local_utility::scanner_err_2_sane_statu(err);
|
return local_utility::scanner_err_2_sane_statu(err);
|
||||||
}
|
}
|
||||||
|
SANE_Status hg_sane_middleware::get_image_parameters_ex(SANE_Handle handle, SANE_Image* params)
|
||||||
|
{
|
||||||
|
scanner_handle h = find_openning_device(handle);
|
||||||
|
scanner_err err = SCANNER_ERR_NOT_START;
|
||||||
|
|
||||||
|
if (!params)
|
||||||
|
return SANE_STATUS_INVAL;
|
||||||
|
|
||||||
|
err = hg_scanner_get_img_info(h, (SANE_Parameters*)params, sizeof(*params));
|
||||||
|
|
||||||
|
return local_utility::scanner_err_2_sane_statu(err);
|
||||||
|
}
|
||||||
SANE_Status hg_sane_middleware::start(SANE_Handle h, void* async_event)
|
SANE_Status hg_sane_middleware::start(SANE_Handle h, void* async_event)
|
||||||
{
|
{
|
||||||
LPDEVINST dev;
|
LPDEVINST dev;
|
||||||
|
@ -2643,6 +2655,10 @@ extern "C" { // avoid compiler exporting name in C++ style !!!
|
||||||
|
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
}
|
}
|
||||||
|
SANE_Status inner_sane_get_parameters_ex(SANE_Handle h, SANE_Image* info)
|
||||||
|
{
|
||||||
|
return hg_sane_middleware::instance()->get_image_parameters_ex(h, info);
|
||||||
|
}
|
||||||
|
|
||||||
void sanei_debug_msg(int level, int max_level, const char* be, const char* fmt, va_list ap)
|
void sanei_debug_msg(int level, int max_level, const char* be, const char* fmt, va_list ap)
|
||||||
{
|
{
|
||||||
|
|
|
@ -223,6 +223,7 @@ public:
|
||||||
SANE_Status open_device(SANE_String_Const devicename, SANE_Handle* handle);
|
SANE_Status open_device(SANE_String_Const devicename, SANE_Handle* handle);
|
||||||
SANE_Status close_device(SANE_Handle h);
|
SANE_Status close_device(SANE_Handle h);
|
||||||
SANE_Status get_image_parameters(SANE_Handle handle, SANE_Parameters* params);
|
SANE_Status get_image_parameters(SANE_Handle handle, SANE_Parameters* params);
|
||||||
|
SANE_Status get_image_parameters_ex(SANE_Handle handle, SANE_Image* params);
|
||||||
SANE_Status start(SANE_Handle h, void* async_event);
|
SANE_Status start(SANE_Handle h, void* async_event);
|
||||||
SANE_Status read(SANE_Handle h, void* buf, int* bytes);
|
SANE_Status read(SANE_Handle h, void* buf, int* bytes);
|
||||||
SANE_Status stop(SANE_Handle h);
|
SANE_Status stop(SANE_Handle h);
|
||||||
|
|
Loading…
Reference in New Issue