Scanner: 扫描流程开启采集控制代码

MultiFrameCapture 增加模拟数据传输接口实现,读取图像路径为/home/root/color.jpg 或/home/root/gray.jpg
This commit is contained in:
lovelyyoung 2023-07-18 10:29:03 +08:00
parent 70354ab6cc
commit 355b44018a
3 changed files with 137 additions and 120 deletions

View File

@ -20,12 +20,10 @@
const int vsp_A = 45; const int vsp_A = 45;
const int vsp_B = 45; const int vsp_B = 45;
// using namespace cv; // using namespace cv;
MultiFrameCapture::MultiFrameCapture(ScannerGlue glue, MultiFrameCapture::MultiFrameCapture(ScannerGlue glue,
std::shared_ptr<FpgaComm> fpga, std::shared_ptr<FpgaComm> fpga,
CISVendor vendor) : CISVendor vendor) : reset_pin(new GpioOut(Fpga_Reset)),
reset_pin(new GpioOut(Fpga_Reset)),
fpgaLoad(new Gpio(Fpga_Load)), fpgaLoad(new Gpio(Fpga_Load)),
fpga_conf_initn(new Gpio(Fpga_InitN)), fpga_conf_initn(new Gpio(Fpga_InitN)),
snaped_index(0), snaped_index(0),
@ -37,6 +35,10 @@ MultiFrameCapture::MultiFrameCapture(ScannerGlue glue,
pimgdata_info({0}), pimgdata_info({0}),
iImageremain(0), iImageremain(0),
bScanning(false) bScanning(false)
#ifdef TEST_SIMCAP
,
m_test_pimg(nullptr), m_test_pimg_len(0)
#endif
{ {
m_capFpageregs = fpga; m_capFpageregs = fpga;
video.reset(new HCamDevice); video.reset(new HCamDevice);
@ -49,6 +51,7 @@ MultiFrameCapture::MultiFrameCapture(ScannerGlue glue,
// fpgaLoad->setValue(Gpio::High); // fpgaLoad->setValue(Gpio::High);
reset_fpga(); reset_fpga();
m_snap_thread.reset(new std::thread(&MultiFrameCapture::snaprun, this)); m_snap_thread.reset(new std::thread(&MultiFrameCapture::snaprun, this));
m_imgproc_thread.reset(new std::thread(&MultiFrameCapture::procimage, this)); m_imgproc_thread.reset(new std::thread(&MultiFrameCapture::procimage, this));
} }
@ -76,13 +79,17 @@ MultiFrameCapture::~MultiFrameCapture()
free(pimgdata_info.pdata); free(pimgdata_info.pdata);
pimgdata_info.pdata = nullptr; pimgdata_info.pdata = nullptr;
} }
#ifdef TEST_SIMCAP
if (m_test_pimg)
free(m_test_pimg);
#endif
} }
void MultiFrameCapture::SetParent(void *scanner) void MultiFrameCapture::SetParent(void *scanner)
{ {
} }
void MultiFrameCapture::open() void MultiFrameCapture::open_video()
{ {
// reset_fpga(); // reset_fpga();
m_capFpageregs->resetADC(); m_capFpageregs->resetADC();
@ -143,7 +150,6 @@ void MultiFrameCapture::open()
.sp = sp_dst}; // 600DPI 0x1450 300DPI 0xe10 .sp = sp_dst}; // 600DPI 0x1450 300DPI 0xe10
readframe_timeout = sp_dst / 4 / (mode == 1 ? 1 : 3); readframe_timeout = sp_dst / 4 / (mode == 1 ? 1 : 3);
m_capFpageregs->setRegs(0x01, *((int *)(&fpgamod))); m_capFpageregs->setRegs(0x01, *((int *)(&fpgamod)));
m_capFpageregs->setSample(startsample); m_capFpageregs->setSample(startsample);
// auto info = GetScanInfoFromJson(); // auto info = GetScanInfoFromJson();
@ -193,11 +199,13 @@ void MultiFrameCapture::open()
void MultiFrameCapture::snap() void MultiFrameCapture::snap()
{ {
#ifndef TEST_SIMCAP
std::lock_guard<std::mutex> m_lock(m_mtx_snap); std::lock_guard<std::mutex> m_lock(m_mtx_snap);
b_stop_snap = b_end_snap = false; b_stop_snap = b_end_snap = false;
m_capFpageregs->capture(); m_capFpageregs->capture();
snaped_index++; snaped_index++;
m_cv_snap.notify_all(); m_cv_snap.notify_all();
#endif
} }
void MultiFrameCapture::stopsnap(bool autosize) void MultiFrameCapture::stopsnap(bool autosize)
@ -234,9 +242,25 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
printf("isColor:%d\r\n", m_config.params.isColor); printf("isColor:%d\r\n", m_config.params.isColor);
printf("dpi:%d\r\n", m_config.params.dpi); printf("dpi:%d\r\n", m_config.params.dpi);
#ifdef TEST_SIMCAP
if (m_test_pimg)
free(m_test_pimg);
FILE *f_img;
if (m_config.params.isColor == 1) // color
f_img = fopen("/home/root/color.jpg", "rb");
else
f_img = fopen("/home/root/gray.jpg", "rb");
// m_config.params.pageSize = 1; if (f_img == nullptr)
printf("!!!!!!!!!! error while reading image \r\n");
fseek(f_img, 0, SEEK_END);
m_test_pimg_len = ftell(f_img);
m_test_pimg = malloc(m_test_pimg_len);
printf("!!!!!!!!!! info: reading image len = %d m_test_pimg = %p \r\n", f_len, m_test_pimg);
fclose(f_img);
#endif
} }
void MultiFrameCapture::createCorrect(int correctmode) void MultiFrameCapture::createCorrect(int correctmode)
@ -310,21 +334,29 @@ bool MultiFrameCapture::capturerImage()
void MultiFrameCapture::waitsnapdone(int state) void MultiFrameCapture::waitsnapdone(int state)
{ {
// printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait \n"); #ifdef TEST_SIMCAP
// V4L2_DATAINFO_Ex info; HG_JpegCompressInfo info;
// info.snaped_index = snaped_index; info.DataLength = m_test_pimg_len;
// info.snap_end = true; info.pJpegData = m_test_pimg;
// info.error_code = state;
// if (b_end_snap) m_glue.m_imageready(&info);
// { #else
// m_frameinfos.Put(info); printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait \n");
// return; V4L2_DATAINFO_Ex info;
// } info.snaped_index = snaped_index;
// std::unique_lock<std::mutex> lock(m_mtx_snapdone); info.snap_end = true;
// m_cv_snapdone.wait(lock); info.error_code = state;
// b_end_snap = true; if (b_end_snap)
// m_frameinfos.Put(info); {
// printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait done \n"); m_frameinfos.Put(info);
return;
}
std::unique_lock<std::mutex> lock(m_mtx_snapdone);
m_cv_snapdone.wait(lock);
b_end_snap = true;
m_frameinfos.Put(info);
printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait done \n");
#endif
} }
bool MultiFrameCapture::IsImageQueueEmpty() bool MultiFrameCapture::IsImageQueueEmpty()
@ -459,7 +491,6 @@ void MultiFrameCapture::configFPGAParam(int mode, int dpi)
m_capFpageregs->setBOffset(i, fpgaparam.OffsetB[i]); m_capFpageregs->setBOffset(i, fpgaparam.OffsetB[i]);
LOG("fpgaparam.setBOffset[%d] = %d \n", i, fpgaparam.OffsetB[i]); LOG("fpgaparam.setBOffset[%d] = %d \n", i, fpgaparam.OffsetB[i]);
std::this_thread::sleep_for(std::chrono::milliseconds(3)); std::this_thread::sleep_for(std::chrono::milliseconds(3));
m_capFpageregs->getBOffset(i, A_value, B_value); m_capFpageregs->getBOffset(i, A_value, B_value);
LOG("fpgaparam.getBOffset[%d] = A_value = %d B_value = %d \n", i, A_value, B_value); LOG("fpgaparam.getBOffset[%d] = A_value = %d B_value = %d \n", i, A_value, B_value);
@ -479,8 +510,7 @@ void MultiFrameCapture::configFPGAParam(int mode, int dpi)
// LOG("fpgaparam.getBGain[%d] = A_value = %d B_value = %d \n", i, A_value,B_value); // LOG("fpgaparam.getBGain[%d] = A_value = %d B_value = %d \n", i, A_value,B_value);
// std::this_thread::sleep_for(std::chrono::milliseconds(3)); // std::this_thread::sleep_for(std::chrono::milliseconds(3));
} }
} };
;
int MultiFrameCapture::width() int MultiFrameCapture::width()
{ {
int dpi = m_capFpageregs->getDpi(); int dpi = m_capFpageregs->getDpi();
@ -540,7 +570,6 @@ void MultiFrameCapture::snaprun()
{ {
snap_func(frame_info, channels, (i == frame_count), i); snap_func(frame_info, channels, (i == frame_count), i);
if (b_stop_snap) if (b_stop_snap)
{ {
int snaped_frame_count = m_capFpageregs->getFrame_counter_val(); int snaped_frame_count = m_capFpageregs->getFrame_counter_val();
@ -671,7 +700,6 @@ void MultiFrameCapture::procimage()
// if (frames_height > 0 && frames_width > 0) // if (frames_height > 0 && frames_width > 0)
// m_mat = cv::Mat(frames_height, frames_width, CV_8UC(m_config.params.isColor ? 3 : 1), pimgdata_info.pdata); // m_mat = cv::Mat(frames_height, frames_width, CV_8UC(m_config.params.isColor ? 3 : 1), pimgdata_info.pdata);
// float vratio = *((float *)&m_fpgaparam.VRatio); // float vratio = *((float *)&m_fpgaparam.VRatio);
// float hratio = *((float *)&m_fpgaparam.HRatio); // float hratio = *((float *)&m_fpgaparam.HRatio);
// if (!(vratio >= 0.8f && vratio <= 1.20f && hratio > 0.8f && hratio < 1.2f)) // if (!(vratio >= 0.8f && vratio <= 1.20f && hratio > 0.8f && hratio < 1.2f))
@ -1098,14 +1126,14 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
// m_capFpageregs->setFrame_interval_max(static_cast<int>(sp_dst * 4 / (mode ? 1 : 3))); //dpi > 2 ? 7200 : 3600 // m_capFpageregs->setFrame_interval_max(static_cast<int>(sp_dst * 4 / (mode ? 1 : 3))); //dpi > 2 ? 7200 : 3600
// m_capFpageregs->setFrame_interval_min(static_cast<int>(sp_dst * 0.1 / (mode ? 1 : 3) )); //1540 // m_capFpageregs->setFrame_interval_min(static_cast<int>(sp_dst * 0.1 / (mode ? 1 : 3) )); //1540
.
// 2023 7-15 屏蔽 // 2023 7-15 屏蔽
// m_capFpageregs->setFrame_interval_max(0x1010); //dpi > 2 ? 7200 : 3600 // m_capFpageregs->setFrame_interval_max(0x1010); //dpi > 2 ? 7200 : 3600
// m_capFpageregs->setFrame_interval_min(0xa98); //dpi > 2 ? 900 : 1540 // m_capFpageregs->setFrame_interval_min(0xa98); //dpi > 2 ? 900 : 1540
configFPGAParam(mode, dpi); configFPGAParam(mode, dpi);
StopWatch swwv4l2open; StopWatch swwv4l2open;
int ret = video->open_video(width, 60 * 2); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2 // int ret = video->open_video(width, 60 * 2); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
//int ret = video->open_video(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2 int ret = video->open_video(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
if (ret < 0) if (ret < 0)
{ {
return; return;
@ -1173,8 +1201,6 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
video->close_video(); video->close_video();
} }
// void MultiFrameCapture::myFloodFill(cv::Mat& image, bool isTwoSide) // void MultiFrameCapture::myFloodFill(cv::Mat& image, bool isTwoSide)
// { // {
// int w = image.cols; // int w = image.cols;
@ -1239,6 +1265,7 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
void MultiFrameCapture::init_imagedatabuffer() void MultiFrameCapture::init_imagedatabuffer()
{ {
#ifndef TEST_SIMCAP
printf("pimgdata_info.pdata = %p \n", pimgdata_info.pdata); printf("pimgdata_info.pdata = %p \n", pimgdata_info.pdata);
if (pimgdata_info.pdata) if (pimgdata_info.pdata)
{ {
@ -1264,6 +1291,7 @@ void MultiFrameCapture::init_imagedatabuffer()
pimgdata_info.frame_count = 0; pimgdata_info.frame_count = 0;
printf("pimgdata_info.pdata = %p malloc_size = %d per_frame_bytes = %d \n", pimgdata_info.pdata, total_buffer_need, per_frame_bytes); printf("pimgdata_info.pdata = %p malloc_size = %d per_frame_bytes = %d \n", pimgdata_info.pdata, total_buffer_need, per_frame_bytes);
} }
#endif
} }
// void MultiFrameCapture::update_imgdatainfo(cv::Mat itemmat) // void MultiFrameCapture::update_imgdatainfo(cv::Mat itemmat)

View File

@ -4,6 +4,8 @@
#include "CorrectParam.h" #include "CorrectParam.h"
#include "IPreproc.h" #include "IPreproc.h"
#define TEST_SIMCAP
class FpgaComm; class FpgaComm;
class gVideo; class gVideo;
class Gpio; class Gpio;
@ -51,7 +53,10 @@ private:
int offsetStep[12]; int offsetStep[12];
int expStep[2][3]; int expStep[2][3];
double radio = 1; double radio = 1;
#ifdef TEST_SIMCAP
void* m_test_pimg;
unsigned int m_test_pimg_len;
#endif
CamZ_Reg_4 reg_; CamZ_Reg_4 reg_;
private: private:
void reset_fpga(); void reset_fpga();

View File

@ -138,22 +138,6 @@ void Scanner::startScan()
threadRunScan = std::thread(&Scanner::runScan, this); threadRunScan = std::thread(&Scanner::runScan, this);
writesyslog(LOG_INFO, getmeminfo()); writesyslog(LOG_INFO, getmeminfo());
// HG_ScanConfiguration cfg;
// cfg.params.dpi=2;
// cfg.params.isColor = 1;
// cfg.params.pageSize = 1;
// capturer->UpdateScanParam(cfg);
// for(int i = 0;i<1;i++)
// {
// capturer->open();
// capturer->snap();
// capturer->capturerImage();
// capturer->close();
// // std::this_thread::sleep_for(std::chrono::milliseconds(4000));//避免scanpin io 开始异常
// }
// //capturer->close();
} }
void Scanner::runMessageLoop() void Scanner::runMessageLoop()
@ -305,7 +289,7 @@ void Scanner::runScan()
break; break;
} }
//capturer->snap(); capturer->snap();
motorCuozhi.pauseWaitForThread(); motorCuozhi.pauseWaitForThread();
int i = 0; int i = 0;
int max = 7; int max = 7;
@ -355,9 +339,9 @@ void Scanner::runScan()
m_scaninfo.DoubleNum++; m_scaninfo.DoubleNum++;
writesyslog(LOG_INFO, "paper double paper error\n"); writesyslog(LOG_INFO, "paper double paper error\n");
} }
//capturer->stopsnap(b_autosize); capturer->stopsnap(b_autosize);
//capturer->waitsnapdone(1);//等待采集完成 capturer->waitsnapdone(1);//等待采集完成
//this_thread::sleep_for(std::chrono::milliseconds(500));//200 80ms 600 260ms this_thread::sleep_for(std::chrono::milliseconds(500));//200 80ms 600 260ms
LOG("\n ----------------EXIT 11111---------------- \n"); LOG("\n ----------------EXIT 11111---------------- \n");
break; break;
} }