同步图片发送

This commit is contained in:
gb 2024-03-01 17:16:12 +08:00
parent d4fa615534
commit 14e17b61cf
6 changed files with 39 additions and 12 deletions

View File

@ -391,8 +391,13 @@ void scanner_hw::thread_image_capture(bool paper_ready)
if(err)
break;
uint64_t bgn = chronograph::from_process_born();
uint32_t cnt0 = img.pos.paper_ind;
motor_->pick_paper();
err = scan_one_turn(&img, &avail_mem, &used_v4l2_mem, &over_msg_id, &over);
bgn = chronograph::from_process_born() - bgn;
cnt0 = img.pos.paper_ind - cnt0;
utils::to_log(LOG_LEVEL_DEBUG, "Scanned %d papers in %dms.\n", cnt0, (int)bgn);
if((over && !auto_scan_) || err || !auto_scan_ || !scanning_)
break;
{
@ -493,7 +498,7 @@ int scanner_hw::start_and_wait_lifter(int to_ms, int* ui_words_id)
}
int scanner_hw::scan_one_turn(LPPACKIMAGE img, safe_fifo<int>* cism, int* cism_cnt, int* ui_words, bool* mbstopped)
{
int ret = SCANNER_ERR_OK, minh = 210 * dpi_ / 25.4,
int ret = SCANNER_ERR_OK, minh = 210 * dpi_y_ / 25.4,
words = 0;
uint32_t pass = 0;
chronograph watch;
@ -565,15 +570,15 @@ int scanner_hw::scan_one_turn(LPPACKIMAGE img, safe_fifo<int>* cism, int* cism_c
words = ID_WORDS_STATUS_CAPTURE_FAILED;
break;
}
cism_cnt[0]++;
devui::send_message(devui::UI_STATUS_PAPER_CNT, (uint8_t*)&pass, sizeof(pass));
img->prc_time = watch.elapse_ms();
mem = new dyn_mem_shared(frame, size, put_v4l2_mem);
mem->set_param(cism, 0);
mem->set_param((void*)(long)ind, 1);
cism_cnt[0]++;
img->pos.status = hg_err_2_image_status(ret);
img_handler_(mem, true, img);
img_handler_(mem, true, img); // (frame, ind, LPPACKIMAGE, cism, ret, pass, bool)
mem->release();
if(!scan_cntless_ && img->pos.paper_ind == scan_count_)
@ -621,7 +626,7 @@ int scanner_hw::get_image_real_height(int minh)
while(h < minh && watch.elapse_ms() < 500)
{
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::this_thread::sleep_for(std::chrono::milliseconds(3));
img_controller_->read(14, h);
}
h = img_controller_->get_real_height();
@ -898,6 +903,10 @@ int scanner_hw::open(std::function<IMAGE_HANDLER_PROTO> image_handler, CHK_RES_F
motor_->set_staple_inpect(staple_chk_);
motor_->set_screw_inpect(screw_chk_);
motor_->set_screw_level(screw_chk_level_);
motor_->set_slowmoire(false);
if(1 || count_mode_)
motor_->set_speed_mode(SPEED_PPM_BASE_20);
else
motor_->set_speed_mode(motor_speed_);
motor_->set_auto_paper(auto_scan_, true);

View File

@ -263,8 +263,25 @@ void imgproc_mgr::send_image(LPPACKIMAGE head, cv::Mat& mat, void* info, size_t
}
void imgproc_mgr::send_image(std::vector<PROCIMGINFO>& imgs, bool last)
{
// if(last && imgs.size())
// {
// bool first = true;
// while(imgs[0].info.pos.paper_ind != sent_ind_)
// {
// if(first)
// {
// first = false;
// utils::to_log(LOG_LEVEL_DEBUG, "Wait paper %d sent before sending paper %d ...\n", sent_ind_, imgs[0].info.pos.paper_ind);
// }
// std::this_thread::sleep_for(std::chrono::milliseconds(3));
// }
// }
for(auto& v: imgs)
send_image(&v.info, v.img, v.ext_info.empty() ? nullptr : &v.ext_info[0], v.ext_info.length(), last);
if(last)
sent_ind_++;
}
int imgproc_mgr::set_value(const char* name, void* val)
@ -366,6 +383,6 @@ bool imgproc_mgr::is_busy(void)
void imgproc_mgr::start_new_turn(uint32_t scanid, uint32_t sessionid)
{
scan_id_ = scanid;
sent_ind_ = 0;
sent_ind_ = 1;
session_id_ = sessionid;
}

View File

@ -33,9 +33,9 @@ class imgproc_mgr : public sane_opt_provider
image_processor* stretcher_ = nullptr;
bool do_rebuild_ = true;
volatile bool run_ = true;
volatile uint32_t sent_ind_ = 1;
bool dump_img_ = false;
uint32_t scan_id_ = 0;
uint32_t sent_ind_ = 0;
uint32_t session_id_ = 0;
MUTEX working_cnt_lock_;
uint32_t working_cnt_ = 0;

View File

@ -376,6 +376,7 @@ public:
uint32_t take_pos(void);
};
// callback proto
//
// parameters: usb_functionfs_event* - the function event ptr

View File

@ -317,7 +317,7 @@ public:
static bool now(TIMEV* tv);
static bool now(uint64_t* seconds, uint64_t* u_seconds);
static std::string now(bool with_ms = true/*whether with milliseconds*/); // return '2022-11-30 10:38:42.123', no '.123' if with_ms was false
static uint64_t from_process_born(void);
static uint64_t from_process_born(void); // return the time in milliseconds that has passed since the process started
public:
uint64_t elapse_s(void);

View File

@ -60,8 +60,8 @@ add_packagedirs("sdk")
add_defines("BUILD_AS_DEVICE")
add_defines("VER_MAIN=2")
add_defines("VER_FAMILY=200")
add_defines("VER_DATE=20240228")
add_defines("VER_BUILD=2")
add_defines("VER_DATE=20240301")
add_defines("VER_BUILD=20")
target("conf")
set_kind("phony")