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_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)
|
||||||
|
|
|
@ -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();
|
||||||
|
|
24
Scanner.cpp
24
Scanner.cpp
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue