出图流程调整
This commit is contained in:
parent
c48acfbbdc
commit
34472cf740
|
@ -15,6 +15,12 @@ union CamZ_Reg_2Short
|
|||
int value;
|
||||
};
|
||||
|
||||
union CamZ_Reg_2char
|
||||
{
|
||||
unsigned char NChar[2];
|
||||
int value;
|
||||
};
|
||||
|
||||
union CamZ_Reg_4
|
||||
{
|
||||
int value;
|
||||
|
@ -55,6 +61,7 @@ union CamZ_Reg_4_New
|
|||
unsigned int clr_exp:1; //曝光清除 低电平 有效
|
||||
unsigned int soft_rst_n:1; //软复位
|
||||
unsigned int en_pattern:1; //使能自测试数据
|
||||
unsigned int en_line:1; //行计数
|
||||
|
||||
};
|
||||
};
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
CuoZhiMotor::CuoZhiMotor()
|
||||
: Motor(motorPorts_Cuozhi)
|
||||
{
|
||||
auto t_smbtype = smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV;
|
||||
auto t_smbtype = MotorConfig::MTBDType::MT_TMC;//SMBType::MB_DRV_TMC216;//smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV;
|
||||
m_cuoparamex = m_mtconfig->GetMotorSpeedParam(false, t_smbtype, 4, 1, 1);
|
||||
speedConfig();
|
||||
mspCuozhiFeeding = {.finalPeriod = 1427500, .Fmin = 2027500, .stepnum = 30, .a = 100, .offset = 4, .finalDelay = 3000};
|
||||
|
@ -100,7 +100,7 @@ void CuoZhiMotor::feeding()
|
|||
|
||||
void CuoZhiMotor::speedChange(int speed, int dpi, int colormode) // speed should be in range [0,5] (by ply,at 2019.5.23)
|
||||
{
|
||||
auto t_smbtype = smbtype == SMBType::MB_DRV_8825 ? MotorConfig::MTBDType::MT_DRV : MotorConfig::MTBDType::MT_TMC;
|
||||
auto t_smbtype = MotorConfig::MTBDType::MT_TMC;//SMBType::MB_DRV_TMC216;//smbtype == SMBType::MB_DRV_8825 ? MotorConfig::MTBDType::MT_DRV : MotorConfig::MTBDType::MT_TMC;
|
||||
m_cuoparamex = m_mtconfig->GetMotorSpeedParam(false, t_smbtype, speed, colormode, dpi);
|
||||
speedConfig();
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ void CuoZhiMotor::speedRecover()
|
|||
|
||||
void CuoZhiMotor::speedConfig()
|
||||
{
|
||||
LOG("CuoZhiMotor speed=%d \n dpi=%d \n colormode=%d \n finalPeriod=%d \n Fmin=%d \n a=%.2f \n offset=%.2f \n stepnum=%.2f \n finalDelay=%.2f \n ",
|
||||
printf("CuoZhiMotor speed=%d \n dpi=%d \n colormode=%d \n finalPeriod=%d \n Fmin=%d \n a=%.2f \n offset=%.2f \n stepnum=%.2f \n finalDelay=%.2f \n ",
|
||||
m_cuoparamex.speed,
|
||||
m_cuoparamex.dpi,
|
||||
m_cuoparamex.colormode,
|
||||
|
|
|
@ -96,15 +96,16 @@ HCamDevice::HCamDevice()
|
|||
memfd = 0;
|
||||
subDeviceName = "/dev/v4l-subdev0";
|
||||
videoDevName = "/dev/video0";
|
||||
subDevicefd = 0;
|
||||
videofd = 0;
|
||||
subDevicefd = -1;
|
||||
videofd = -1;
|
||||
|
||||
v4lWidth = 5184;//@300dpi 5184 @600dpi 5184*2
|
||||
v4lHeight = 513 ;//* 3;//color_h/gray_h = 3 比如:目标复原图像高度为128 则灰度需要FPGA采集128 彩色采集128*3
|
||||
v4lBufferCount = 30;
|
||||
v4lBufferCount = 32;
|
||||
v4l2buftype = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
nplanes = 1; // only use one plane
|
||||
drivertype = V4L2_CAP_VIDEO_CAPTURE_MPLANE;
|
||||
//drivertype == V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
v4l2memtype = V4L2_MEMORY_MMAP;
|
||||
captureBufers = NULL;
|
||||
|
||||
|
@ -145,7 +146,7 @@ HCamDevice::HCamDevice()
|
|||
HtCamWriteFpgaRegs(16, VSNP | value);
|
||||
}
|
||||
|
||||
HtCamWriteFpgaRegs(16, 0x0B0B); //相位
|
||||
HtCamWriteFpgaRegs(16, 0x0A0A); //相位0x0B0B 2023-9-4 0A0B, 2023-9-11 0a0a
|
||||
|
||||
|
||||
//HtCamChangeTriggerInAndEXt(1);
|
||||
|
@ -241,6 +242,12 @@ int HCamDevice::open_device(int width , int height)
|
|||
}
|
||||
int HCamDevice::close_device()
|
||||
{
|
||||
printf("videofd:%d subDevicefd:%d\r\n",videofd,subDevicefd);
|
||||
if (videofd == -1 || subDevicefd == -1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
HtCamStopVideoCapturing();
|
||||
uint8_t i;
|
||||
int ret = 0;
|
||||
|
@ -252,9 +259,11 @@ int HCamDevice::close_device()
|
|||
}
|
||||
|
||||
ret = close(videofd);
|
||||
videofd = -1;
|
||||
camera_print("close video_fd :%s is:[%s] \n",videoDevName.c_str(),ret < 0 ? "fail" : "succeed");
|
||||
|
||||
ret = close(subDevicefd);
|
||||
subDevicefd = -1;
|
||||
camera_print("close sub_device_fd :%s is:[%s] \n",subDeviceName.c_str(),ret < 0 ? "fail" : "succeed");
|
||||
|
||||
return ret;
|
||||
|
@ -460,7 +469,12 @@ int HCamDevice::HtCamReadCaptureFrame(void **pbuf, int timeout)
|
|||
if (!HtCamWaitVideoCapture(timeout))
|
||||
{
|
||||
camera_err("read frame time out\n");
|
||||
// if ((lastSucceedBufferIndex + 1) >= v4lBufferCount)
|
||||
// *pbuf = captureBufers[0].start;
|
||||
// else
|
||||
*pbuf = captureBufers[lastSucceedBufferIndex + 1].start;
|
||||
|
||||
printf("timeout !!! captureBufers[lastSucceedBufferIndex].length :%d\r\n",captureBufers[lastSucceedBufferIndex].length);
|
||||
return -1;
|
||||
}
|
||||
struct v4l2_buffer buf;
|
||||
|
@ -486,7 +500,7 @@ int HCamDevice::HtCamReadCaptureFrame(void **pbuf, int timeout)
|
|||
int ret = 0;
|
||||
if (( ret = ioctl(videofd, VIDIOC_DQBUF, &buf)) == 0) //这个地方入栈失败好像下面就都不用操作了 ??? 毕竟已经丢帧了算
|
||||
{
|
||||
camera_dbg("*****DQBUF[%d] FINISH*****\n", buf.index);
|
||||
camera_print("*****DQBUF[%d] FINISH*****\n", buf.index);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -495,7 +509,7 @@ int HCamDevice::HtCamReadCaptureFrame(void **pbuf, int timeout)
|
|||
}
|
||||
if (ioctl(videofd, VIDIOC_QBUF, &buf) == 0) //出栈一样
|
||||
{
|
||||
camera_dbg("************QBUF[%d] FINISH**************\n", buf.index);
|
||||
camera_print("************QBUF[%d] FINISH**************\n", buf.index);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -603,6 +617,7 @@ void HCamDevice::HtCamChangeAdjustPhase(uint16_t times, uint8_t dir)
|
|||
// This function is prohibited
|
||||
int HCamDevice::HtCamStartSampling()
|
||||
{
|
||||
//ioctl(subDevicefd,0x40,NULL);
|
||||
uint32_t *CamReg;
|
||||
if (virBaseAddr == NULL)
|
||||
return -1;
|
||||
|
@ -626,6 +641,7 @@ int HCamDevice::HtCamStopSampling()
|
|||
CamReg[10] |= (HT_CAM_REG_CR_STOPSAMPLE_MASK);
|
||||
CamReg[10] &= ~(HT_CAM_REG_CR_STOPSAMPLE_MASK);
|
||||
|
||||
//ioctl(subDevicefd,0x40,NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -747,6 +763,7 @@ int HCamDevice::init_video_buffer()
|
|||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
else
|
||||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
req.memory = v4l2memtype;
|
||||
|
||||
printf("I GET THE drivertype %d\n",drivertype);
|
||||
|
@ -759,7 +776,7 @@ int HCamDevice::init_video_buffer()
|
|||
}
|
||||
|
||||
v4lBufferCount = req.count;
|
||||
camera_dbg(" reqbuf number is %d\n", v4lBufferCount);
|
||||
camera_print(" reqbuf number is %d\n", v4lBufferCount);
|
||||
|
||||
if (captureBufers != NULL)
|
||||
free(captureBufers);
|
||||
|
@ -1179,10 +1196,10 @@ void HCamDevice::HtCamGetStSp(uint32_t &start_smaple)
|
|||
|
||||
void HCamDevice::HtCamSetVsnpTime(int color)
|
||||
{
|
||||
CamZ_Reg_2Short st_sp;
|
||||
CamZ_Reg_2char st_sp;
|
||||
st_sp.value = HtCamReadFpgaRegs(0x10);
|
||||
st_sp.NShort[0] = color;
|
||||
st_sp.NShort[1] = 0;
|
||||
st_sp.NChar[0] = color;
|
||||
st_sp.NChar[1] = color;
|
||||
HtCamWriteFpgaRegs(0x10 , st_sp.value);
|
||||
}
|
||||
void HCamDevice::HtCamSetFrameCnt(uint32_t val)
|
||||
|
@ -1270,6 +1287,7 @@ void HCamDevice::HtCamSetClolr(int color)
|
|||
reg_4.color_mode = color;
|
||||
reg_4.en_frameset = 1; //帧计数默认开启
|
||||
reg_4.en_pattern = 0;
|
||||
reg_4.en_line = 1;
|
||||
HtCamWriteFpgaRegs(0x04,reg_4.value);
|
||||
|
||||
// HtCamSetStSp(color);
|
||||
|
|
|
@ -51,12 +51,12 @@ public:
|
|||
|
||||
void HtCamSetPeriod(uint32_t *reg_value); //设置扫描仪传感器占空比
|
||||
|
||||
void HtCamGetFrameCnt(uint32_t &val);//获取设置采集的帧数
|
||||
void HtCamGetFrameNum(uint32_t &val);//获取当前已经采集到的第几帧
|
||||
void HtCamGetFrameCnt(uint32_t &val);//获取设置采集的帧数 需要采集的帧数,设置为0x05表示采集六帧后停止
|
||||
void HtCamSetFrameCnt(uint32_t val);//需要采集的帧数,设置为0x05表示采集六帧后停止
|
||||
|
||||
void HtCamGetFrameNum(uint32_t &val);//采集到的帧数,如果为0x0005则表示采集到了5帧
|
||||
|
||||
|
||||
void HtCamSetFrameCnt(uint32_t val);//设置需要采集的帧数
|
||||
|
||||
uint32_t HtCamReadFpgaRegs(uint8_t reg_addr); //读取寄存器值
|
||||
void HtCamSetSpTime(uint32_t reg_value,uint32_t val);//0x03 reg_value //灰度内触发间隔 val读写间隔//影响到图像得拉伸 //2023-8-28 val 改为曝光间隔,
|
||||
void HtCamGetSpTime(uint32_t ®_value); //获取当前sptime
|
||||
|
|
|
@ -12,6 +12,7 @@ class FpgaComm;
|
|||
class ICapturer
|
||||
{
|
||||
public:
|
||||
bool is_image_ = false;
|
||||
ICapturer() {}
|
||||
|
||||
virtual ~ICapturer() {}
|
||||
|
|
|
@ -36,6 +36,8 @@ public:
|
|||
virtual ScannerScanInfo GetScanInfo() = 0;
|
||||
virtual void SetLEDStatus(LedStatus status) = 0;
|
||||
|
||||
virtual void close_v4l2()= 0;
|
||||
|
||||
protected:
|
||||
BlockingQueue<HG_JpegCompressInfo> m_images;
|
||||
BlockingQueue<HG_Msg> m_scannerEvents;
|
||||
|
|
|
@ -36,10 +36,10 @@ MultiFrameCapture::MultiFrameCapture(ScannerGlue glue,std::shared_ptr<FpgaComm>
|
|||
|
||||
////////////////默认300dpi 和灰度设置
|
||||
resolution_(DPI_300),
|
||||
cis_width_(WIDTH),
|
||||
cis_height_(HEIGHT),
|
||||
v4l2_width_(WIDTH),
|
||||
v4l2_height_(HEIGHT),
|
||||
pixels_width_(WIDTH),
|
||||
pixels_height_(HEIGHT),
|
||||
fpga_height_(HEIGHT),
|
||||
paper_size_((unsigned int)PaperSize::G400_AUTO),
|
||||
color_mode_(GRAY),
|
||||
is_correct_(0),
|
||||
|
@ -88,7 +88,7 @@ void MultiFrameCapture::SetParent(void *scanner)
|
|||
|
||||
void MultiFrameCapture::open()
|
||||
{
|
||||
int ret = video->open_device(cis_width_,cis_height_);
|
||||
int ret = video->open_device(v4l2_width_,v4l2_height_);
|
||||
if(ret < -1)
|
||||
return;
|
||||
|
||||
|
@ -106,7 +106,12 @@ void MultiFrameCapture::snap()
|
|||
#ifndef TEST_SIMCAP
|
||||
std::lock_guard<std::mutex> m_lock(m_mtx_snap);
|
||||
b_stop_snap = b_end_snap = false;
|
||||
|
||||
// if (resolution_ == DPI_600)
|
||||
// {
|
||||
// this_thread::sleep_for(std::chrono::milliseconds(30));
|
||||
// }
|
||||
|
||||
|
||||
video->HtCamStartVideoCapturing();
|
||||
|
||||
snaped_index++;
|
||||
|
@ -140,21 +145,31 @@ void *MultiFrameCapture::readFrameTest(int timeout)
|
|||
{
|
||||
return nullptr;
|
||||
}
|
||||
#include<math.h>
|
||||
uint32_t MultiFrameCapture::compute_frame(int paper_size,int dpi)
|
||||
{
|
||||
SIZE size = GetPaperSize((PaperSize)paper_size,dpi);
|
||||
int val = size.cy /cis_height_ + 1; //1:可能会被四舍五入,只能大不能小
|
||||
int cnt = color_mode_ ? val * 3 : val; //val * 3 彩色设置 513 但是采集实际高度是513 / 3
|
||||
return cnt; //四舍五入的情况下再多去一帧
|
||||
int val = ceil((float)size.cy /(float)pixels_height_);
|
||||
return val + 1;
|
||||
}
|
||||
void MultiFrameCapture::compute_height(int width,int height)
|
||||
{
|
||||
//////这块配置一定要注意
|
||||
v4l2_width_ = resolution_ == 0 ? width * 2 : width; //宽 :DPI不变下 彩色灰度是一样的
|
||||
//width_ = paper_size_ == PaperSize::G400_MAXSIZE || paper_size_ ==PaperSize::G400_MAXAUTO &&
|
||||
v4l2_height_ = height;
|
||||
|
||||
pixels_width_ = color_mode_ == 1 ? v4l2_width_ * 3 : v4l2_width_;
|
||||
pixels_height_ = color_mode_ == 1 ? v4l2_height_ / 3 : v4l2_height_;
|
||||
}
|
||||
SIZE MultiFrameCapture::GetPaperSize(PaperSize paper, int dpi)
|
||||
{
|
||||
if (paper_map_.find(paper) != paper_map_.end())
|
||||
{
|
||||
SIZE resize{2338,3307};
|
||||
SIZE resize{2480,3507};
|
||||
resize.cx = paper_map_[paper].cx * dpi / 25.4;
|
||||
resize.cy = paper_map_[paper].cy * dpi / 25.4;
|
||||
printf("resize.cx:%d resize.cy:%d\r\n",resize.cy / cis_height_,resize.cx);
|
||||
printf("resize.cx:%d resize.cy:%d\r\n",resize.cx,resize.cy);
|
||||
return resize;
|
||||
}
|
||||
return SIZE{2338, 3307};
|
||||
|
@ -175,30 +190,27 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
|
|||
is_correct_ = config.params.isCorrect;
|
||||
paper_size_ = config.params.pageSize;
|
||||
is_double_paper_ = config.params.doubleFeeded;
|
||||
|
||||
cis_width_ = resolution_ == 0 ? WIDTH * 2 : WIDTH; //宽 :DPI不变下 彩色灰度是一样的
|
||||
//width_ = paper_size_ == PaperSize::G400_MAXSIZE || paper_size_ ==PaperSize::G400_MAXAUTO &&
|
||||
cis_height_ = HEIGHT;
|
||||
|
||||
pixels_width_ = color_mode_ == 1 ? cis_width_ * 3 : cis_width_;
|
||||
pixels_height_ = color_mode_ == 1 ? cis_height_ / 3 : cis_height_;
|
||||
//width_ = paper_size_ == PaperSize::G400_MAXSIZE || paper_size_ ==PaperSize::G400_MAXAUTO &&
|
||||
|
||||
|
||||
int height = resolution_ == DPI_600 ? 1200 : 660;
|
||||
|
||||
compute_height(WIDTH , height);
|
||||
|
||||
video->HtCamSetClolr(color_mode_);
|
||||
video->HtCamSetDpi(resolution_);
|
||||
|
||||
|
||||
|
||||
FPGAConfigParam fpgaparam = GetFpgaparam(config_dpi, config_color);
|
||||
video->HtCamSetSpTime(fpgaparam.Sp, 49); // 2344 灰色 //2023-8-10 最新2650
|
||||
video->HtCamSetSpTime(fpgaparam.Sp, fpgaparam.MaxExp); // 2344 灰色 //2023-8-10 最新2650
|
||||
if (color_mode_)
|
||||
{
|
||||
video->HtCamSetSpTime2(fpgaparam.HRatio);
|
||||
}
|
||||
|
||||
video->HtCamSetStSp(fpgaparam.MaxBright);
|
||||
|
||||
configFPGAParam(config_color, config_dpi);
|
||||
printf(" -----------------------resolution = %d color_mode_ = %d config_dpi:%d------------------\r\n",resolution_, color_mode_,config_dpi);
|
||||
|
||||
{
|
||||
int val = config.params.dpi == 3 ? 600 :(config.params.dpi == 2?300:200);
|
||||
printf("val = %d\r\n",val);
|
||||
|
@ -206,40 +218,18 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
|
|||
video->HtCamSetFrameCnt(cnt);
|
||||
printf(" -----------------------设置帧数:%d------------------\r\n",cnt);
|
||||
}
|
||||
//if(!lut.empty())
|
||||
//lut.release();
|
||||
|
||||
//calcLUT(config.params.dpi,config.params.isColor,true,lut);
|
||||
printf("lut channels = %d lut width = %d \n",lut.channels(),lut.cols);
|
||||
|
||||
printf("颜色模式:%s\r\n",color_mode_== COLOR ? "彩色":"灰色");
|
||||
printf("分辨率:%d\r\n",resolution_ == DPI_600?600:300);
|
||||
printf("V4L2宽:%d 高:%d\r\n",v4l2_width_,v4l2_height_);
|
||||
printf("像素宽:%d 高: %d\r\n",pixels_width_,pixels_height_);
|
||||
printf("fpga_height_:%d\r\n", fpga_height_);
|
||||
|
||||
printf("resolution_:%d\r\n", resolution_);
|
||||
printf("color_mode_:%d\r\n", color_mode_);
|
||||
printf("paper_size_:%d\r\n", paper_size_);
|
||||
printf("cis_width_:%d\r\n", cis_width_);
|
||||
printf("cis_height_:%d\r\n", cis_height_);
|
||||
printf("pixels_width_:%d\r\n", pixels_width_);
|
||||
printf("pixels_height_:%d\r\n", pixels_height_);
|
||||
|
||||
#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.bmp", "rb");
|
||||
else
|
||||
f_img = fopen("/home/root/gray.bmp", "rb");
|
||||
|
||||
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 = (unsigned char*)malloc(m_test_pimg_len);
|
||||
fseek(f_img, 0, SEEK_SET);
|
||||
fread(m_test_pimg,1,m_test_pimg_len,f_img);
|
||||
printf("!!!!!!!!!! info: reading image len = %d m_test_pimg = %p \r\n", m_test_pimg_len, m_test_pimg);
|
||||
fclose(f_img);
|
||||
#endif
|
||||
printf("paper_size_:%d\r\n", paper_size_);
|
||||
}
|
||||
|
||||
void MultiFrameCapture::createCorrect(int correctmode)
|
||||
|
@ -274,6 +264,8 @@ bool MultiFrameCapture::capturerImage()
|
|||
|
||||
void MultiFrameCapture::waitsnapdone(int state)
|
||||
{
|
||||
StopWatch sw;
|
||||
sw.reset();
|
||||
#ifdef TEST_SIMCAP
|
||||
HG_JpegCompressInfo info;
|
||||
info.DataLength = m_test_pimg_len;
|
||||
|
@ -295,7 +287,7 @@ void MultiFrameCapture::waitsnapdone(int state)
|
|||
m_cv_snapdone.wait(lock);
|
||||
b_end_snap = true;
|
||||
m_frameinfos.Put(info);
|
||||
//printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait done \n");
|
||||
printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait done :%f \n",sw.elapsed_ms());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -380,29 +372,27 @@ int MultiFrameCapture::color()
|
|||
void MultiFrameCapture::snaprun()
|
||||
{
|
||||
//frame_info 发送得数据信息 channels 图像位深 num 需要取得帧数 time_out读图超时时间设置
|
||||
auto snap_func = [this](V4L2_DATAINFO_Ex frame_info, int channels,int time_out,int i)
|
||||
auto snap_func = [this](V4L2_DATAINFO_Ex frame_info, int channels,int &time_out,int i)
|
||||
{
|
||||
StopWatch sw;
|
||||
sw.reset();
|
||||
unsigned char *data = NULL;
|
||||
printf("设置超时时间:%d\r\n",time_out);
|
||||
int ret = video->HtCamReadCaptureFrame((void **)&data, time_out);
|
||||
|
||||
if (ret == -1 || ret == -2)
|
||||
{
|
||||
printf("----------------获取图像超时或者失败------------\r\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
time_out = resolution_ == DPI_600 ? sw.elapsed_ms() + 600 : sw.elapsed_ms() + 20;
|
||||
uint32_t sendLine = video->HtCamReadFpgaRegs(0x000e);////0x000e 取出来的实际行数
|
||||
//printf("--------------fpga send line ------------:%d\r\n",sendLine);
|
||||
printf("--------------fpga send line ------------:%d \r\n",sendLine);
|
||||
|
||||
if (data)
|
||||
{
|
||||
//cv::Mat mat = cv::Mat(frame_info.height, frame_info.width, CV_8UC1, data, cv::Mat::AUTO_STEP);
|
||||
//cv::imwrite("/home/root/test.png", mat);
|
||||
|
||||
//cv::Mat mat = cv::Mat(317, 15552, CV_8UC1, data, cv::Mat::AUTO_STEP);
|
||||
|
||||
//cv::imwrite("/home/root/test.bmp", mat);
|
||||
// printf("--------------frame_index------------:%d\r\n",frame_index);
|
||||
if (i == 5)
|
||||
if (i == 2)
|
||||
{
|
||||
//cv::imwrite("/home/root/test.bmp", mat);
|
||||
// cv::imwrite("/home/root/test.bmp", mat);
|
||||
//cv::imwrite("/home/root/test.bmp", mat);
|
||||
//savebitmap(data,15552,512,"1.bmp");
|
||||
}
|
||||
|
@ -412,9 +402,10 @@ void MultiFrameCapture::snaprun()
|
|||
//HG_JpegCompressInfo info = cmp.GetCompressedImg(mat);
|
||||
|
||||
HG_JpegCompressInfo info ;
|
||||
|
||||
info.pJpegData = (unsigned char *)malloc(frame_info.height * frame_info.width);
|
||||
memcpy(info.pJpegData , data , frame_info.height * frame_info.width);
|
||||
|
||||
info.pJpegData = data;//(unsigned char *)malloc(frame_info.height * frame_info.width);
|
||||
//memcpy(info.pJpegData , data , frame_info.height * frame_info.width);
|
||||
|
||||
info.DataLength = frame_info.width * frame_info.height;
|
||||
info.first_frame = frame_info.first_frame;
|
||||
info.last_frame = frame_info.last_frame;
|
||||
|
@ -424,8 +415,7 @@ void MultiFrameCapture::snaprun()
|
|||
info.height = frame_info.height;
|
||||
|
||||
printf("获取数据 width:%d height:%d is_first:%d is_last:%d DataLength:%d\r\n",frame_info.width,frame_info.height,info.first_frame,info.last_frame,info.DataLength);
|
||||
|
||||
//cv::imwrite("/home/root/opencv"+to_string(cnt_++)+".bmp",frame.mat);
|
||||
|
||||
m_glue.m_imageready(info);
|
||||
|
||||
//m_frameinfos.Put(frame_info);
|
||||
|
@ -434,9 +424,11 @@ void MultiFrameCapture::snaprun()
|
|||
return ret;
|
||||
};
|
||||
|
||||
//static int ti = 0;
|
||||
static int ti = 100;
|
||||
while (b_snap_run)
|
||||
{
|
||||
StopWatch sw;
|
||||
|
||||
std::unique_lock<std::mutex> lock(m_mtx_snap);
|
||||
m_cv_snap.wait(lock);
|
||||
|
||||
|
@ -453,50 +445,58 @@ void MultiFrameCapture::snaprun()
|
|||
int channels = color_mode_ == 1 ? 3 : 1;
|
||||
int color_mode = video->HtCamGetColorMode();
|
||||
int func_sig = 0;
|
||||
int time_out = color_mode == 1 ? 800 : 400;
|
||||
int time_out = resolution_ == DPI_600 ? 400 : 200; ///这个时间是根据每帧的数据量来进行调测的
|
||||
int time_out_cnt = 0;
|
||||
|
||||
uint32_t frame_num = 0;
|
||||
uint32_t frame_cnt = 0;
|
||||
|
||||
video->HtCamGetFrameCnt(frame_cnt);
|
||||
frame_info.frame_index = frame_cnt + 1;
|
||||
//video->HtCamSetVsnpTime(6);
|
||||
//printf("设置 vsnp:%d\r\n",ti);
|
||||
//ti++;
|
||||
|
||||
video->HtCamGetFrameCnt(frame_cnt);
|
||||
|
||||
printf("获取设置的帧数:%d\r\n",frame_cnt);
|
||||
frame_info.frame_index = frame_cnt + 1;
|
||||
// video->HtCamSetVsnpTime(ti);
|
||||
// printf("设置 vsnp:%d\r\n",ti);
|
||||
//ti++;
|
||||
// video->HtCamSetStSp(ti);
|
||||
// printf("设置 StSp%d\r\n",ti);
|
||||
// ti++;
|
||||
int mill = 0; //= resolution_ == DPI_600 ? 30 : 25;
|
||||
//mill = color_mode == 1?mill*3:mill;
|
||||
printf("mill:%d\r\n",mill);
|
||||
// printf("--------------------- frame_info.width ------------------ :%d\r\n",frame_info.width );
|
||||
// printf("--------------------- frame_info.height ------------------ :%d\r\n",frame_info.height );
|
||||
// printf("--------------------- frame_info.pixtype ------------------ :%d\r\n",frame_info.pixtype );
|
||||
// printf("--------------------- frame_info.dpi ------------------ :%d\r\n",frame_info.dpi );
|
||||
|
||||
|
||||
for (size_t i = 1; i <= frame_cnt; i++)
|
||||
sw.reset();
|
||||
for (size_t i = 0; i <= frame_cnt ; i++) //frame_cnt -1 目前最好一帧采集会超时 所以多采集一帧
|
||||
{
|
||||
printf("***********设置的帧数:%d 正在采集第[%d]帧************\r\n",frame_info.frame_index,i);
|
||||
|
||||
frame_info.first_frame = i == 1 ? true : false;
|
||||
frame_info.first_frame = i == 0 ? true : false;
|
||||
frame_info.last_frame = i == frame_cnt ? true : false;
|
||||
|
||||
func_sig = snap_func(frame_info, channels,time_out,i);
|
||||
if (func_sig == -1 ) //当前帧取图超时,在取一次!!! 一直超时 不就卡死了??? 这个地方还是需要加个时间限制几秒内一帧未取出就退了,返回异常状态吧?
|
||||
{
|
||||
i--;
|
||||
time_out +=200;
|
||||
time_out_cnt ++;
|
||||
if (time_out_cnt >=5)
|
||||
{
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// if (func_sig == -1 ) //当前帧取图超时,在取一次!!! 一直超时 不就卡死了??? 这个地方还是需要加个时间限制几秒内一帧未取出就退了,返回异常状态吧?
|
||||
// {
|
||||
// i--;
|
||||
// time_out +=200;
|
||||
// time_out_cnt ++;
|
||||
// if (time_out_cnt >=5)
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
// continue;
|
||||
// }
|
||||
|
||||
if (b_stop_snap)
|
||||
{
|
||||
video->HtCamGetFrameNum(frame_num);
|
||||
int val = frame_num - i; //剩余还未采集的帧数
|
||||
int ind = i + 1; //只是计数确认采集到低多少帧,无其他实用意义
|
||||
int ind = i; //已采集了的帧数
|
||||
int val = frame_num - ind; //剩余还未采集的帧数
|
||||
|
||||
while (val)
|
||||
{
|
||||
frame_info.last_frame = val == 1 ? true : false;
|
||||
|
@ -504,19 +504,20 @@ void MultiFrameCapture::snaprun()
|
|||
func_sig = snap_func(frame_info, channels,time_out ,ind);//同上面一样
|
||||
printf("-----------当前采集到第:[%d]帧 CIS总共采集[%d]帧 -------\r\n",ind,frame_num);
|
||||
|
||||
if (func_sig == -1 )
|
||||
{
|
||||
time_out +=200;
|
||||
time_out_cnt ++;
|
||||
if (time_out_cnt >=5)
|
||||
{
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
val--;
|
||||
ind++;
|
||||
this_thread::sleep_for(std::chrono::milliseconds(65));
|
||||
// if (func_sig == -1 )
|
||||
// {
|
||||
// time_out +=200;
|
||||
// time_out_cnt ++;
|
||||
// if (time_out_cnt >=5)
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
// continue;
|
||||
// }
|
||||
val--;
|
||||
ind++;
|
||||
|
||||
//this_thread::sleep_for(std::chrono::milliseconds(mill));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -526,14 +527,14 @@ void MultiFrameCapture::snaprun()
|
|||
////////////////////////////采集过快会导致队列堆积/////////////////////////
|
||||
////////////////////////////所以这个延时是采集速度和传图速度的差值/////////////////////////
|
||||
////////////////////////////DPI 颜色不同 会导致数据大小不同所以这个地方延时肯定不一样 目前 60是200dpi/////////////////////////
|
||||
int mill = resolution_ == DPI_600 ? 60 * 10 : 60;
|
||||
printf("mill:%d\r\n",mill);
|
||||
this_thread::sleep_for(std::chrono::milliseconds(mill));
|
||||
|
||||
// if(resolution_ == DPI_600)
|
||||
// this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||
}
|
||||
|
||||
uint32_t in=0;
|
||||
|
||||
video->HtCamStopVideoCapturing();
|
||||
printf("---------- 退出图像采集流程 ----------\r\n");
|
||||
video->HtCamGetFrameNum(in);
|
||||
printf("----------整张采集结束 总共采集帧数:%d 耗时:%f----------\r\n",in,sw.elapsed_ms());
|
||||
|
||||
m_cv_snapdone.notify_all();
|
||||
b_end_snap = true;
|
||||
|
@ -548,7 +549,6 @@ void MultiFrameCapture::updatesnapstatus(int papertype)
|
|||
|
||||
void MultiFrameCapture::procimage()
|
||||
{
|
||||
|
||||
static int idx = 0;
|
||||
ThreadPool prc_pool(4);
|
||||
std::queue<std::future<cv::Mat>> prc_fu;
|
||||
|
@ -782,7 +782,7 @@ bool MultiFrameCapture::saveLutImg(int dpi, int mode, bool black)
|
|||
{
|
||||
int k = (3 * s + x);
|
||||
// int diff = LIGHT_DIFF(*((double *)values + k));
|
||||
int diff = 170 - *((double *)values + k);;//param.MaxBright - *((double *)values + k);
|
||||
int diff = 210 - *((double *)values + k);;//param.MaxBright - *((double *)values + k);
|
||||
log += " 明场:" + std::to_string(k) + ";diff:" + std::to_string(diff) + "\r\n";
|
||||
|
||||
double step = diff * radio;
|
||||
|
@ -848,7 +848,7 @@ bool MultiFrameCapture::saveLutImg(int dpi, int mode, bool black)
|
|||
{
|
||||
int *exposures = (int *)(s == 0 ? param.ExposureF : param.ExposureB);
|
||||
// int diff = LIGHT_DIFF(values[s]);
|
||||
int diff = 170 - values[s];;//param.MaxBright - values[s];
|
||||
int diff = 200 - values[s];
|
||||
double step = diff * radio;
|
||||
log += " 明场:" + to_string(s) + ";diff:" + to_string(diff) + "\r\n";
|
||||
int preStep = expStep[s][0];
|
||||
|
@ -932,76 +932,67 @@ void MultiFrameCapture::correctcolor(int correctmode)
|
|||
{
|
||||
StopWatch sw_correct;
|
||||
std::string loginfo = "Start Correctcolor 300DPI Gray \r\n";
|
||||
//printf("----------- %s \n",loginfo.c_str());
|
||||
//creatcorrectconfig(0x02, IMAGE_GRAY);
|
||||
//printf("----------- done \n",loginfo.c_str());
|
||||
|
||||
loginfo = "Start Correctcolor 300DPI COLOR \r\n";
|
||||
printf("----------- %s \n",loginfo.c_str());
|
||||
creatcorrectconfig(0x02, IMAGE_COLOR);
|
||||
printf("----------- done \n",loginfo.c_str());
|
||||
|
||||
|
||||
// if ((correctmode == 0) || (correctmode == 2))
|
||||
// {
|
||||
// loginfo = "Start Correctcolor 200DPI COLOR \r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// creatcorrectconfig(0x01, IMAGE_COLOR);
|
||||
// loginfo = "-----------200DPI COLOR Correct Done----------- \r\n\r\n ";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// }
|
||||
// if ((correctmode == 0) || (correctmode == 1))
|
||||
// {
|
||||
// loginfo = "Start Correctcolor 200DPI GRAY \r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// creatcorrectconfig(0x01, IMAGE_GRAY);
|
||||
// loginfo = "-----------200DPI Gray Correct Done----------- \r\n\r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// }
|
||||
// if ((correctmode == 0) || (correctmode == 4))
|
||||
// {
|
||||
// loginfo = " Start Correctcolor 300DPI COLOR \r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// creatcorrectconfig(0x02, IMAGE_COLOR);
|
||||
// loginfo = "-----------300DPI COLOR Correct Done----------- \r\n\r\n ";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// }
|
||||
// if ((correctmode == 0) || (correctmode == 3))
|
||||
// {
|
||||
// loginfo = "Start Correctcolor 300DPI GRAY \r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// creatcorrectconfig(0x02, IMAGE_GRAY);
|
||||
// loginfo = "-----------300DPI Gray Correct Done----------- \r\n\r\n ";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// }
|
||||
// if ((correctmode == 0) || (correctmode == 6))
|
||||
// {
|
||||
// loginfo = "Start Correctcolor 600DPI COLOR \r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// creatcorrectconfig(0x03, IMAGE_COLOR);
|
||||
// loginfo = "-----------600DPI COLOR Correct Done----------- \r\n\r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// }
|
||||
// if ((correctmode == 0) || (correctmode == 5))
|
||||
// {
|
||||
// loginfo = " Start Correctcolor 600DPI GRAY \r\n";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// creatcorrectconfig(0x03, IMAGE_GRAY);
|
||||
// loginfo = "-----------600DPI Gray Correct Done----------- \r\n\r\n ";
|
||||
// if (m_glue.m_deviceevent)
|
||||
// m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
// }
|
||||
if ((correctmode == 0) || (correctmode == 2))
|
||||
{
|
||||
loginfo = "Start Correctcolor 200DPI COLOR \r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
creatcorrectconfig(0x01, IMAGE_COLOR);
|
||||
loginfo = "-----------200DPI COLOR Correct Done----------- \r\n\r\n ";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
}
|
||||
if ((correctmode == 0) || (correctmode == 1))
|
||||
{
|
||||
loginfo = "Start Correctcolor 200DPI GRAY \r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
creatcorrectconfig(0x01, IMAGE_GRAY);
|
||||
loginfo = "-----------200DPI Gray Correct Done----------- \r\n\r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
}
|
||||
if ((correctmode == 0) || (correctmode == 4))
|
||||
{
|
||||
loginfo = " Start Correctcolor 300DPI COLOR \r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
creatcorrectconfig(0x02, IMAGE_COLOR);
|
||||
loginfo = "-----------300DPI COLOR Correct Done----------- \r\n\r\n ";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
}
|
||||
if ((correctmode == 0) || (correctmode == 3))
|
||||
{
|
||||
loginfo = "Start Correctcolor 300DPI GRAY \r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
creatcorrectconfig(0x02, IMAGE_GRAY);
|
||||
loginfo = "-----------300DPI Gray Correct Done----------- \r\n\r\n ";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
}
|
||||
if ((correctmode == 0) || (correctmode == 6))
|
||||
{
|
||||
loginfo = "Start Correctcolor 600DPI COLOR \r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
creatcorrectconfig(0x03, IMAGE_COLOR);
|
||||
loginfo = "-----------600DPI COLOR Correct Done----------- \r\n\r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
}
|
||||
if ((correctmode == 0) || (correctmode == 5))
|
||||
{
|
||||
loginfo = " Start Correctcolor 600DPI GRAY \r\n";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
creatcorrectconfig(0x03, IMAGE_GRAY);
|
||||
loginfo = "-----------600DPI Gray Correct Done----------- \r\n\r\n ";
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, loginfo);
|
||||
}
|
||||
if ((correctmode < 0) || (correctmode > 6))
|
||||
{
|
||||
loginfo = "不支持的校正模式...\r\n";
|
||||
|
@ -1027,13 +1018,10 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
|
|||
|
||||
resolution_ = dpi == 3 ? DPI_600 : DPI_300; //0:600dpi 1:300dpi config.params.dpi = 2||3 pc 2代表300 3代表600
|
||||
color_mode_ = mode == 1 ? COLOR : GRAY;
|
||||
cis_width_ = resolution_ == 0 ? WIDTH * 2 : WIDTH; //宽 :DPI不变下 彩色灰度是一样的
|
||||
cis_height_ = mode == 0x01 ? 60 * 3 : 60;
|
||||
pixels_width_ = color_mode_ == 1 ? cis_width_ * 3 : cis_width_;
|
||||
pixels_height_ = color_mode_ == 1 ? cis_height_ / 3 : cis_height_;
|
||||
|
||||
compute_height(WIDTH , HEIGHT);
|
||||
|
||||
|
||||
|
||||
int config_dpi = resolution_ == DPI_600 ? 3 : 2;
|
||||
int config_color = color_mode_ ==COLOR ? 1:0;
|
||||
|
||||
|
@ -1060,23 +1048,19 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
|
|||
video->HtCamSetFrameCnt(val);
|
||||
printf(" -----------------------设置帧数:%d------------------\r\n",val);
|
||||
}
|
||||
|
||||
|
||||
printf("颜色模式:%s\r\n",color_mode_== COLOR ? "彩色":"灰色");
|
||||
printf("分辨率:%d\r\n",resolution_ == DPI_600?600:300);
|
||||
printf("采集宽:%d 高:%d\r\n",cis_width_,cis_height_);
|
||||
printf("V4L2宽:%d 高:%d\r\n",v4l2_width_,v4l2_height_);
|
||||
printf("像素宽:%d 高: %d\r\n",pixels_width_,pixels_height_);
|
||||
|
||||
printf("resolution_:%d\r\n", resolution_);
|
||||
printf("color_mode_:%d\r\n", color_mode_);
|
||||
printf("paper_size_:%d\r\n", paper_size_);
|
||||
printf("paper_size_:%d\r\n", paper_size_);
|
||||
printf("cis_width_:%d\r\n", cis_width_);
|
||||
printf("cis_height_:%d\r\n", cis_height_);
|
||||
printf("pixels_width_:%d\r\n", pixels_width_);
|
||||
printf("pixels_height_:%d\r\n", pixels_height_);
|
||||
|
||||
|
||||
int ret = video->open_device(cis_width_,cis_height_);
|
||||
int ret = video->open_device(v4l2_width_,v4l2_height_);
|
||||
if(ret < -1)
|
||||
return;
|
||||
|
||||
|
@ -1086,7 +1070,6 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
|
|||
{
|
||||
i = video->HtCamReadCaptureFrame((void **)&buf, 500);
|
||||
}
|
||||
//video->close_video();
|
||||
|
||||
printf("opened video with width = %d height = %d time eplased = %.2f pbuffer = %p \n", width, 60 * 2, swwv4l2open.elapsed_ms(),buf);
|
||||
}
|
||||
|
@ -1109,7 +1092,7 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
|
|||
int config_dpi = resolution_ == DPI_600 ? 3 : 2;
|
||||
int config_color = color_mode_ ==COLOR ? 1:0;
|
||||
|
||||
configFPGAParam(config_color, config_dpi);
|
||||
configFPGAParam(mode, dpi);
|
||||
// ftt.append_log(log);
|
||||
printf("log :%s\r\n",log.c_str());
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
|
@ -1119,43 +1102,33 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
|
|||
video->HtCamChangeExposureValueB(F);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
|
||||
|
||||
|
||||
video->HtCamStartVideoCapturing();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
isDone = saveLutImg(dpi, mode, true); // 0 color_black 1 color_white 2 gray_balck 3 gray_white
|
||||
video->HtCamStopVideoCapturing();
|
||||
|
||||
//video->close_device();
|
||||
this_thread::sleep_for(std::chrono::milliseconds(200));
|
||||
i++;
|
||||
|
||||
//return ;
|
||||
i++;
|
||||
}
|
||||
|
||||
isDone = false;
|
||||
formatStep();
|
||||
while (!isDone) // 后明场
|
||||
{
|
||||
string log = "==============================第" + to_string(i) + "次===============================\r\n";
|
||||
// ftt.append_log(log);
|
||||
|
||||
if (m_glue.m_deviceevent)
|
||||
m_glue.m_deviceevent((int)HG_ScannerStatus::AUTO_FLATTING, log);
|
||||
configFPGAParam(mode, dpi);
|
||||
|
||||
// ftt.append_log(log);
|
||||
|
||||
printf("log :%s\r\n", log.c_str());
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
|
||||
//unsigned int F[3] = {1, 1, 1};
|
||||
//video->HtCamChangeExposureValueF(F);
|
||||
//video->HtCamChangeExposureValueB(F);
|
||||
//std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
|
||||
video->HtCamStartVideoCapturing();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
isDone = saveLutImg(dpi, mode, false); // 0 color_black 1 color_white 2 gray_balck 3 gray_white
|
||||
video->HtCamStopVideoCapturing();
|
||||
// video->close_device();
|
||||
this_thread::sleep_for(std::chrono::seconds(2));
|
||||
i++;
|
||||
}
|
||||
|
@ -1164,65 +1137,3 @@ void MultiFrameCapture::creatcorrectconfig(int dpi, int mode)
|
|||
video->close_device();
|
||||
}
|
||||
|
||||
// void MultiFrameCapture::myFloodFill(cv::Mat& image, bool isTwoSide)
|
||||
// {
|
||||
// int w = image.cols;
|
||||
// int h = image.rows;
|
||||
// cv::Vec3b lt, rt, lb, rb;
|
||||
// const double threshold = 10;
|
||||
|
||||
// if (!isTwoSide)
|
||||
// {
|
||||
// lt = image.channels() == 3 ? image.at<cv::Vec3b>(0, 0) : image.at<uchar>(0, 0);
|
||||
// if (lt[0] < threshold && lt[1] < threshold && lt[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(0, 0), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// rt = image.channels() == 3 ? image.at<cv::Vec3b>(0, w - 1) : image.at<uchar>(0, w - 1);
|
||||
// if (rt[0] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w - 1, 0), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// lb = image.channels() == 3 ? image.at<cv::Vec3b>(h - 1, 0) : image.at<uchar>(h - 1, 0);
|
||||
// if (lb[0] < threshold)
|
||||
// cv::floodFill(image, cv::Point(0, h - 1), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// rb = image.channels() == 3 ? image.at<cv::Vec3b>(h - 1, w - 1) : image.at<uchar>(h - 1, w - 1);
|
||||
// if (rb[0] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w - 1, h - 1), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// int w_ = w / 2;
|
||||
// lt = image.channels() == 3 ? image.at<cv::Vec3b>(0, 0) : image.at<uchar>(0, 0);
|
||||
// if (lt[0] < threshold && lt[1] < threshold && lt[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(0, 0), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// rt = image.channels() == 3 ? image.at<cv::Vec3b>(0, w_ - 1) : image.at<uchar>(0, w_ - 1);
|
||||
// if (rt[0] < threshold && rt[1] < threshold && rt[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w_ - 1, 0), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// lb = image.channels() == 3 ? image.at<cv::Vec3b>(h - 1, 0) : image.at<uchar>(h - 1, 0);
|
||||
// if (lb[0] < threshold && lb[1] < threshold && lb[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(0, h - 1), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// rb = image.channels() == 3 ? image.at<cv::Vec3b>(h - 1, w_ - 1) : image.at<uchar>(h - 1, w_ - 1);
|
||||
// if (rb[0] < threshold && rb[1] < threshold && rb[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w_ - 1, h - 1), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// lt = image.channels() == 3 ? image.at<cv::Vec3b>(0, w_) : image.at<uchar>(0, w_);
|
||||
// if (lt[0] < threshold && lt[1] < threshold && lt[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w_, 0), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// rt = image.channels() == 3 ? image.at<cv::Vec3b>(0, w - 1) : image.at<uchar>(0, w - 1);
|
||||
// if (rt[0] < threshold && rt[1] < threshold && rt[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w - 1, 0), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// lb = image.channels() == 3 ? image.at<cv::Vec3b>(h - 1, w_) : image.at<uchar>(h - 1, w_);
|
||||
// if (lb[0] < threshold && lb[1] < threshold && lb[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w_, h - 1), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
|
||||
// rb = image.channels() == 3 ? image.at<cv::Vec3b>(h - 1, w - 1) : image.at<uchar>(h - 1, w - 1);
|
||||
// if (rb[0] < threshold && rb[1] < threshold && rb[2] < threshold)
|
||||
// cv::floodFill(image, cv::Point(w - 1, h - 1), cv::Scalar::all(255), 0, cv::Scalar::all(5), cv::Scalar::all(40), cv::FLOODFILL_FIXED_RANGE);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ class Gpio;
|
|||
class GpioOut;
|
||||
|
||||
#define WIDTH 5184
|
||||
#define HEIGHT 650 //只能为3的倍数
|
||||
#define HEIGHT 951 //只能为3的倍数
|
||||
#define DPI_600 0
|
||||
#define DPI_300 1
|
||||
#define COLOR 1
|
||||
|
@ -85,14 +85,18 @@ private:
|
|||
private:
|
||||
|
||||
unsigned int resolution_; // 分辨率 //0:600dpi 1:300dpi
|
||||
unsigned int cis_width_; // CIS 图像宽
|
||||
unsigned int cis_height_; // CIS 图像高
|
||||
|
||||
unsigned int v4l2_width_; // v4l2 图像宽
|
||||
unsigned int v4l2_height_; // v4l2 图像高
|
||||
unsigned int pixels_height_; // opencv需要生成的高
|
||||
unsigned int pixels_width_ ; // opencv需要生成的宽
|
||||
unsigned int fpga_height_; // PGPA 需要的高的是三倍数 ,发950 就是指951
|
||||
|
||||
unsigned int paper_size_; // 纸张大小
|
||||
unsigned int color_mode_; // 颜色模式
|
||||
unsigned int is_correct_; // 是否校正
|
||||
unsigned int is_double_paper_; // 是否启动双张检测
|
||||
|
||||
|
||||
cv::Mat lut;
|
||||
std::map<PaperSize, SIZE> paper_map_
|
||||
|
@ -115,6 +119,7 @@ private:
|
|||
|
||||
SIZE GetPaperSize(PaperSize paper, int dpi);
|
||||
uint32_t compute_frame(int paper_size,int dpi); //计算固定幅面需要采集的帧数
|
||||
void compute_height(int width,int height); //在open 之前调用
|
||||
public:
|
||||
MultiFrameCapture(ScannerGlue glue, std::shared_ptr<FpgaComm> fpga, CISVendor vendor);
|
||||
|
||||
|
@ -124,6 +129,8 @@ public:
|
|||
|
||||
virtual void open() override;
|
||||
|
||||
////这个地方非常重要 目的是检测到有纸之后 ,继续走纸接近CIS 在启动采集 ,但是这个地方风险也很大,需要调的尽量完美,如果出现最上面几行图像和最下面图像不显示请看一下这里吧!!!!
|
||||
////走纸速度影响吗??? YES
|
||||
virtual void snap() override;
|
||||
|
||||
virtual void stopsnap(bool autosize) override;
|
||||
|
|
61
Scanner.cpp
61
Scanner.cpp
|
@ -113,8 +113,8 @@ void Scanner::updateSpeedMode(int speed)
|
|||
m_scaninfo = GetScanInfoFromJson();
|
||||
if(m_scaninfo.SpeedMode==0)
|
||||
m_scaninfo.SpeedMode=3;
|
||||
LOG("Scanner SET updateSpeedMode %d------ \n",m_scaninfo.SpeedMode);
|
||||
unsigned int t_dpi=m_config.params.dpi;
|
||||
printf("速度模式:%d dpi:%d 颜色:%d \n",m_scaninfo.SpeedMode,m_config.params.dpi,m_config.params.isColor);
|
||||
unsigned int t_dpi = m_config.params.dpi;
|
||||
// if(typeid(*capturer)==typeid(MonoCapturer))
|
||||
// {
|
||||
// if(m_config.params.dpi==0x03&& m_scansysinfo->IsSmallRam())
|
||||
|
@ -122,9 +122,11 @@ void Scanner::updateSpeedMode(int speed)
|
|||
// else
|
||||
// t_dpi = m_config.params.dpi;
|
||||
// }
|
||||
//if(typeid(*capturer)==typeid(MultiFrameCapture))
|
||||
//if(m_config.params.pageSize == 17 || m_config.params.pageSize == 19) //长文稿采用600dpi模式扫描
|
||||
t_dpi = 1;
|
||||
if(typeid(*capturer)==typeid(MultiFrameCapture))
|
||||
if(m_config.params.pageSize == 17 || m_config.params.pageSize == 19) //长文稿采用600dpi模式扫描
|
||||
t_dpi = 3;
|
||||
|
||||
|
||||
motorCuozhi.speedChange(m_scaninfo.SpeedMode, t_dpi,m_config.params.isColor);
|
||||
motorZouzhi.speedChange(m_scaninfo.SpeedMode, t_dpi,m_config.params.isColor);
|
||||
}
|
||||
|
@ -238,8 +240,11 @@ void Scanner::runScan()
|
|||
m_config.params.pageSize==(int)PaperSize::G400_MAXAUTO ||
|
||||
m_config.params.pageSize==(int)PaperSize::G400_MAXSIZE;
|
||||
StopWatch sw;
|
||||
StopWatch sw1;
|
||||
StopWatch sw2;
|
||||
while (m_DstScannum > 0)
|
||||
{
|
||||
sw1.reset();
|
||||
m_isDoublePaper = false;
|
||||
m_jamPaper = false;
|
||||
m_jamIn = false;
|
||||
|
@ -288,30 +293,31 @@ void Scanner::runScan()
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
printf("检测到纸张的时间:%f\r\n",sw.elapsed_ms());//检测到纸张
|
||||
|
||||
capturer->snap();
|
||||
motorCuozhi.pauseWaitForThread();
|
||||
int i = 0;
|
||||
int max = 7;
|
||||
#ifdef G400
|
||||
if(m_config.params.pageSize >= (int)PaperSize::G400_LONGLETTER)
|
||||
max = m_scaninfo.SpeedMode>3?10:16;
|
||||
else
|
||||
max = m_scaninfo.SpeedMode>3?5:8;
|
||||
#else
|
||||
|
||||
if(m_config.params.pageSize >= (int)PaperSize::G400_LONGLETTER)
|
||||
max = m_scaninfo.SpeedMode>3?10:25;
|
||||
else
|
||||
max = m_scaninfo.SpeedMode>3?5:8;
|
||||
#endif
|
||||
|
||||
|
||||
max = m_config.params.dpi > 2 ? 30 : max * m_config.params.dpi;
|
||||
|
||||
if(m_config.params.pageSize == 17 || m_config.params.pageSize == 19)
|
||||
{
|
||||
max = 200;
|
||||
}
|
||||
|
||||
LOG("paper pauseWaitForThread \n");
|
||||
waitpapertime = 200;
|
||||
sw2.reset();
|
||||
while (!sensor->waitPaperOut(waitpapertime) && i < max)
|
||||
{
|
||||
|
||||
i++;
|
||||
if (!sensor->isPaperIn())
|
||||
{
|
||||
|
@ -319,6 +325,7 @@ void Scanner::runScan()
|
|||
break;
|
||||
}
|
||||
}
|
||||
printf("等待纸张出去?????????????%f\r\n",sw2.elapsed_ms());
|
||||
LOG("paper isPaperIn \n");
|
||||
if (i == max && sensor->isPaperIn())
|
||||
{
|
||||
|
@ -351,10 +358,14 @@ void Scanner::runScan()
|
|||
int dly_speed= (5 - m_scaninfo.SpeedMode)*10;
|
||||
int delay = m_config.params.dpi==0x02?70:(m_config.params.dpi==0x03?350: 20);
|
||||
if((m_config.params.pageSize == 17 || m_config.params.pageSize == 19)&&(delay < 350))
|
||||
{
|
||||
delay = 350;
|
||||
}
|
||||
|
||||
if(m_config.params.pageSize == 18)
|
||||
delay = std::max(delay,80);
|
||||
delay+=dly_speed;
|
||||
|
||||
delay += dly_speed;
|
||||
//LOG("AutoSize sleep_for delay=%d \n",delay);
|
||||
this_thread::sleep_for(std::chrono::milliseconds(delay));//200 80ms 600 260ms
|
||||
}
|
||||
|
@ -370,9 +381,9 @@ void Scanner::runScan()
|
|||
capturer->stopsnap(b_autosize);
|
||||
break;
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
//std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
}
|
||||
//std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||
|
||||
LOG("\nclose b_autosize %s\n",GetCurrentTimeStamp(2).c_str());
|
||||
capturer->stopsnap(b_autosize);
|
||||
capturer->waitsnapdone(m_isDoublePaper || m_jamPaper);//等待采集完成
|
||||
|
@ -389,15 +400,11 @@ void Scanner::runScan()
|
|||
break;
|
||||
}
|
||||
sw.reset();
|
||||
while (meminfo->GetMemoryUsed() > 85.0f||(m_config.params.dpi ==0x03 && capturer->getimageremain()>1)) //内存占用高于75%
|
||||
while (meminfo->GetMemoryUsed() > 90.0f||(m_config.params.dpi ==0x03 && capturer->getimageremain()>1)) //内存占用高于75%
|
||||
{
|
||||
if (sw.elapsed_s() < 50.0)
|
||||
{
|
||||
|
||||
|
||||
std::this_thread::yield();
|
||||
|
||||
this_thread::sleep_for(std::chrono::milliseconds(200));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -407,7 +414,9 @@ void Scanner::runScan()
|
|||
}
|
||||
}
|
||||
|
||||
printf("正常结束\r\n");
|
||||
printf("一张纸完成时间:%f\r\n",sw1.elapsed_ms());
|
||||
if( m_config.params.dpi == 3)
|
||||
this_thread::sleep_for(std::chrono::milliseconds(3000));
|
||||
}
|
||||
|
||||
m_DstScannum = 0;
|
||||
|
@ -417,11 +426,11 @@ void Scanner::runScan()
|
|||
|
||||
int t_delay = m_config.params.dpi == 0x02 ? 150 : (m_config.params.dpi == 0x03 ? 350 : 100);
|
||||
|
||||
this_thread::sleep_for(std::chrono::milliseconds(t_delay)); //走纸多转一会儿 确保扫描传感器过了之后 纸能出完
|
||||
//this_thread::sleep_for(std::chrono::milliseconds(2000)); //走纸多转一会儿 确保扫描传感器过了之后 纸能出完
|
||||
capturer->setFanMode(0);
|
||||
|
||||
|
||||
|
||||
capturer->close();
|
||||
//capturer->close();
|
||||
|
||||
LOG("\n--------------------------scan done --------------------------------\n");
|
||||
|
||||
|
|
|
@ -157,6 +157,11 @@ public:
|
|||
return !capturer->IsImageQueueEmpty();
|
||||
}
|
||||
|
||||
void close_v4l2()
|
||||
{
|
||||
capturer->close();
|
||||
}
|
||||
|
||||
void writeParamars(std::string type, int *value)
|
||||
{
|
||||
// capturer->m_configprop->writeParamars(type, value);
|
||||
|
|
|
@ -126,7 +126,7 @@ UsbScanner::UsbScanner() : m_startscan(false),
|
|||
{
|
||||
imageremain++;
|
||||
m_images.Put(imageinfo);
|
||||
printf("m_images size :%d\r\n",m_images.Size());
|
||||
printf("队列缓存张数 :%d\r\n",m_images.Size());
|
||||
// LOG("Enqueue image index :%d ptr:%p length:%d\n", ++enqueueindex,imageinfo.pJpegData, imageinfo.DataLength);
|
||||
};
|
||||
|
||||
|
@ -307,6 +307,10 @@ bool UsbScanner::GetEventQueueEmpty()
|
|||
return eventsramain == 0;
|
||||
}
|
||||
|
||||
void UsbScanner::close_v4l2()
|
||||
{
|
||||
m_hgScanner->close_v4l2();
|
||||
}
|
||||
HG_JpegCompressInfo UsbScanner::GetFrontImage()
|
||||
{
|
||||
HG_JpegCompressInfo ret = {0};
|
||||
|
|
|
@ -39,6 +39,10 @@ public:
|
|||
virtual void UpdateScanInfo(int type,void* data) override;
|
||||
virtual ScannerScanInfo GetScanInfo() override;
|
||||
virtual void SetLEDStatus(LedStatus status) override;
|
||||
|
||||
|
||||
|
||||
virtual void close_v4l2()override;
|
||||
std::string GetSysInfo();
|
||||
int read_bulk(void *pdata, int length);
|
||||
int write_bulk(void *pdata, int length);
|
||||
|
|
|
@ -4,8 +4,7 @@
|
|||
ZouZhiMotor::ZouZhiMotor()
|
||||
: Motor(motorPorts_Zouzhi)
|
||||
{
|
||||
//auto t_smbtype = smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV;
|
||||
auto t_smbtype = MotorConfig::MTBDType::MT_TMC;
|
||||
auto t_smbtype =MotorConfig::MTBDType::MT_TMC;//SMBType::MB_DRV_TMC216;// smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV;
|
||||
m_zouparamex = m_mtconfig->GetMotorSpeedParam(true, t_smbtype, 4, 1, 1);
|
||||
speedConfig();
|
||||
}
|
||||
|
@ -16,14 +15,12 @@ ZouZhiMotor::~ZouZhiMotor()
|
|||
|
||||
void ZouZhiMotor::start()
|
||||
{
|
||||
Motor::setDirection(0);
|
||||
Motor::start(delays, m_zouparamex.mt_param);
|
||||
}
|
||||
|
||||
void ZouZhiMotor::speedChange(int speed, int dpi, int colormode) // speed should be in range [0,5] (by ply,at 2019.5.23)
|
||||
{
|
||||
//auto t_smbtype = smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV;
|
||||
auto t_smbtype = MotorConfig::MTBDType::MT_TMC;
|
||||
auto t_smbtype = MotorConfig::MTBDType::MT_TMC;//SMBType::MB_DRV_TMC216;//smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV;
|
||||
m_zouparamex = m_mtconfig->GetMotorSpeedParam(true, t_smbtype, speed, colormode, dpi);
|
||||
speedConfig();
|
||||
}
|
||||
|
@ -35,7 +32,7 @@ void ZouZhiMotor::speedRecover()
|
|||
|
||||
void ZouZhiMotor::speedConfig()
|
||||
{
|
||||
LOG("ZouZhiMotor speed=%d \n dpi=%d \n colormode=%d \n finalPeriod=%d \n Fmin=%d \n a=%.2f \n offset=%.2f \n stepnum=%.2f \n finalDelay=%.2f \n ",
|
||||
printf("ZouZhiMotor speed=%d \n dpi=%d \n colormode=%d \n finalPeriod=%d \n Fmin=%d \n a=%.2f \n offset=%.2f \n stepnum=%.2f \n finalDelay=%.2f \n ",
|
||||
m_zouparamex.speed,
|
||||
m_zouparamex.dpi,
|
||||
m_zouparamex.colormode,
|
||||
|
@ -50,5 +47,4 @@ void ZouZhiMotor::speedConfig()
|
|||
|
||||
delays = speedup_cfg(m_zouparamex.mt_param.finalPeriod, m_zouparamex.mt_param.Fmin, m_zouparamex.mt_param.stepnum, m_zouparamex.mt_param.a,
|
||||
m_zouparamex.mt_param.offset, m_zouparamex.mt_param.finalDelay);
|
||||
}
|
||||
|
||||
}
|
93
main.cpp
93
main.cpp
|
@ -292,6 +292,7 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
sts.Data = m_scanner->GetEvent().code; // 确保第一张扫描之前所发生的异常事件能够被通知
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -300,6 +301,8 @@ int main(int argc, char *argv[])
|
|||
if (evt != (int)HG_ScannerStatus::NORMAL && evt != (int)HG_ScannerStatus::STOP_SCAN)
|
||||
{
|
||||
sts.Data = m_scanner->GetEvent().code; // 扫描中途的事件能够被通知
|
||||
printf("关闭V4L2 333\r\n");
|
||||
m_scanner->close_v4l2();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -322,7 +325,13 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
auto data = m_scanner->GetEvent();
|
||||
if (data.code == (int)(HG_ScannerStatus::STOP_SCAN))
|
||||
{
|
||||
system("cpufreq-set -g ondemand");
|
||||
printf("关闭V4L2 4444\r\n");
|
||||
m_scanner->close_v4l2();
|
||||
}
|
||||
|
||||
|
||||
sts.Data = data.code;
|
||||
if (data.code == (int)HG_ScannerStatus::AUTO_FLATTING || data.code == (int)HG_ScannerStatus::AUTO_FLAT_FINISHED)
|
||||
{
|
||||
|
@ -330,6 +339,8 @@ int main(int argc, char *argv[])
|
|||
m_scanner->write_bulk(&sts, sizeof(sts));
|
||||
auto msg = data.msg;
|
||||
m_scanner->write_bulk(&msg[0], msg.length());
|
||||
//printf("关闭V4L2 111\r\n");
|
||||
//m_scanner->close_v4l2();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -345,10 +356,10 @@ int main(int argc, char *argv[])
|
|||
if (info.pJpegData != nullptr && info.DataLength != 0)
|
||||
{
|
||||
int tt = m_scanner->write_bulk((void *)&info, sizeof(int) * 7);
|
||||
|
||||
// int tt = m_scanner->write_bulk(info.pJpegData, info.DataLength);
|
||||
// free(info.pJpegData);
|
||||
|
||||
printf("USB传输第一次write_bulk时间 :%f \r\n",sw.elapsed_ms());
|
||||
// tt = m_scanner->write_bulk(info.pJpegData, info.DataLength);
|
||||
// //free(info.pJpegData);
|
||||
// printf("USB传输第二次write_bulk时间 :%f \r\n",sw.elapsed_ms());
|
||||
// break;
|
||||
|
||||
// tt = m_scanner->write_bulk(info.mat.data, info.DataLength);
|
||||
|
@ -359,7 +370,7 @@ int main(int argc, char *argv[])
|
|||
int total = info.DataLength;
|
||||
while (total > 0)
|
||||
{
|
||||
int dstlength = 1024 * 512;
|
||||
int dstlength = 1024 * 1024;
|
||||
if (total <= dstlength)
|
||||
{
|
||||
dstlength = total;
|
||||
|
@ -371,6 +382,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
int tt = m_scanner->write_bulk(info.pJpegData + index, dstlength);
|
||||
//printf("USB传输第二次write_bulk时间 :%f \r\n",sw.elapsed_ms());
|
||||
|
||||
// printf("write_bulk info.pJpegData+index = %p index = %d dstlength =%d tt = %d \n", info.pJpegData + index, index, dstlength, tt);
|
||||
if (tt <= -1)
|
||||
|
@ -382,10 +394,10 @@ int main(int argc, char *argv[])
|
|||
else
|
||||
index += tt;
|
||||
}
|
||||
// free(info.pJpegData);
|
||||
tjFree(info.pJpegData);
|
||||
LOG("Free info.pJpegData done\n");
|
||||
// printf("TIME!!!!!!!!!!!!! :%f info.DataLength:%d\r\n",sw.elapsed_ms(),info.DataLength);
|
||||
//dnasfree(info.pJpegData);
|
||||
//tjFree(info.pJpegData);
|
||||
//LOG("Free info.pJpegData done\n");
|
||||
printf("USB传输一帧时间 :%f \r\n",sw.elapsed_ms());
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -504,16 +516,16 @@ int main(int argc, char *argv[])
|
|||
m_scanner->SetFlatParam(usbcb.Command, buffer);
|
||||
}
|
||||
break;
|
||||
case USBCommand::GET_FLAT_DATA:
|
||||
{
|
||||
LOG("enter GET_FLAT_DATA \n");
|
||||
int buffer[128];
|
||||
auto params = m_scanner->GetCaptureParams();
|
||||
LOG("size of params %d \n", sizeof(params));
|
||||
memcpy(buffer, ¶ms, sizeof(params));
|
||||
m_scanner->write_bulk(&buffer, sizeof(int) * 128);
|
||||
}
|
||||
break;
|
||||
// case USBCommand::GET_FLAT_DATA:
|
||||
// {
|
||||
// LOG("enter GET_FLAT_DATA \n");
|
||||
// int buffer[128];
|
||||
// auto params = m_scanner->GetCaptureParams();
|
||||
// LOG("size of params %d \n", sizeof(params));
|
||||
// memcpy(buffer, ¶ms, sizeof(params));
|
||||
// m_scanner->write_bulk(&buffer, sizeof(int) * 128);
|
||||
// }
|
||||
// break;
|
||||
case USBCommand::PRE_UPGRADE:
|
||||
{
|
||||
writesyslog(LOG_INFO, "start updating system\n");
|
||||
|
@ -760,54 +772,63 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
case USBCommand::GET_FLAT_DATA:
|
||||
{
|
||||
FLAT_INFO *flatinfo = static_cast<FLAT_INFO *>(usbcb.Data);
|
||||
FLAT_INFO flatinfo ;
|
||||
flatinfo.value = usbcb.Data;
|
||||
flatinfo.params.status = 100; ////正常状态
|
||||
unsigned char *lut_buffer;
|
||||
if (flatinfo->params.dpi != 0)
|
||||
if (flatinfo.params.dpi != 0)
|
||||
{
|
||||
std::ifstream lut_item;
|
||||
int dpi = flatinfo->params.dpi == 0x01 ? 200 : (flatinfo->params.dpi == 0x02 ? 300 : 600);
|
||||
std::string mode = flatinfo->params.colormode ? "clr" : "gray";
|
||||
std::string is_white_lut = flatinfo->params.is_whiteimage ? "white" : "bw";
|
||||
int dpi = flatinfo.params.dpi == 0x01 ? 200 : (flatinfo.params.dpi == 0x02 ? 300 : 600);
|
||||
std::string mode = flatinfo.params.colormode ? "clr" : "gray";
|
||||
std::string is_white_lut = flatinfo.params.is_whiteimage ? "white" : "bw";
|
||||
std::string lut_path = "/mnt/conf-disk/huago/lut" + std::to_string(dpi) + mode + is_white_lut + ".bmp";
|
||||
lut_item.open(lut_path, std::ios_base::in | std::ios_base::binary);
|
||||
|
||||
|
||||
if (!lut_item.is_open())
|
||||
{
|
||||
flatinfo->params.datalen = 0;
|
||||
flatinfo->params.status = 1; // 文件打开失败
|
||||
flatinfo.params.datalen = 0;
|
||||
flatinfo.params.status = 1; // 文件打开失败
|
||||
}
|
||||
else
|
||||
{
|
||||
lut_item.seekg(0, std::ios::end);
|
||||
size_t length = lut_item.tellg();
|
||||
lut_item.seekg(0, std::ios::beg);
|
||||
flatinfo->params.datalen = length
|
||||
flatinfo.params.datalen = length;
|
||||
}
|
||||
|
||||
if (flatinfo->params.datalen != 0)
|
||||
if (flatinfo.params.datalen != 0 && flatinfo.params.status == 100)
|
||||
{
|
||||
lut_buffer = new unsigned char[flatinfo->params.datalen];
|
||||
lut_buffer = new unsigned char[flatinfo.params.datalen];
|
||||
if (lut_buffer)
|
||||
lut_item.read(lut_buffer, flatinfo->params.datalen);
|
||||
{
|
||||
lut_item.read((char *)lut_buffer, flatinfo.params.datalen);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
flatinfo->params.status = 2; // OOM 异常
|
||||
flatinfo->params.datalen = 0;
|
||||
flatinfo.params.status = 2; // OOM 异常
|
||||
flatinfo.params.datalen = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
flatinfo->params.datalen = 0;
|
||||
flatinfo->params.status = 3; // 未知dpi
|
||||
flatinfo.params.datalen = 0;
|
||||
flatinfo.params.status = 3; // 未知dpi
|
||||
}
|
||||
|
||||
usbcb.Data = flatinfo->value;
|
||||
usbcb.Data = flatinfo.value;
|
||||
printf("flatinfo.params.status:%d flatinfo.params.datalen:%d flatinfo.value:%d\r\n",flatinfo.params.status,flatinfo.params.datalen,flatinfo.value);
|
||||
m_scanner->write_bulk(&usbcb, sizeof(usbcb));
|
||||
|
||||
if (lut_buffer)
|
||||
{
|
||||
m_scanner->write_bulk(lut_buffer, flatinfo->params.datalen);
|
||||
m_scanner->write_bulk(lut_buffer, flatinfo.params.datalen);
|
||||
delete[] lut_buffer;
|
||||
lut_buffer = NULL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue