Scanner: 扫描流程开启采集控制代码
MultiFrameCapture 增加模拟数据传输接口实现,读取图像路径为/home/root/color.jpg 或/home/root/gray.jpg
This commit is contained in:
parent
70354ab6cc
commit
355b44018a
|
@ -20,12 +20,10 @@
|
|||
const int vsp_A = 45;
|
||||
const int vsp_B = 45;
|
||||
|
||||
|
||||
// using namespace cv;
|
||||
MultiFrameCapture::MultiFrameCapture(ScannerGlue glue,
|
||||
std::shared_ptr<FpgaComm> fpga,
|
||||
CISVendor vendor) :
|
||||
reset_pin(new GpioOut(Fpga_Reset)),
|
||||
CISVendor vendor) : reset_pin(new GpioOut(Fpga_Reset)),
|
||||
fpgaLoad(new Gpio(Fpga_Load)),
|
||||
fpga_conf_initn(new Gpio(Fpga_InitN)),
|
||||
snaped_index(0),
|
||||
|
@ -37,6 +35,10 @@ MultiFrameCapture::MultiFrameCapture(ScannerGlue glue,
|
|||
pimgdata_info({0}),
|
||||
iImageremain(0),
|
||||
bScanning(false)
|
||||
#ifdef TEST_SIMCAP
|
||||
,
|
||||
m_test_pimg(nullptr), m_test_pimg_len(0)
|
||||
#endif
|
||||
{
|
||||
m_capFpageregs = fpga;
|
||||
video.reset(new HCamDevice);
|
||||
|
@ -49,6 +51,7 @@ MultiFrameCapture::MultiFrameCapture(ScannerGlue glue,
|
|||
// fpgaLoad->setValue(Gpio::High);
|
||||
|
||||
reset_fpga();
|
||||
|
||||
m_snap_thread.reset(new std::thread(&MultiFrameCapture::snaprun, this));
|
||||
m_imgproc_thread.reset(new std::thread(&MultiFrameCapture::procimage, this));
|
||||
}
|
||||
|
@ -76,13 +79,17 @@ MultiFrameCapture::~MultiFrameCapture()
|
|||
free(pimgdata_info.pdata);
|
||||
pimgdata_info.pdata = nullptr;
|
||||
}
|
||||
#ifdef TEST_SIMCAP
|
||||
if (m_test_pimg)
|
||||
free(m_test_pimg);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MultiFrameCapture::SetParent(void *scanner)
|
||||
{
|
||||
}
|
||||
|
||||
void MultiFrameCapture::open()
|
||||
void MultiFrameCapture::open_video()
|
||||
{
|
||||
// reset_fpga();
|
||||
m_capFpageregs->resetADC();
|
||||
|
@ -143,7 +150,6 @@ void MultiFrameCapture::open()
|
|||
.sp = sp_dst}; // 600DPI 0x1450 300DPI 0xe10
|
||||
readframe_timeout = sp_dst / 4 / (mode == 1 ? 1 : 3);
|
||||
|
||||
|
||||
m_capFpageregs->setRegs(0x01, *((int *)(&fpgamod)));
|
||||
m_capFpageregs->setSample(startsample);
|
||||
// auto info = GetScanInfoFromJson();
|
||||
|
@ -193,11 +199,13 @@ void MultiFrameCapture::open()
|
|||
|
||||
void MultiFrameCapture::snap()
|
||||
{
|
||||
#ifndef TEST_SIMCAP
|
||||
std::lock_guard<std::mutex> m_lock(m_mtx_snap);
|
||||
b_stop_snap = b_end_snap = false;
|
||||
m_capFpageregs->capture();
|
||||
snaped_index++;
|
||||
m_cv_snap.notify_all();
|
||||
#endif
|
||||
}
|
||||
|
||||
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("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)
|
||||
|
@ -310,21 +334,29 @@ bool MultiFrameCapture::capturerImage()
|
|||
|
||||
void MultiFrameCapture::waitsnapdone(int state)
|
||||
{
|
||||
// printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait \n");
|
||||
// V4L2_DATAINFO_Ex info;
|
||||
// info.snaped_index = snaped_index;
|
||||
// info.snap_end = true;
|
||||
// info.error_code = state;
|
||||
// if (b_end_snap)
|
||||
// {
|
||||
// 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");
|
||||
#ifdef TEST_SIMCAP
|
||||
HG_JpegCompressInfo info;
|
||||
info.DataLength = m_test_pimg_len;
|
||||
info.pJpegData = m_test_pimg;
|
||||
|
||||
m_glue.m_imageready(&info);
|
||||
#else
|
||||
printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait \n");
|
||||
V4L2_DATAINFO_Ex info;
|
||||
info.snaped_index = snaped_index;
|
||||
info.snap_end = true;
|
||||
info.error_code = state;
|
||||
if (b_end_snap)
|
||||
{
|
||||
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()
|
||||
|
@ -459,7 +491,6 @@ void MultiFrameCapture::configFPGAParam(int mode, int dpi)
|
|||
m_capFpageregs->setBOffset(i, fpgaparam.OffsetB[i]);
|
||||
LOG("fpgaparam.setBOffset[%d] = %d \n", i, fpgaparam.OffsetB[i]);
|
||||
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(3));
|
||||
m_capFpageregs->getBOffset(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);
|
||||
// std::this_thread::sleep_for(std::chrono::milliseconds(3));
|
||||
}
|
||||
}
|
||||
;
|
||||
};
|
||||
int MultiFrameCapture::width()
|
||||
{
|
||||
int dpi = m_capFpageregs->getDpi();
|
||||
|
@ -540,7 +570,6 @@ void MultiFrameCapture::snaprun()
|
|||
{
|
||||
snap_func(frame_info, channels, (i == frame_count), i);
|
||||
|
||||
|
||||
if (b_stop_snap)
|
||||
{
|
||||
int snaped_frame_count = m_capFpageregs->getFrame_counter_val();
|
||||
|
@ -671,7 +700,6 @@ void MultiFrameCapture::procimage()
|
|||
// 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);
|
||||
|
||||
|
||||
// float vratio = *((float *)&m_fpgaparam.VRatio);
|
||||
// float hratio = *((float *)&m_fpgaparam.HRatio);
|
||||
// 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_min(static_cast<int>(sp_dst * 0.1 / (mode ? 1 : 3) )); //1540
|
||||
|
||||
.
|
||||
// 2023 7-15 屏蔽
|
||||
// m_capFpageregs->setFrame_interval_max(0x1010); //dpi > 2 ? 7200 : 3600
|
||||
// m_capFpageregs->setFrame_interval_min(0xa98); //dpi > 2 ? 900 : 1540
|
||||
configFPGAParam(mode, dpi);
|
||||
StopWatch swwv4l2open;
|
||||
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(width, 60 * 2); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
int ret = video->open_video(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
if (ret < 0)
|
||||
{
|
||||
return;
|
||||
|
@ -1173,8 +1201,6 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
|
|||
video->close_video();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// void MultiFrameCapture::myFloodFill(cv::Mat& image, bool isTwoSide)
|
||||
// {
|
||||
// int w = image.cols;
|
||||
|
@ -1239,6 +1265,7 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
|
|||
|
||||
void MultiFrameCapture::init_imagedatabuffer()
|
||||
{
|
||||
#ifndef TEST_SIMCAP
|
||||
printf("pimgdata_info.pdata = %p \n", pimgdata_info.pdata);
|
||||
if (pimgdata_info.pdata)
|
||||
{
|
||||
|
@ -1264,6 +1291,7 @@ void MultiFrameCapture::init_imagedatabuffer()
|
|||
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);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// void MultiFrameCapture::update_imgdatainfo(cv::Mat itemmat)
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include "CorrectParam.h"
|
||||
#include "IPreproc.h"
|
||||
|
||||
#define TEST_SIMCAP
|
||||
|
||||
class FpgaComm;
|
||||
class gVideo;
|
||||
class Gpio;
|
||||
|
@ -51,7 +53,10 @@ private:
|
|||
int offsetStep[12];
|
||||
int expStep[2][3];
|
||||
double radio = 1;
|
||||
|
||||
#ifdef TEST_SIMCAP
|
||||
void* m_test_pimg;
|
||||
unsigned int m_test_pimg_len;
|
||||
#endif
|
||||
CamZ_Reg_4 reg_;
|
||||
private:
|
||||
void reset_fpga();
|
||||
|
|
24
Scanner.cpp
24
Scanner.cpp
|
@ -138,22 +138,6 @@ void Scanner::startScan()
|
|||
threadRunScan = std::thread(&Scanner::runScan, this);
|
||||
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()
|
||||
|
@ -305,7 +289,7 @@ void Scanner::runScan()
|
|||
break;
|
||||
}
|
||||
|
||||
//capturer->snap();
|
||||
capturer->snap();
|
||||
motorCuozhi.pauseWaitForThread();
|
||||
int i = 0;
|
||||
int max = 7;
|
||||
|
@ -355,9 +339,9 @@ void Scanner::runScan()
|
|||
m_scaninfo.DoubleNum++;
|
||||
writesyslog(LOG_INFO, "paper double paper error\n");
|
||||
}
|
||||
//capturer->stopsnap(b_autosize);
|
||||
//capturer->waitsnapdone(1);//等待采集完成
|
||||
//this_thread::sleep_for(std::chrono::milliseconds(500));//200 80ms 600 260ms
|
||||
capturer->stopsnap(b_autosize);
|
||||
capturer->waitsnapdone(1);//等待采集完成
|
||||
this_thread::sleep_for(std::chrono::milliseconds(500));//200 80ms 600 260ms
|
||||
LOG("\n ----------------EXIT 11111---------------- \n");
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue