From eec4604ee3f5c5903f900dcfb70b15afb33f0f8c Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Thu, 11 May 2023 17:19:00 +0800 Subject: [PATCH] change image process thread pool --- device/gxx-linux/scanner/imageusbhandler.cpp | 14 +- device/gxx-linux/scanner/scanner.cpp | 32 +- .../async_model/img_process/cis_preproc.cpp | 26 +- .../src/async_model/img_process/cis_preproc.h | 51 ++- .../async_model/img_process/img_process.cpp | 151 +++++---- .../src/async_model/img_process/img_process.h | 14 +- .../usb/src/async_model/io/sent_img.cpp | 20 +- .../usb/src/async_model/io/sent_img.h | 4 +- .../usb/src/async_model/io/usb_io.cpp | 2 +- .../src/async_model/scanner/async_scanner.cpp | 295 +----------------- device/gxx-linux/usb/usbimageprocqueue.h | 28 +- .../sln/usb_tools/Debug/usb_tools.exe | Bin 1835008 -> 1835008 bytes pc/code_twain/sln/usb_tools/DlgScanner.cpp | 124 +++++++- 13 files changed, 341 insertions(+), 420 deletions(-) diff --git a/device/gxx-linux/scanner/imageusbhandler.cpp b/device/gxx-linux/scanner/imageusbhandler.cpp index d403423..42cf968 100644 --- a/device/gxx-linux/scanner/imageusbhandler.cpp +++ b/device/gxx-linux/scanner/imageusbhandler.cpp @@ -17,7 +17,7 @@ static const std::string loggername = "imageusbhandler"; ImageUsbHandler::ImageUsbHandler(std::shared_ptr images) - : pool(1), encodepools(6),pushpool(1) + : pool(1), encodepools(/*6*/1),pushpool(1) { LOG_INIT(); this->images = images; @@ -37,13 +37,13 @@ static int num = 0; void ImageUsbHandler::add_image(void *data, int width, int height, int type, int scannnum,unsigned int fpgaversion) { printf("ImageUsbHandler::add_image %d(%d * %d), fpgaversion = %d, HRatio = %f, VRatio = %f\n", scannnum, width, height, fpgaversion, H_ratio, V_ratio); - + +#ifdef ASYNC_EP if(images->push_raw(data, width, height, type == CV_8UC1 ? COLOR_CHANNEL_GRAY : COLOR_CHANNEL_RGB, scannnum, fpgaversion, 0)) { return; } - - images->push(nullptr, false); // notify ONE paper passed +#endif std::string ext = ".jpg"; { @@ -129,6 +129,10 @@ void ImageUsbHandler::add_image(void *data, int width, int height, int type, int // if((H_ratio != 1.0f) || (V_ratio != 1.0f)) // cv::resize(saveMat,saveMat,cv::Size(),H_ratio,V_ratio); + + // test sequence ... + // if(scannnum % 1) std::this_thread::sleep_for(std::chrono::milliseconds(500)); + encode_data.Put(saveMat); encodeimgs.push(encodepools.enqueue([this,width,height,type]() -> std::vector @@ -293,7 +297,9 @@ void ImageUsbHandler::Set_ratio(u32 h_ratio,u32 v_ratio) bool ImageUsbHandler::done() { +#ifdef ASYNC_EP return images->is_image_processing_over(); +#endif std::lock_guard guard(mtx); if(results.size() >= 1){ diff --git a/device/gxx-linux/scanner/scanner.cpp b/device/gxx-linux/scanner/scanner.cpp index 4ef7136..8036a1d 100644 --- a/device/gxx-linux/scanner/scanner.cpp +++ b/device/gxx-linux/scanner/scanner.cpp @@ -90,7 +90,7 @@ Scanner::Scanner(std::shared_ptr capturer, std::shared_ptr capturer, std::shared_ptradd_scanevent(errType); + if (isopen) { LOG_TRACE("cover opened \n"); - HGIntInfo errType = {.From = MtBoard, .Code = 4}; - if (imagehandler.get()) - imagehandler->add_scanevent(errType); done_scan = 1; } else @@ -574,9 +575,10 @@ void Scanner::runScan() else autosizescan(); savescannerinfo(scannerinfo); - imagehandler->add_scanevent({.From = STOPSCAN, mb_error_code}); + imagehandler->add_scanevent({.From = STOPSCAN, .Code = mb_error_code}); while (!imagehandler->done()) this_thread::sleep_for(chrono::milliseconds(10)); + printf("\nscan finished.\n"); done_scan = 0; if (wake.get()) @@ -699,20 +701,20 @@ bool Scanner::pickpaper() while (imagehandler->is_limit()) std::this_thread::sleep_for(std::chrono::milliseconds(10)); } - // unsigned int reg2v; - // mb->read(0x02, reg2v); - // if (reg2v & 0x00010000) - // { //有纸 + unsigned int reg2v; + mb->read(0x02, reg2v); + if (reg2v & 0x00010000) + { //有纸 printf("\n+++++++++pick paper "); mb->pick_paper(); startcapimage(true); return true; - // } - // else - // { - // printf("\n+++++++++pick paper no paper"); - // return false; - // } + } + else + { + printf("\n+++++++++pick paper no paper"); + return false; + } } void Scanner::set_motorboardcallback(MotorBoardGlue glue) diff --git a/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.cpp b/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.cpp index 90e0ef4..0f73f03 100644 --- a/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.cpp +++ b/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.cpp @@ -7,7 +7,7 @@ // configuration text // -static std::string g_cis_cfg("{\"montage\":{\"cat\":\"cis\",\"group\":\"CIS\",\"title\":\"\\u56fe\\u50cf\\u62fc\\u63a5\",\"desc\":\"\\u5c06CIS\\u91c7\\u96c6\\u7684\\u539f\\u59cb\\u6570\\u636e\\u6062\\u590d\\u4e3a\\u6b63\\u5e38\\u7684\\u56fe\\u50cf\",\"ver\":1,\"pos\":10,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"cis-color-correct\":{\"cat\":\"CIS\",\"group\":\"CIS\",\"title\":\"\\u5149\\u5b66\\u989c\\u8272\\u6821\\u6b63\",\"desc\":\"\\u5bf9CIS\\u7684\\u539f\\u56fe\\u989c\\u8272\\u8fdb\\u884c\\u6821\\u6b63\",\"ver\":1,\"pos\":20,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"reinstate\":{\"cat\":\"CIS\",\"group\":\"CIS\",\"title\":\"\\u786c\\u4ef6\\u590d\\u539f\",\"desc\":\"\\u6d88\\u9664CIS\\u786c\\u4ef6\\u62c9\\u4f38\\u56e0\\u7d20\\uff0c\\u6062\\u590d\\u56fe\\u7247\\u521d\\u59cb\\u72b6\\u6001\",\"ver\":1,\"pos\":30,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"fb-split\":{\"cat\":\"CIS\",\"group\":\"CIS\",\"title\":\"\\u62c6\\u5206\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u5c06\\u6b63\\u53cd\\u9762\\u5408\\u6210\\u7684\\u4e00\\u5f20\\u56fe\\u7247\\u62c6\\u5206\\u6210\\u6b63\\u9762\\u548c\\u53cd\\u9762\\u56fe\\u7247\",\"ver\":1,\"pos\":40,\"type\":\"bool\",\"unit\":\"none\",\"affect\":2,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"page\":{\"cat\":\"CIS\",\"group\":\"base\",\"title\":\"\\u9875\\u9762\",\"desc\":\"\\u83b7\\u53d6\\u7eb8\\u5f20\\u6307\\u5b9a\\u9762\\u7684\\u56fe\\u7247\",\"ver\":1,\"pos\":50,\"type\":\"string\",\"unit\":\"none\",\"affect\":2,\"readonly\":false,\"visible\":true,\"enabled\":true,\"size\":30,\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"range\":[\"\\u6b63\\u9762\",\"\\u80cc\\u9762\",\"\\u53cc\\u9762\"],\"depend_or\":[\"fb-split==true\"]},\"is-exchange\":{\"cat\":\"CIS\",\"group\":\"base\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"ver\":1,\"pos\":60,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":true,\"enabled\":true,\"size\":4,\"cur\":false,\"default\":false,\"depend_and\":[\"fb-split==true\",\"page==\\u53cc\\u9762\"]}}"); +static std::string g_cis_cfg("{\"montage\":{\"cat\":\"cis\",\"group\":\"CIS\",\"title\":\"\\u56fe\\u50cf\\u62fc\\u63a5\",\"desc\":\"\\u5c06CIS\\u91c7\\u96c6\\u7684\\u539f\\u59cb\\u6570\\u636e\\u6062\\u590d\\u4e3a\\u6b63\\u5e38\\u7684\\u56fe\\u50cf\",\"ver\":1,\"pos\":10,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"cis-color-correct\":{\"cat\":\"CIS\",\"group\":\"CIS\",\"title\":\"\\u5149\\u5b66\\u989c\\u8272\\u6821\\u6b63\",\"desc\":\"\\u5bf9CIS\\u7684\\u539f\\u56fe\\u989c\\u8272\\u8fdb\\u884c\\u6821\\u6b63\",\"ver\":1,\"pos\":20,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"reinstate\":{\"cat\":\"CIS\",\"group\":\"CIS\",\"title\":\"\\u786c\\u4ef6\\u590d\\u539f\",\"desc\":\"\\u6d88\\u9664CIS\\u786c\\u4ef6\\u62c9\\u4f38\\u56e0\\u7d20\\uff0c\\u6062\\u590d\\u56fe\\u7247\\u521d\\u59cb\\u72b6\\u6001\",\"ver\":1,\"pos\":30,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"fb-split\":{\"cat\":\"CIS\",\"group\":\"CIS\",\"title\":\"\\u62c6\\u5206\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u5c06\\u6b63\\u53cd\\u9762\\u5408\\u6210\\u7684\\u4e00\\u5f20\\u56fe\\u7247\\u62c6\\u5206\\u6210\\u6b63\\u9762\\u548c\\u53cd\\u9762\\u56fe\\u7247\",\"ver\":1,\"pos\":40,\"type\":\"bool\",\"unit\":\"none\",\"affect\":2,\"readonly\":false,\"visible\":false,\"enabled\":true,\"size\":4,\"cur\":true,\"default\":true},\"page\":{\"cat\":\"CIS\",\"group\":\"base\",\"title\":\"\\u9875\\u9762\",\"desc\":\"\\u83b7\\u53d6\\u7eb8\\u5f20\\u6307\\u5b9a\\u9762\\u7684\\u56fe\\u7247\",\"ver\":1,\"pos\":50,\"type\":\"string\",\"unit\":\"none\",\"affect\":2,\"readonly\":false,\"visible\":true,\"enabled\":true,\"size\":30,\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"range\":[\"\\u6b63\\u9762\",\"\\u80cc\\u9762\",\"\\u53cc\\u9762\"],\"depend_or\":[\"fb-split==true\"]},\"is-exchange\":{\"cat\":\"CIS\",\"group\":\"base\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"ver\":1,\"pos\":60,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":true,\"enabled\":true,\"size\":4,\"cur\":false,\"default\":false,\"depend_and\":[\"fb-split==true\",\"page==\\u53cc\\u9762\"]},\"is-rotate-bkg-180\":{\"cat\":\"CIS\",\"group\":\"base\",\"title\":\"\\u80cc\\u9762\\u65cb\\u8f6c180\\u00b0\",\"desc\":\"\\u80cc\\u9762\\u626b\\u63cf\\u7684\\u56fe\\u50cf\\u65cb\\u8f6c180\\u00b0\",\"ver\":1,\"pos\":70,\"type\":\"bool\",\"unit\":\"none\",\"affect\":0,\"readonly\":false,\"visible\":true,\"enabled\":true,\"size\":4,\"cur\":false,\"default\":false,\"depend_and\":[\"fb-split==true\",\"page!=\\u6b63\\u9762\"]}}"); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -106,7 +106,7 @@ cis_pre_do::cis_pre_do(std::function montage , std::function split) : montage_(montage), split_(split) , cfg_(g_cis_cfg), is_montage_(true), is_split_(true), page_(PAGE_DUPLEX), cis_dpi_(200) - , reinstate_(true), photo_mode_(false), is_correct_(true), is_exchg_(false) + , reinstate_(true), photo_mode_(false), is_correct_(true), is_exchg_(false), is_bkg_rot_180_(false) { if (!montage_) montage_ = cis_montager; @@ -186,6 +186,15 @@ void cis_pre_do::init_value(void) is_exchg_ = false; child->release(); } + if (jsn->get_value("is-rotate-bkg-180", child) && child) + { + bool enable = false; + child->get_value("enabled", enable); + if (!child->get_value("cur", is_bkg_rot_180_)) + is_bkg_rot_180_ = false; + is_bkg_rot_180_ &= enable; + child->release(); + } jsn->release(); } } @@ -313,7 +322,7 @@ img_one_paper* cis_pre_do::execute(img_one_paper* img) { for(auto& v: img->images_queue()) { - correctColor(v.img, v.head.resolution_x, v.img.channels() == 3 ? 1 : 0, !photo_mode_); + correctColor(v.img, v.head.resolution_x, v.img.channels() == 3 ? 1 : 0, !photo_mode_); } } @@ -345,6 +354,17 @@ img_one_paper* cis_pre_do::execute(img_one_paper* img) } } } + if(!is_bkg_rot_180_) + { + for(auto& v: img->images_queue()) + { + if(v.head.pos.paper_side == PAPER_SIDE_BACK) + { + cv::flip(v.img, v.img, 0); + cv::flip(v.img, v.img, 1); + } + } + } } return img; diff --git a/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.h b/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.h index 0892fa1..8c2c9af 100644 --- a/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.h +++ b/device/gxx-linux/usb/src/async_model/img_process/cis_preproc.h @@ -14,8 +14,8 @@ class gb_json; // "montage": { // "cat": "cis", // "group": "CIS", -// "title": "图像拼接", -// "desc": "将CIS采集的原始数据恢复为正常的图像", +// "title": "\u56fe\u50cf\u62fc\u63a5", +// "desc": "\u5c06CIS\u91c7\u96c6\u7684\u539f\u59cb\u6570\u636e\u6062\u590d\u4e3a\u6b63\u5e38\u7684\u56fe\u50cf", // "ver": 1, // "pos": 10, // "type": "bool", @@ -31,8 +31,8 @@ class gb_json; // "cis-color-correct": { // "cat": "CIS", // "group": "CIS", -// "title": "光学颜色校正", -// "desc": "对CIS的原图颜色进行校正", +// "title": "\u5149\u5b66\u989c\u8272\u6821\u6b63", +// "desc": "\u5bf9CIS\u7684\u539f\u56fe\u989c\u8272\u8fdb\u884c\u6821\u6b63", // "ver": 1, // "pos": 20, // "type": "bool", @@ -48,8 +48,8 @@ class gb_json; // "reinstate": { // "cat": "CIS", // "group": "CIS", -// "title": "硬件复原", -// "desc": "消除CIS硬件拉伸因素,恢复图片初始状态", +// "title": "\u786c\u4ef6\u590d\u539f", +// "desc": "\u6d88\u9664CIS\u786c\u4ef6\u62c9\u4f38\u56e0\u7d20\uff0c\u6062\u590d\u56fe\u7247\u521d\u59cb\u72b6\u6001", // "ver": 1, // "pos": 30, // "type": "bool", @@ -65,8 +65,8 @@ class gb_json; // "fb-split": { // "cat": "CIS", // "group": "CIS", -// "title": "拆分正反面", -// "desc": "将正反面合成的一张图片拆分成正面和反面图片", +// "title": "\u62c6\u5206\u6b63\u53cd\u9762", +// "desc": "\u5c06\u6b63\u53cd\u9762\u5408\u6210\u7684\u4e00\u5f20\u56fe\u7247\u62c6\u5206\u6210\u6b63\u9762\u548c\u53cd\u9762\u56fe\u7247", // "ver": 1, // "pos": 40, // "type": "bool", @@ -82,8 +82,8 @@ class gb_json; // "page": { // "cat": "CIS", // "group": "base", -// "title": "页面", -// "desc": "获取纸张指定面的图片", +// "title": "\u9875\u9762", +// "desc": "\u83b7\u53d6\u7eb8\u5f20\u6307\u5b9a\u9762\u7684\u56fe\u7247", // "ver": 1, // "pos": 50, // "type": "string", @@ -93,16 +93,16 @@ class gb_json; // "visible": true, // "enabled": true, // "size": 30, -// "cur": "双面", -// "default": "双面", -// "range": ["正面", "背面", "双面"], +// "cur": "\u53cc\u9762", +// "default": "\u53cc\u9762", +// "range": ["\u6b63\u9762", "\u80cc\u9762", "\u53cc\u9762"], // "depend_or": ["fb-split==true"] // }, // "is-exchange": { // "cat": "CIS", // "group": "base", -// "title": "交换正反面", -// "desc": "交换每张文稿的正反面出图顺序", +// "title": "\u4ea4\u6362\u6b63\u53cd\u9762", +// "desc": "\u4ea4\u6362\u6bcf\u5f20\u6587\u7a3f\u7684\u6b63\u53cd\u9762\u51fa\u56fe\u987a\u5e8f", // "ver": 1, // "pos": 60, // "type": "bool", @@ -114,7 +114,25 @@ class gb_json; // "size": 4, // "cur": false, // "default": false, -// "depend_and": ["fb-split==true", "page==双面"] +// "depend_and": ["fb-split==true", "page==\u53cc\u9762"] +// }, +// "is-rotate-bkg-180": { +// "cat": "CIS", +// "group": "base", +// "title": "\u80cc\u9762\u65cb\u8f6c180\u00b0", +// "desc": "\u80cc\u9762\u626b\u63cf\u7684\u56fe\u50cf\u65cb\u8f6c180\u00b0", +// "ver": 1, +// "pos": 70, +// "type": "bool", +// "unit": "none", +// "affect": 0, +// "readonly": false, +// "visible": true, +// "enabled": true, +// "size": 4, +// "cur": false, +// "default": false, +// "depend_and": ["fb-split==true", "page!=\u6b63\u9762"] // } // } @@ -129,6 +147,7 @@ class cis_pre_do : public sane_cfg_provider bool photo_mode_; bool is_correct_; bool is_exchg_; + bool is_bkg_rot_180_; enum { diff --git a/device/gxx-linux/usb/src/async_model/img_process/img_process.cpp b/device/gxx-linux/usb/src/async_model/img_process/img_process.cpp index 9485dfa..a93bea3 100644 --- a/device/gxx-linux/usb/src/async_model/img_process/img_process.cpp +++ b/device/gxx-linux/usb/src/async_model/img_process/img_process.cpp @@ -22,21 +22,24 @@ extern int32_t (*set_image_process_over)(bool); img_processor::img_processor(std::function img_sender , std::function get_opt) - : img_sender_(img_sender), get_opt_val_(get_opt), speed_first_(true), run_(true) - , scan_staus_(0), busy_cnt_(0) + : img_sender_(img_sender), get_opt_val_(get_opt), run_(true) + , scan_staus_(0), busy_cnt_(0), pool_(6) { cis_pre_ = new cis_pre_do(); encoder_ = new img_encoder(); load_processors(); - worker_ = new thread_pool(this); - worker_->thread_new(&img_processor::worker_thread, true); + // worker_ = new thread_pool(this); + // worker_->thread_new(&img_processor::worker_thread, true); + // worker_->thread_new(&img_processor::worker_thread, false); + // worker_->thread_new(&img_processor::worker_thread, false); + // worker_->thread_new(&img_processor::worker_thread, false); } img_processor::~img_processor() { stop(); - worker_->thread_stop(); - worker_->release(); + // worker_->thread_stop(); + // worker_->release(); cis_pre_->release(); encoder_->release(); @@ -185,52 +188,50 @@ uint32_t img_processor::add_busy_count(int adden) } void img_processor::worker_thread(bool first) { - log_cls::log(LOG_LEVEL_ALL, "+img_processor::worker_thread(%p) entered ...\n", sys_util::thread_id(std::this_thread::get_id())); - - while(run_) - { + // while(run_) + // { img_one_paper* img = nullptr; - if(img_que_.take(img, true)) - { - if(img) - { - int paper = img->images_queue()[0].head.pos.paper_ind; - add_busy_count(); - handle_image(img); - add_busy_count(-1); + // if(img_que_.take(img, true)) + // { + // if(img) + // { + // int paper = img->images_queue()[0].head.pos.paper_ind; + // handle_image(img); - // img->release(); // release in 'handle_image' - } - else - { - while(add_busy_count(0)) - std::this_thread::sleep_for(std::chrono::milliseconds(50)); + // // img->release(); // release in 'handle_image' + // } + // else + // { + // while(add_busy_count(0)) + // std::this_thread::sleep_for(std::chrono::milliseconds(50)); - img_sender_(nullptr, nullptr, nullptr, scan_staus_); - set_image_process_over(true); + // img_sender_(nullptr, nullptr, nullptr, scan_staus_); + // set_image_process_over(true); - for(auto& v: tids_) - img_que_.quit(); - img_que_.quit(); - } - } - else if(first) - { - for(auto& v: tids_) - worker_->thread_stop(v); - tids_.clear(); - } - else - { - break; - } - } + // // for(auto& v: tids_) + // // img_que_.quit(); + // // img_que_.quit(); + // } + // } + // else if(first) + // { + // for(auto& v: tids_) + // worker_->thread_stop(v); + // tids_.clear(); + // } + // else + // { + // break; + // } + // } log_cls::log(LOG_LEVEL_ALL, "-img_processor::worker_thread(%p) exited.\n", sys_util::thread_id(std::this_thread::get_id())); } void img_processor::handle_image(img_one_paper* img) { img_one_paper* doing = nullptr; + add_busy_count(); + // img->add_ref(); // release it right now // CIS pre-do ... @@ -255,6 +256,7 @@ void img_processor::handle_image(img_one_paper* img) img_sender_(&v.head, imgf, v.info.c_str(), v.info.length()); } img->release(); + add_busy_count(-1); } int32_t img_processor::get_config(void* buf, size_t* len, const char* cfg_name, std::string* strval) @@ -373,22 +375,43 @@ int32_t img_processor::push_image(img_one_paper* img, bool over) { if(run_) { - if(over) - { - scan_staus_ = (uint32_t)(uint64_t)img; - img_que_.save(nullptr, true); - } - else - { + // if(over) + // { + // scan_staus_ = (uint32_t)(uint64_t)img; + // img_que_.save(nullptr, true); + // } + // else + // { + // img->add_ref(); + + // size_t cnt = img_que_.save(img, true); + + // // if(speed_first_ && cnt >= 4 && worker_->count() < 4) + // // { + // // tids_.push_back(worker_->thread_new(&img_processor::worker_thread, false)); + // // } + // } + if(!over) img->add_ref(); - size_t cnt = img_que_.save(img, true); + results_.emplace( + pool_.enqueue([this, img, over] + { + if(over) + { + scan_staus_ = (size_t)(uint64_t)img; + while(add_busy_count(0)) + std::this_thread::sleep_for(std::chrono::milliseconds(50)); - if(speed_first_ && cnt >= 4 && worker_->count() < 2) - { - tids_.push_back(worker_->thread_new(&img_processor::worker_thread, false)); - } - } + img_sender_(nullptr, nullptr, nullptr, scan_staus_); + set_image_process_over(true); + } + else + { + handle_image(img); + } + } + )); } return 0; @@ -396,18 +419,28 @@ int32_t img_processor::push_image(img_one_paper* img, bool over) int32_t img_processor::stop(void) { run_ = false; - for(size_t i = 0; i < worker_->count(); ++i) - img_que_.quit(); + // for(size_t i = 0; i < worker_->count(); ++i) + // img_que_.quit(); + + int wait = 0; + while(add_busy_count(0) && wait++ < 100) + std::this_thread::sleep_for(std::chrono::milliseconds(5)); + clear(); return 0; } int32_t img_processor::set_speed_first(bool first) { - speed_first_ = first; + // speed_first_ = first; return 0; } int32_t img_processor::que_size(void) { - return img_que_.size(); + return add_busy_count(0); } +void img_processor::clear(void) +{ + while (results_.size() > 0) + results_.pop(); +} \ No newline at end of file diff --git a/device/gxx-linux/usb/src/async_model/img_process/img_process.h b/device/gxx-linux/usb/src/async_model/img_process/img_process.h index e135a6c..3c24845 100644 --- a/device/gxx-linux/usb/src/async_model/img_process/img_process.h +++ b/device/gxx-linux/usb/src/async_model/img_process/img_process.h @@ -13,6 +13,7 @@ #include #include #include "imemory.h" +#include "ThreadPool.h" #define IMG_SENDER_PROTO void(LPPACKIMAGE /*image head, nullptr for scan over*/, MemoryPtr /*image data, nullptr for scan over*/, const void* /*image info*/, size_t/*image info bytes, scanner status for scan over*/) @@ -32,10 +33,14 @@ class img_processor : public sane_cfg_provider std::vector cur_proc_; img_encoder* encoder_; - safe_fifo img_que_; - thread_pool* worker_; - std::vector tids_; - volatile bool speed_first_; + // safe_fifo img_que_; + // thread_pool* worker_; + // std::vector tids_; + // volatile bool speed_first_; + + ThreadPool pool_; + std::queue> results_; + volatile bool run_; uint32_t scan_staus_; uint32_t busy_cnt_; @@ -71,5 +76,6 @@ public: int32_t stop(void); int32_t set_speed_first(bool first); // start as many threads as possible if 'first' was true, or down to ONE thread int32_t que_size(void); + void clear(void); }; diff --git a/device/gxx-linux/usb/src/async_model/io/sent_img.cpp b/device/gxx-linux/usb/src/async_model/io/sent_img.cpp index bb2076f..4eaac62 100644 --- a/device/gxx-linux/usb/src/async_model/io/sent_img.cpp +++ b/device/gxx-linux/usb/src/async_model/io/sent_img.cpp @@ -7,8 +7,8 @@ // -image_packet::image_packet(LPPACKIMAGE head, MemoryPtr img, uint32_t scanid, uint32_t sn, const void* info, size_t info_size) - : img_(img), offset_(0), sn_(sn), info_over_(false) +image_packet::image_packet(LPPACKIMAGE head, MemoryPtr img, uint32_t scanid, const void* info, size_t info_size) + : img_(img), offset_(0), info_over_(false) { LPPACK_BASE pack = nullptr; LPPACKIMAGE pimg = nullptr; @@ -31,7 +31,19 @@ image_packet::image_packet(LPPACKIMAGE head, MemoryPtr img, uint32_t scanid, uin head_->set_len(sizeof(PACK_BASE) + sizeof(PACKIMAGE)); info_over_ = info_.empty(); - // log_cls::log(LOG_LEVEL_ALL, "Image-%04u wait to be sent: size = %u\n", sn_, img->size() + info_.length()); + char buf[128] = {0}; + + sprintf(buf, "Image-%04u", head->pos.paper_ind); + pos_str_ = buf; + if(head->pos.paper_side == PAPER_SIDE_FRONT) + pos_str_ += "F_"; + else if(head->pos.paper_side == PAPER_SIDE_BACK) + pos_str_ += "B_"; + else + pos_str_ += "C_"; + pos_str_ += std::to_string(head->pos.split_ind); + + log_cls::log(LOG_LEVEL_ALL, "%s wait to be sent: size = %u\n", pos_str_.c_str(), img->size() + info_.length()); } image_packet::~image_packet() { @@ -39,7 +51,7 @@ image_packet::~image_packet() head_->release(); img_.reset(); - // log_cls::log(LOG_LEVEL_ALL, "Image-%04u sending complete: %u/%u\n", sn_, offset_, size); + log_cls::log(LOG_LEVEL_ALL, "%s sending complete: %u/%u\n", pos_str_.c_str(), offset_, size); } bool image_packet::is_memory_block(void) diff --git a/device/gxx-linux/usb/src/async_model/io/sent_img.h b/device/gxx-linux/usb/src/async_model/io/sent_img.h index c59856b..cfd1c6c 100644 --- a/device/gxx-linux/usb/src/async_model/io/sent_img.h +++ b/device/gxx-linux/usb/src/async_model/io/sent_img.h @@ -12,12 +12,12 @@ class image_packet : public data_source MemoryPtr img_; dyn_mem_ptr head_; uint32_t offset_; - uint32_t sn_; std::string info_; bool info_over_; + std::string pos_str_; public: - image_packet(LPPACKIMAGE head, MemoryPtr img, uint32_t scanid, uint32_t sn, const void* info = nullptr, size_t info_size = 0); + image_packet(LPPACKIMAGE head, MemoryPtr img, uint32_t scanid, const void* info = nullptr, size_t info_size = 0); protected: virtual ~image_packet(); diff --git a/device/gxx-linux/usb/src/async_model/io/usb_io.cpp b/device/gxx-linux/usb/src/async_model/io/usb_io.cpp index 6702a95..dc657ff 100644 --- a/device/gxx-linux/usb/src/async_model/io/usb_io.cpp +++ b/device/gxx-linux/usb/src/async_model/io/usb_io.cpp @@ -410,7 +410,7 @@ int async_usb_gadget::inner_write_bulk(data_source_ptr data, int* err) } buf->release(); off = total; - log_cls::log(LOG_LEVEL_ALL, "Finished in sending large content with %u bytes.\n", total); + // log_cls::log(LOG_LEVEL_ALL, "Finished in sending large content with %u bytes.\n", total); } return off; diff --git a/device/gxx-linux/usb/src/async_model/scanner/async_scanner.cpp b/device/gxx-linux/usb/src/async_model/scanner/async_scanner.cpp index cb4f7aa..f048e92 100644 --- a/device/gxx-linux/usb/src/async_model/scanner/async_scanner.cpp +++ b/device/gxx-linux/usb/src/async_model/scanner/async_scanner.cpp @@ -154,7 +154,7 @@ void async_scanner::push_image(int data_type, void* data, size_t w, size_t h, in { img_one_paper *paper = new img_one_paper(); - paper->init_from(data, w, h, dpi_x, dpi_y, paper_ind, side, clr, status, img_new, img_over); + paper->init_from(data, w, h, dpi_x, dpi_y, paper_ind, side, clr, status, img_new, img_over, ratio_h, ratio_v); img_prc_->push_image(paper); paper->release(); @@ -256,13 +256,7 @@ void async_scanner::init(void) if(head) { - { - LOCKER lock(locker_); - - ind = ++img_cnt_; - } - - imgp = new image_packet(head, img, scan_id_, ind, info, info_size); + imgp = new image_packet(head, img, scan_id_, info, info_size); usb_->write_bulk(imgp); imgp->release(); } @@ -354,6 +348,13 @@ dyn_mem_ptr async_scanner::handle_get_opt_all(LPPACK_BASE pack, uint32_t* used, dyn_mem_ptr reply = nullptr; LPPACK_BASE pk = nullptr; +#ifdef TEMPORARY_API + if(reg_img_cb) + { + reg_img_cb = set_image_receiver(::push_image, this); + } +#endif + *used = base_head_size; { std::string val(""); @@ -548,281 +549,3 @@ uint32_t async_scanner::stop(void) } } -// void async_scanner::save_image(MemoryPtr data, bool img) -// { -// static uint64_t max_mem = 0; - -// if(img) -// { -// uint64_t n = sys_util::get_memory_usage("scan"); -// uint32_t que = 0; -// image_packet *ip = new image_packet(data, ++img_cnt_, scan_id_, n); - -// if(max_mem < n) -// max_mem = n; - -// que = usb_->write_bulk(ip); -// ip->release(); - -// // check has completed ? -// if(scan_over_pack_) -// { -// ctrl_handler(-2, (usb_ctrlrequest*)SR_GET_IMAGEPROCESSDONE, (unsigned char*)&n); -// if(n) -// { -// usb_->write_bulk(scan_over_pack_); -// scan_over_pack_->release(); -// scan_over_pack_ = nullptr; -// } -// } -// } -// else if(data) -// { -// HGIntInfo* info = (HGIntInfo*)data->data(); -// dyn_mem_ptr reply = dyn_mem::memory(sizeof(PACK_BASE)); -// int cmd = /*PACK_CMD_SCAN_FINISHED_ROGER*/0, -// err = 0; - -// if(info->From != HGType::MBEvent || scan_id_ == 0) -// log_cls::log(LOG_LEVEL_ALL, "Scanner event: From = %d, Code = %d, Img_Index = %d\n", info->From, info->Code, info->Img_Index); - -// if(info->From == HGType::MtBoard) -// { -// cmd = PACK_CMD_SCAN_FINISHED_ROGER; -// switch(info->Code) -// { -// case 2: -// err = SCANNER_STATUS_NO_PAPER; -// break; -// case 4: -// err = SCANNER_STATUS_COVER_OPENNED; -// break; -// case 8: -// err = SCANNER_STATUS_FEED_FAILED; -// break; -// case 0x10: -// err = SCANNER_STATUS_PAPER_JAMMED; -// break; -// case 0x20: -// err = SCANNER_STATUS_DOUBLE_FEEDED; -// break; -// case 0x40: -// err = SCANNER_STATUS_STAPLE_ON; -// break; -// case 0x80: -// err = SCANNER_STATUS_PAPER_ASKEW; -// break; -// case 0x20000: -// break; -// } -// } -// else if(info->From == HGType::IMG) -// { -// if(info->Code == 1) -// { -// err = SCANNER_STATUS_DOGEAR; -// cmd = PACK_CMD_SCAN_FINISHED_ROGER; -// } -// else if(info->Code == 2) -// { -// err = SCANNER_STATUS_SIZE_ERR; -// cmd = PACK_CMD_SCAN_FINISHED_ROGER; -// } -// } -// else if(info->From == HGType::V4L2 || info->From == HGType::STOPSCAN) -// { -// cmd = PACK_CMD_SCAN_FINISHED_ROGER; -// } - -// if(scan_id_ == 0 && info->From == HGType::MBEvent) -// { -// BASE_PACKET_REPLY(*((LPPACK_BASE)reply->ptr()), PACK_CMD_STATUS_ROGER, 0, info->Code); -// reply->set_len(sizeof(PACK_BASE)); -// usb_->write_bulk(reply); -// } -// else -// { -// if(err && scan_err_ == 0) -// scan_err_ = err; -// if(scan_id_ && /*cmd == PACK_CMD_SCAN_FINISHED_ROGER*/info->From == HGType::STOPSCAN && scan_over_pack_ == nullptr) -// { -// char ebuf[20] = {0}; - -// err = scan_err_; -// log_cls::log(LOG_LEVEL_ALL, "Scan over with error: %s; Max memory usage: %s\n", log_cls::str_scanner_status((scanner_status)scan_err_, ebuf), sys_util::format_readable_bytes(max_mem).c_str()); -// max_mem = 0; -// BASE_PACKET_REPLY(*((LPPACK_BASE)reply->ptr()), cmd, scan_id_, err); -// reply->set_len(sizeof(PACK_BASE)); -// scan_id_ = 0; - -// // check if the image-proc-queue has completed ... -// // ctrl_handler(-2, (usb_ctrlrequest*)SR_GET_IMAGEPROCESSDONE, (unsigned char*)&err); -// err = 1; -// if(err) -// usb_->write_bulk(reply); -// else -// { -// scan_over_pack_ = reply; -// scan_over_pack_->add_ref(); -// } -// } -// } -// reply->release(); -// } -// else -// { -// // paper count ... -// dyn_mem_ptr reply = dyn_mem::memory(sizeof(PACK_BASE)); -// BASE_PACKET_REPLY(*((LPPACK_BASE)reply->ptr()), PACK_CMD_SCAN_PAPER_ROGER, 0, 0); -// reply->set_len(sizeof(PACK_BASE)); -// usb_->write_bulk(reply); -// reply->release(); -// } -// } - -// int32_t async_scanner::get_config(void* buf, size_t* len, const char* cfg_name, std::string* strval) -// { -// int32_t ret = EINVAL; - -// if(!len) -// return ret; - -// if(cfg_name) -// { -// gb_json *jsn = new gb_json(); -// if(jsn->attach_text(&cfg_text_[0])) -// { -// ret = inner_get_config(jsn, buf, len, cfg_name, strval); -// // gb_json* child = nullptr; - -// // ret = ENOENT; -// // if(jsn->get_value(cfg_name, child) && child) -// // { -// // std::string val(sane_cfg_provider::sane_option_value_get(child, "cur", strval)); -// // child->release(); - -// // if(*len < val.length()) -// // { -// // *len = val.length(); -// // ret = ENOMEM; -// // } -// // else -// // { -// // memcpy(buf, val.c_str(), val.length()); -// // *len = val.length(); -// // } -// // } -// jsn->release(); -// } -// } -// else -// { -// if(*len < cfg_text_.length() + 1) -// { -// *len = cfg_text_.length() + 4; -// ret = ENOMEM; -// } -// else -// { -// strcpy((char*)buf, cfg_text_.c_str()); -// *len = cfg_text_.length(); -// ret = 0; -// } -// } - -// return ret; -// } -// int32_t async_scanner::set_config(const char* cfg_name, void* data, size_t* len, uint32_t* afterdo) -// { -// gb_json *jsn = new gb_json(); -// int32_t ret = EINVAL; - -// if(jsn->attach_text(&cfg_text_[0])) -// { -// gb_json* child = nullptr; - -// ret = ENOENT; -// if(jsn->get_value(cfg_name, child) && child) -// { -// int val = 0; -// child->get_value("affect", val); -// if(afterdo) -// *afterdo = val; - -// if(strcmp(cfg_name, "resolution") == 0) -// { -// child->get_value("cur", val); -// ret = EUCLEAN; -// val = *(int*)data; -// if(val == 100 || val == 150 || val == 200 || val == 300 || val == 600) -// ret = 0; -// else if(val < 125) -// val = 100; -// else if(val < 175) -// val = 150; -// else if(val < 250) -// val = 200; -// else if(val < 450) -// val = 300; -// else -// val = 600; -// *(int*)data = val; -// child->set_value("cur", val); -// dpi_ = val; -// log_cls::log(LOG_LEVEL_ALL, "Set %s to %d\n", cfg_name, dpi_); -// cfg_text_ = jsn->to_string(); -// } -// else if(strcmp(cfg_name, "count") == 0) -// { -// child->get_value("cur", val); -// ret = EUCLEAN; -// val = *(int*)data; -// if(val == -1 || val == 1) -// ret = 0; -// else -// val = -1; -// *(int*)data = val; -// child->set_value("cur", val); -// scan_cnt_ = val; -// log_cls::log(LOG_LEVEL_ALL, "Set %s to %d\n", cfg_name, scan_cnt_); -// cfg_text_ = jsn->to_string(); -// } -// child->release(); -// } -// jsn->release(); -// } - -// return ret; -// } -// void async_scanner::update_enabled(std::function get_opt) -// { -// gb_json *jsn = new gb_json(); -// int32_t ret = EINVAL; - -// if(jsn->attach_text(&cfg_text_[0])) -// { -// sane_cfg_provider::update_option_enable_status(jsn, get_opt); -// cfg_text_ = std::move(jsn->to_string()); -// } - -// jsn->release(); -// } -// int32_t async_scanner::get_value(const char* name, const char* key, std::string& val) -// { -// gb_json* root = new gb_json(), *child = nullptr; -// int32_t ret = ENOENT; - -// if(root->attach_text(&cfg_text_[0])) -// { -// if(root->get_value(name, child) && child) -// { -// if(sane_cfg_provider::raw_value_in_json(child, key, val)) -// ret = 0; -// child->release(); -// } -// } -// root->release(); - -// return ret; -// } - diff --git a/device/gxx-linux/usb/usbimageprocqueue.h b/device/gxx-linux/usb/usbimageprocqueue.h index 1811de8..1f01038 100644 --- a/device/gxx-linux/usb/usbimageprocqueue.h +++ b/device/gxx-linux/usb/usbimageprocqueue.h @@ -13,6 +13,7 @@ class UsbImageProcQueue { + void (*push_image_)(int data_type, void* data, size_t w, size_t h, int dpi_x, int dpi_y, size_t paper_ind, paper_side side, clr_channel clr, img_status status, bool img_new, bool img_over, float ratio_h, float ratio_v, void* param) = nullptr; void(*img_keeper_)(MemoryPtr, bool, void*); void* kp_param_; int scan_status_; @@ -32,6 +33,9 @@ class UsbImageProcQueue case 4: ss = SCANNER_STATUS_COVER_OPENNED; break; + case 5: + ss = SCANNER_STATUS_COVER_CLOSED; + break; case 8: ss = SCANNER_STATUS_FEED_FAILED; break; @@ -62,25 +66,25 @@ public: void push(MemoryPtr image,bool containsimg) { +#ifdef ASYNC_EP if(!containsimg) { - void (*push_image)(int data_type, void* data, size_t w, size_t h, int dpi_x, int dpi_y, size_t paper_ind, paper_side side, clr_channel clr, img_status status, bool img_new, bool img_over, float ratio_h, float ratio_v, void* param) = nullptr; - HGIntInfo* info = (HGIntInfo*)image->data(); + HGIntInfo* info = (HGIntInfo*)image->data(); - *(uint64_t*)&push_image = (uint64_t)img_keeper_; - if(info->From == HGType::STOPSCAN) + if(info->From == HGType::STOPSCAN) { - if(push_image) - push_image(IMG_CB_STOPPED, nullptr, sensor_status_2_scanner_status(info->Code), 0, dpi_x_, dpi_y_, 0, PAPER_SIDE_LEFT, (clr_channel)0, (img_status)0, true, true, ratio_h_, ratio_v_, kp_param_); + if(push_image_) + push_image_(IMG_CB_STOPPED, nullptr, sensor_status_2_scanner_status(info->Code), 0, dpi_x_, dpi_y_, 0, PAPER_SIDE_LEFT, (clr_channel)0, (img_status)0, true, true, ratio_h_, ratio_v_, kp_param_); } else { scan_status_ = sensor_status_2_scanner_status(info->Code); - if(push_image) - push_image(IMG_CB_STATUS, nullptr, sensor_status_2_scanner_status(info->Code), 0, dpi_x_, dpi_y_, 0, PAPER_SIDE_LEFT, (clr_channel)0, (img_status)0, true, true, ratio_h_, ratio_v_, kp_param_); + if(push_image_) + push_image_(IMG_CB_STATUS, nullptr, sensor_status_2_scanner_status(info->Code), 0, dpi_x_, dpi_y_, 0, PAPER_SIDE_LEFT, (clr_channel)0, (img_status)0, true, true, ratio_h_, ratio_v_, kp_param_); } } return; +#endif if(img_keeper_) img_keeper_(image, containsimg, kp_param_); @@ -113,12 +117,9 @@ public: imgp_over_ = false; } - void (*push_image)(int data_type, void* data, size_t w, size_t h, int dpi_x, int dpi_y, size_t paper_ind, paper_side side, clr_channel clr, img_status status, bool img_new, bool img_over, float ratio_h, float ratio_v, void* param) = nullptr; - - *(uint64_t*)&push_image = (uint64_t)img_keeper_; - if(push_image) + if(push_image_) { - push_image(IMG_CB_IMAGE, data, width, height, dpi_x_, dpi_y_, scannnum, PAPER_SIDE_LEFT, (clr_channel)type, (img_status)status, true, true, ratio_h_, ratio_v_, kp_param_); + push_image_(IMG_CB_IMAGE, data, width, height, dpi_x_, dpi_y_, scannnum, PAPER_SIDE_LEFT, (clr_channel)type, (img_status)status, true, true, ratio_h_, ratio_v_, kp_param_); return true; } @@ -131,6 +132,7 @@ public: img_keeper_ = img_keeper; kp_param_ = param; + *(uint64_t*)&push_image_ = (uint64_t)img_keeper_; } void set_dpi(int x, int y) { diff --git a/pc/code_twain/sln/usb_tools/Debug/usb_tools.exe b/pc/code_twain/sln/usb_tools/Debug/usb_tools.exe index 56a911d69a7c2652ecdb5a231c9b4eb1c04a7454..836207b382a9ab3139ba73e2f58a34a3fa6d5142 100644 GIT binary patch delta 99841 zcmaHU2V54%^EbEm@bE}c5EVpJilBlGu{TsCA`zw7W5bHrz#2?A&F>}W)jsIkNnW3c6Ss7Y*5io*My-9sVC|MipHY?+yzot>F2xA!n_UgErYiMzcN zwP)Hu%~x5?a!+L)Q8qKjt5q#Fd82z&vdJ6NQA;unV&|S~7fhaPUIpz>QwUo(LTha6 zrkZ_hwQjasl&0EKTPt(@S^LVoq;l7JicQ|DSygTFGLBcY$ z_JyAoVTomPH*4!GUDUiLX6<)NYxVGXljc)lyE@^bS^KF%0DIC}dtJfbYfKxHP2Pgp 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 CaHl2! delta 85695 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 diff --git a/pc/code_twain/sln/usb_tools/DlgScanner.cpp b/pc/code_twain/sln/usb_tools/DlgScanner.cpp index ee6fcb2..82642a7 100644 --- a/pc/code_twain/sln/usb_tools/DlgScanner.cpp +++ b/pc/code_twain/sln/usb_tools/DlgScanner.cpp @@ -654,6 +654,49 @@ const wchar_t* scanner_status(int s, wchar_t unk[20]) return unk; } +static DWORD thread_open_id_ = 0; +static safe_fifo images_; +static DWORD WINAPI thread_open_image(void* lp) +{ + while (1) + { + std::string file(""); + if (images_.take(file, true)) + { + if (file.empty()) + break; + + ShellExecuteA(NULL, "Open", file.c_str(), NULL, NULL, SW_SHOWNORMAL); + } + } + return 0; + + MSG msg = { 0 }; + BOOL ret = TRUE; + + while ((ret = GetMessage(&msg, NULL, 0, 0))) + { + if ((DWORD)ret == -1) + break; + + if (msg.message == WM_USER + 1001) + break; + + if (msg.message == WM_USER + 1) + { + std::string* file = (std::string*)msg.lParam; + + ShellExecuteA(NULL, "Open", file->c_str(), NULL, NULL, SW_SHOWNORMAL); + delete file; + } + + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return 0; +} + // CDlgScanner 对话框 IMPLEMENT_DYNAMIC(CDlgScanner, CDialogEx) @@ -668,13 +711,37 @@ CDlgScanner::CDlgScanner(CWnd* pParent /*=nullptr*/) threads_ = new thread_pool(this); parent_ = pParent ? pParent->m_hWnd : NULL; auto_wait_ = CreateEvent(NULL, TRUE, FALSE, NULL); + + HANDLE h = CreateThread(NULL, 0, thread_open_image, NULL, 0, &thread_open_id_); + CloseHandle(h); - char buf[40] = { 0 }; - sscanf(" ether fe:26:f4:f3:29:07 txqueuelen 1000 (Ethernet)", " ether %s", buf); + std::string tj("{\"resolution\":{\"cat\":\"imgp\",\"group\":\"base\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u8bbe\\u7f6e\\u626b\\u63cf\\u56fe\\u50cf\\u7684\\u5206\\u8fa8\\u7387\",\"ver\":1,\"pos\":200,\"type\":\"int\",\"unit\":\"dpi\",\"affect\":6,\"readonly\":false,\"visible\":true,\"enabled\":true,\"size\":4,\"cur\":400,\"default\":200,\"range\":{\"min\":100,\"max\":600,\"step\":50}}}"); + gb_json* jsn = new gb_json(); + if (jsn->attach_text(&tj[0])) + { + gb_json* child = jsn->first_child(); + if (child) + { + bool bv = false, r = false; + int nv = 0; + double dv = .0f; + std::string sv(""); + + r = child->get_value("cur", bv); + r = child->get_value("cur", nv); + r = child->get_value("cur", dv); + r = child->get_value("cur", sv); + + child->release(); + } + } + jsn->release(); } CDlgScanner::~CDlgScanner() { + ::PostThreadMessage(thread_open_id_, WM_USER + 1001, 0, 0); + images_.save("", true); if (scanner_) { scanner_->close(); @@ -689,6 +756,11 @@ void CDlgScanner::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_TAB_OPER, tab_oper_); } +typedef struct _prog_data +{ + CDlgScanner* obj; + std::string file; +}PROGD, *LPPROGD; void CDlgScanner::set_device(usb::LPUSBPNP pnp) { if (!pnp) @@ -715,11 +787,10 @@ void CDlgScanner::set_device(usb::LPUSBPNP pnp) setting_ui_ = NULL; } - static std::string cur_img_file(""); - auto progresser = [&](uint64_t total, uint64_t cur, uint32_t err, void* user_data) -> int { - CDlgScanner* dlg = (CDlgScanner*)user_data; + LPPROGD param = (LPPROGD)user_data; + CDlgScanner* dlg = param->obj; if (cur >= total) log_cls::log(LOG_LEVEL_DEBUG, "Finished in receiving new image = %d\r\n", err); @@ -732,7 +803,16 @@ void CDlgScanner::set_device(usb::LPUSBPNP pnp) dlg->set_text(IDC_EDIT_COUNT, (std::to_wstring(dlg->img_cnt_) + L"/" + std::to_wstring(dlg->paper_cnt_)).c_str()); if (dlg->is_checked(IDC_CHECK_AUTO_OPEN_IMG)) - ShellExecuteA(dlg->m_hWnd, "Open", cur_img_file.c_str(), NULL, NULL, SW_SHOWNORMAL); + { + images_.save(param->file, true); + //std::string* file(new std::string(param->file)); + //if (!PostThreadMessage(thread_open_id_, WM_USER + 1, NULL, (LPARAM)file)) + //{ + // delete file; + // ShellExecuteA(dlg->m_hWnd, "Open", param->file.c_str(), NULL, NULL, SW_SHOWNORMAL); + //} + } + delete param; } return 0; @@ -781,9 +861,22 @@ void CDlgScanner::set_device(usb::LPUSBPNP pnp) ext = "png"; else if (img->format == IMG_FMT_TIFF) ext = "tiff"; - sprintf_s(name, _countof(name) - 1, "scan_%04d.%s", ++img_cnt_, ext.c_str()); - err = saver->open((root + name).c_str(), size); - log_cls::log(LOG_LEVEL_DEBUG, "Begin receiving new image (%s + %llu) = %d\r\n", (root + name).c_str(), size, err); + if (paper_cnt_ < img->pos.paper_ind) + paper_cnt_ = img->pos.paper_ind; + ++img_cnt_; + sprintf_s(name, _countof(name) - 1, "scan_%04d", (int)img->pos.paper_ind); + root += name; + if (img->pos.paper_side == PAPER_SIDE_FRONT) + root += "F"; + else if (img->pos.paper_side == PAPER_SIDE_BACK) + root += "B"; + else + root += "C"; + sprintf_s(name, _countof(name) - 1, "_%d.%s", (int)img->pos.split_ind, ext.c_str()); + root += name; + + err = saver->open(root.c_str(), size); + log_cls::log(LOG_LEVEL_DEBUG, "Begin receiving new image (%s + %llu) = %d\r\n", root.c_str(), size, err); if (err) { saver->release(); @@ -791,8 +884,10 @@ void CDlgScanner::set_device(usb::LPUSBPNP pnp) } else { - saver->set_progress_notify(progresser, this); - cur_img_file = root + name; + LPPROGD param = new PROGD; + param->file = root; + param->obj = this; + saver->set_progress_notify(progresser, param); } return dynamic_cast(saver); @@ -834,8 +929,11 @@ void CDlgScanner::set_device(usb::LPUSBPNP pnp) msg_box(m_hWnd, MB_OK, L"Unsupported Scanner", L"Failed to get protocol version with error %d.", err); else msg_box(m_hWnd, MB_OK, L"Unsupported Scanner", L"Protocol version is mismatch: expect %u.%u but return %u.%u", HIBYTE(PROTOCOL_VER), LOBYTE(PROTOCOL_VER), HIBYTE(ver), LOBYTE(ver)); - scanner_->release(); - scanner_ = NULL; + if (scanner_) + { + scanner_->release(); + scanner_ = NULL; + } enable_buttons(false); OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_NOT_OPEN); }